2024/05/27 : Initial commit
This commit is contained in:
commit
dd5b8b369d
24 files changed
+13388
No files matched your search
+49
@@ -0,0 +1,49 @@
|
||||
# Prerequisites
|
||||
*.d
|
||||
*.bat
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
build/
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Editor files
|
||||
*~
|
||||
#*
|
||||
.#*
|
||||
@@ -0,0 +1,17 @@
|
||||
# BBCZ80
|
||||
BBC BASIC (Z80) v5 is an implementation of the BBC BASIC programming language for the Z80 CPU.
|
||||
It is largely compatible with Acorn's ARM BASIC V but with a few language extensions based on
|
||||
features of 'BBC BASIC for Windows' and 'BBC BASIC for SDL 2.0'. These extensions include the
|
||||
EXIT statement, the address-of operator (^) and byte (8-bit) variables and arrays (& suffix).
|
||||
|
||||
More details of the features added in version 5.00 can be found in the file WHATSNEW.TXT.
|
||||
|
||||

|
||||
|
||||
The files in green constitute the generic BBC BASIC interpreter which is shared by all the
|
||||
editions, it (just!) fits in 16 Kbytes so could be held in a ROM of this size. The files in
|
||||
the blue box are used to build the CP/M edition. The files in the red box are used to build
|
||||
the Acorn Z80 Second Processor edition (in principle: the source files are on an 8" floppy!)
|
||||
|
||||
Note that the name 'BBC BASIC' is used by permission of the British Broadcasting Corporation
|
||||
and is not transferrable to a derived or forked work.
|
||||
@@ -0,0 +1,68 @@
|
||||
New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
|
||||
1. BASIC V statements
|
||||
|
||||
1.1 WHILE...ENDWHILE
|
||||
1.2 Multi-line IF...THEN...ELSE...ENDIF
|
||||
1.3 CASE...WHEN...OTHERWISE...ENDCASE
|
||||
1.4 LOCAL DATA / RESTORE DATA
|
||||
1.5 ON ERROR LOCAL / RESTORE ERROR
|
||||
1.6 DIM var LOCAL size
|
||||
1.7 ERROR err, message$
|
||||
1.8 RESTORE +n
|
||||
1.9 SWAP var1,var2
|
||||
1.10 BPUT #file,string$[;]
|
||||
1.11 QUIT
|
||||
|
||||
2. BASIC V functions
|
||||
|
||||
2.1 DIM(array()[,sub])
|
||||
2.2 END (pointer to free space)
|
||||
2.3 REPORT$
|
||||
2.4 Binary constants
|
||||
2.5 LEFT$ & RIGHT$ with last parameter omitted
|
||||
2.6 MOD(array)
|
||||
2.7 SUM(array)
|
||||
2.8 SUMLEN(array)
|
||||
2.9 GET$#file
|
||||
|
||||
3. BASIC V whole array operations
|
||||
|
||||
3.1 Pass a whole array to a FN/PROC
|
||||
3.2 Pass a whole array to CALL
|
||||
3.3 Whole array assignment
|
||||
3.4 Whole array arithmetic *
|
||||
3.5 Array dot-product operator
|
||||
3.6 Array initialisation lists
|
||||
3.7 Array compound assignment (+= etc.)
|
||||
3.8 Make a whole array LOCAL
|
||||
3.9 DIM a LOCAL array (on the stack) +
|
||||
|
||||
* String array expressions A$() = B$() + C$() are not currently supported.
|
||||
+ LOCAL string arrays should be initialised to their maximum needed length
|
||||
to eliminate the risk of a memory leak each time the PROC/FN is called:
|
||||
LOCAL a$() : DIM a$(size%) : a$() = STRING$(max%, "a") : a$() = ""
|
||||
|
||||
4. Miscellaneous BASIC V features
|
||||
|
||||
4.1 Bit-shifts <<, >>, >>>
|
||||
4.2 Floating-point indirection (|)
|
||||
4.3 RETURNed parameters from FN/PROC
|
||||
4.4 Compound assignment (+=, -=, *=, /= etc.)
|
||||
4.5 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()=
|
||||
4.6 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,TINT,SYS,WAIT
|
||||
4.7 Hooks for WIDTH function, TINT function, MODE function
|
||||
|
||||
5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY
|
||||
|
||||
5.1 EXIT REPEAT / WHILE / FOR [var]
|
||||
5.2 Address-of operator ^
|
||||
5.3 Byte variables and arrays (& suffix)
|
||||
5.4 'BY len' and 'TO term' qualifiers to GET$#file
|
||||
5.5 ELSE IF <condition> THEN; (trailing semicolon)
|
||||
5.6 == synonymous with = in comparisons
|
||||
5.7 DIM a global array inside a FN/PROC (use RETURN)
|
||||
|
||||
Note: The token for PUT has changed from &CE in version 3 to &0E in version 5.
|
||||
If this token is present in existing programs it will list as ENDWHILE rather
|
||||
than PUT, and the programs will need to be modified to restore functionality.
|
||||
Binary file not shown.
@@ -0,0 +1,14 @@
|
||||
m80 dist,dist.lst=dist.z80 /z
|
||||
m80 main,main.lst=main.z80 /z
|
||||
m80 exec,exec.lst=exec.z80 /z
|
||||
m80 eval,eval.lst=eval.z80 /z
|
||||
m80 asmb,asmb.lst=asmb.z80 /z
|
||||
m80 cmos,cmos.lst=cmos.z80 /z
|
||||
m80 math,math.lst=math.z80 /z
|
||||
m80 hook,hook.lst=hook.z80 /z
|
||||
m80 data,data.lst=data.z80 /z
|
||||
era bbcbasic.com
|
||||
link bbcbasic=dist,main,exec,eval,asmb,math,hook,cmos,/p:4B00,data
|
||||
hexbin bbcbasic
|
||||
era bbcbasic.hex
|
||||
ren bbcbasic.com=bbcbasic.bin
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2024, Richard T. Russell, http://www.rtrussell.co.uk/
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
+1009
File diff suppressed because it is too large.
Load diff
+1493
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,68 @@
|
||||
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024
|
||||
;
|
||||
;RAM MODULE FOR BBC BASIC INTERPRETER
|
||||
;FOR USE WITH VERSION 5.0 OF BBC BASIC
|
||||
;(C) COPYRIGHT R.T.RUSSELL 1981-2024
|
||||
;
|
||||
GLOBAL ACCS
|
||||
GLOBAL BUFFER
|
||||
GLOBAL ONERSP
|
||||
GLOBAL LIBASE
|
||||
GLOBAL PAGE
|
||||
GLOBAL LOMEM
|
||||
GLOBAL FREE
|
||||
GLOBAL HIMEM
|
||||
GLOBAL RANDOM
|
||||
GLOBAL COUNT
|
||||
GLOBAL WIDTH
|
||||
GLOBAL ERL
|
||||
GLOBAL ERR
|
||||
GLOBAL ERRTRP
|
||||
GLOBAL ERRTXT
|
||||
GLOBAL TRACEN
|
||||
GLOBAL AUTONO
|
||||
GLOBAL INCREM
|
||||
GLOBAL LISTON
|
||||
GLOBAL DATPTR
|
||||
GLOBAL FNPTR
|
||||
GLOBAL PROPTR
|
||||
GLOBAL STAVAR
|
||||
GLOBAL OC
|
||||
GLOBAL PC
|
||||
GLOBAL DYNVAR
|
||||
GLOBAL CURLIN
|
||||
GLOBAL USER
|
||||
;
|
||||
;n.b. ACCS, BUFFER & STAVAR must be on page boundaries.
|
||||
;
|
||||
ACCS: DEFS 256 ;STRING ACCUMULATOR
|
||||
BUFFER: DEFS 256 ;STRING INPUT BUFFER
|
||||
STAVAR: DEFS 27*4 ;STATIC VARIABLES
|
||||
OC EQU STAVAR+15*4 ;CODE ORIGIN (O%)
|
||||
PC EQU STAVAR+16*4 ;PROGRAM COUNTER (P%)
|
||||
DYNVAR: DEFS 54*2 ;DYN. VARIABLE POINTERS
|
||||
FNPTR: DEFS 2 ;DYN. FUNCTION POINTER
|
||||
PROPTR: DEFS 2 ;DYN. PROCEDURE POINTER
|
||||
;
|
||||
PAGE: DEFS 2 ;START OF USER PROGRAM
|
||||
LOMEM: DEFS 2 ;START OF DYN. STORAGE
|
||||
FREE: DEFS 2 ;FIRST FREE-SPACE BYTE
|
||||
HIMEM: DEFS 2 ;FIRST BYTE ABOVE STACK
|
||||
LIBASE: DEFS 2 ;START OF FIRST LIBRARY
|
||||
;
|
||||
TRACEN: DEFS 2 ;TRACE FLAG AND NUMBER
|
||||
AUTONO: DEFS 2 ;AUTO FLAG AND NUMBER
|
||||
ERRTRP: DEFS 2 ;ON ERROR STMT POINTER \
|
||||
ONERSP: DEFS 2 ;ON ERROR LOCAL STKPTR /
|
||||
ERRTXT: DEFS 2 ;ERROR MESSAGE POINTER
|
||||
DATPTR: DEFS 2 ;DATA POINTER
|
||||
ERL: DEFS 2 ;LINE NO OF LAST ERROR
|
||||
CURLIN: DEFS 2 ;POINTER TO CURRENT LINE
|
||||
RANDOM: DEFS 5 ;RANDOM NUMBER
|
||||
COUNT: DEFS 1 ;PRINT POSITION
|
||||
WIDTH: DEFS 1 ;PRINT WIDTH
|
||||
ERR: DEFS 1 ;ERROR NUMBER
|
||||
LISTON: DEFS 1 ;LISTO & OPT FLAG
|
||||
INCREM: DEFS 1 ;AUTO INCREMENT
|
||||
;
|
||||
USER: END
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982-2024
|
||||
;
|
||||
;BBC BASIC (Z80) - CP/M VERSION 2.20 & 3.00
|
||||
;(C) COPYRIGHT R.T.RUSSELL, 1982-2024.
|
||||
;ALL RIGHTS RESERVED.
|
||||
;
|
||||
;THIS PROGRAM ALLOWS THE USER TO ADAPT BBC BASIC TO THE
|
||||
;PARTICULAR CHARACTERISTICS OF HIS SYSTEM HARDWARE ETC.
|
||||
;
|
||||
;THE PROGRAM RESIDES AT 100H FOR EASE OF LOADING.
|
||||
;*** IT MUST NOT EXCEED 256 BYTES IN TOTAL LENGTH ***
|
||||
;
|
||||
;PLEASE NOTE THAT A Z80 PROCESSOR AND CP/M VERSION 2.2
|
||||
;OR LATER ARE REQUIRED.
|
||||
;
|
||||
;R.T.RUSSELL, 11-03-1984, 03-05-1989, 12-05-2024
|
||||
;
|
||||
CPM EQU 5
|
||||
COLD EQU 200H
|
||||
;
|
||||
GLOBAL CLRSCN
|
||||
GLOBAL PUTCSR
|
||||
GLOBAL GETCSR
|
||||
GLOBAL PUTIME
|
||||
GLOBAL GETIME
|
||||
GLOBAL GETKEY
|
||||
GLOBAL BYE
|
||||
;
|
||||
ASEG
|
||||
ORG 100H
|
||||
;
|
||||
;JUMP TABLE - BASIC makes calls to hardware-dependent
|
||||
;features via this table:
|
||||
;
|
||||
JP INIT
|
||||
CLRSCN: JP CLS ;CLEAR SCREEN
|
||||
PUTCSR: JP PCSR ;SET CURSOR POSN.
|
||||
GETCSR: JP GCSR ;READ CURSOR POSN.
|
||||
PUTIME: JP PTIME ;SET ELAPSED TIME
|
||||
GETIME: JP GTIME ;READ ELAPSED TIME
|
||||
GETKEY: JP INKEY ;READ KEY (TIME LIMIT)
|
||||
BYE: JP REBOOT ;RETURN TO CP/M
|
||||
;
|
||||
;BDOS - Save the IX and IY registers and before performing a
|
||||
; CP/M function call.
|
||||
;
|
||||
BDOS: PUSH IX
|
||||
PUSH IY
|
||||
CALL CPM
|
||||
POP IY
|
||||
POP IX
|
||||
RET
|
||||
;
|
||||
;INIT - Perform hardware initialisation (if any).
|
||||
;
|
||||
INIT: LD A,2
|
||||
INC A
|
||||
LD DE,NOTZ80
|
||||
JP PE,FAIL
|
||||
LD C,12
|
||||
CALL BDOS
|
||||
OR A
|
||||
LD DE,NOTV2
|
||||
JP NZ,COLD
|
||||
FAIL: LD C,9
|
||||
CALL BDOS
|
||||
RST 0
|
||||
;
|
||||
NOTZ80: DEFB 'Not a Z80$'
|
||||
NOTV2: DEFB 'Not CP/M 2$'
|
||||
;
|
||||
;REBOOT - Switch off interrupts and return to CP/M
|
||||
;
|
||||
REBOOT: RST 0
|
||||
;
|
||||
;GTIME - Read elapsed-time clock.
|
||||
; Outputs: DEHL = elapsed time (centiseconds)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
GTIME: PUSH BC
|
||||
CALL TICKS
|
||||
LD BC,(OFFLO)
|
||||
ADD HL,BC
|
||||
EX DE,HL
|
||||
LD BC,(OFFHI)
|
||||
ADC HL,BC
|
||||
EX DE,HL
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;PTIME - Load elapsed-time clock.
|
||||
; Inputs: DEHL = time to load (centiseconds)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
PTIME: PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
CALL TICKS
|
||||
LD B,H
|
||||
LD C,L
|
||||
POP HL
|
||||
OR A
|
||||
SBC HL,BC
|
||||
LD (OFFLO),HL
|
||||
LD B,D
|
||||
LD C,E
|
||||
POP HL
|
||||
SBC HL,BC
|
||||
LD (OFFHI),HL
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; Get OS elapsed-time clock
|
||||
; Outputs: DEHL = time (centiseconds)
|
||||
; Destroys: A,B,C,D,E,H,L,F
|
||||
;
|
||||
TICKS: LD C,248 ;RunCPM-specific function call
|
||||
CALL BDOS
|
||||
PUSH DE
|
||||
EX DE,HL
|
||||
OR A
|
||||
SBC HL,HL
|
||||
LD BC,-5
|
||||
LD A,32
|
||||
DIV0: ADD HL,BC
|
||||
JR C,DIV1
|
||||
SBC HL,BC
|
||||
DIV1: RL E
|
||||
RL D
|
||||
EX (SP),HL
|
||||
RL L
|
||||
RL H
|
||||
EX (SP),HL
|
||||
ADC HL,HL
|
||||
DEC A
|
||||
JR NZ,DIV0
|
||||
EX DE,HL
|
||||
POP DE
|
||||
RET
|
||||
;
|
||||
;INKEY - Sample keyboard with specified wait.
|
||||
; Inputs: HL = Time to wait (centiseconds)
|
||||
; Outputs: Carry reset indicates time-out.
|
||||
; If carry set, A = character typed.
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
INKEY: PUSH BC
|
||||
PUSH HL
|
||||
CALL TICKS
|
||||
POP DE
|
||||
ADD HL,DE
|
||||
WAIT: PUSH HL
|
||||
LD C,6
|
||||
LD E,0FFH
|
||||
CALL BDOS
|
||||
POP HL
|
||||
OR A
|
||||
SCF
|
||||
JR NZ,INKEY1
|
||||
PUSH HL
|
||||
CALL TICKS
|
||||
POP DE
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
JR C,WAIT
|
||||
INKEY1: POP BC
|
||||
RET
|
||||
;
|
||||
;CLS - Clear screen.
|
||||
; (Customise to suit your VDU)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
CLS: RET
|
||||
;
|
||||
;PCSR - Move cursor to specified position.
|
||||
; Inputs: DE = horizontal position (LHS=0)
|
||||
; HL = vertical position (TOP=0)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
PCSR: RET
|
||||
;
|
||||
;GCSR - Return cursor coordinates.
|
||||
; Outputs: DE = X coordinate (POS)
|
||||
; HL = Y coordinate (VPOS)
|
||||
; Destroys: A,D,E,H,L,F
|
||||
;
|
||||
GCSR: LD DE,0
|
||||
LD HL,0
|
||||
RET
|
||||
;
|
||||
;COUT - Output a character to the console
|
||||
; Inputs: A = character
|
||||
; Destroys: A,F
|
||||
;
|
||||
COUT: PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD E,A
|
||||
LD C,2
|
||||
CALL BDOS
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
IF $ GT 1F0H
|
||||
ERROR 'INSUFFICIENT SPACE'
|
||||
ENDIF
|
||||
;
|
||||
ORG 1F0H
|
||||
;
|
||||
OFFLO: DEFW 0 ;TIME OFFSET LO
|
||||
OFFHI: DEFW 0 ;TIME OFFSET HI
|
||||
DEFB 80 ;WIDTH
|
||||
DEFB 'G' AND 1FH ;CURSOR UP
|
||||
DEFB 'O' AND 1FH ;CURSOR DOWN
|
||||
DEFB 'F' AND 1FH ;START OF LINE
|
||||
DEFB 'N' AND 1FH ;END OF LINE
|
||||
DEFB 'X' AND 1FH ;DELETE TO END OF LINE
|
||||
DEFB 08H ;BACKSPACE & DELETE
|
||||
DEFB 'U' AND 1FH ;DEL TO START OF LINE
|
||||
DEFB 'J' AND 1FH ;CURSOR LEFT
|
||||
DEFB 'L' AND 1FH ;CURSOR RIGHT
|
||||
DEFB 'R' AND 1FH ;DELETE CHARACTER
|
||||
DEFB 'Q' AND 1FH ;INS/OVR TOGGLE
|
||||
;
|
||||
FIN: END
|
||||
+2586
File diff suppressed because it is too large.
Load diff
+3273
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,63 @@
|
||||
;
|
||||
GLOBAL CLG
|
||||
GLOBAL COLOUR
|
||||
GLOBAL DRAW
|
||||
GLOBAL ENVEL
|
||||
GLOBAL GCOL
|
||||
GLOBAL MODE
|
||||
GLOBAL MOVE
|
||||
GLOBAL PLOT
|
||||
GLOBAL SOUND
|
||||
GLOBAL PUTIMS
|
||||
GLOBAL CIRCLE
|
||||
GLOBAL ELLIPSE
|
||||
GLOBAL FILL
|
||||
GLOBAL MOUSE
|
||||
GLOBAL ORIGIN
|
||||
GLOBAL RECTAN
|
||||
GLOBAL LINE
|
||||
GLOBAL TINT
|
||||
GLOBAL WAIT
|
||||
GLOBAL SYS
|
||||
;
|
||||
GLOBAL ADVAL
|
||||
GLOBAL POINT
|
||||
GLOBAL GETIMS
|
||||
GLOBAL TINTFN
|
||||
GLOBAL MODEFN
|
||||
GLOBAL WIDFN
|
||||
;
|
||||
EXTRN EXTERR
|
||||
;
|
||||
CLG:
|
||||
COLOUR:
|
||||
DRAW:
|
||||
ENVEL:
|
||||
GCOL:
|
||||
MODE:
|
||||
MOVE:
|
||||
PLOT:
|
||||
SOUND:
|
||||
ADVAL:
|
||||
POINT:
|
||||
GETIMS:
|
||||
PUTIMS:
|
||||
CIRCLE:
|
||||
ELLIPSE:
|
||||
FILL:
|
||||
MOUSE:
|
||||
ORIGIN:
|
||||
RECTAN:
|
||||
LINE:
|
||||
TINT:
|
||||
TINTFN:
|
||||
MODEFN:
|
||||
WIDFN:
|
||||
WAIT:
|
||||
SYS:
|
||||
XOR A
|
||||
CALL EXTERR
|
||||
DEFM 'Sorry'
|
||||
DEFB 0
|
||||
;
|
||||
END
|
||||
+2236
File diff suppressed because it is too large.
Load diff
+2266
File diff suppressed because it is too large.
Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user