Compare commits

..
10 Commits
13 changed files with 130 additions and 83 deletions

No files matched your search

+2 -1
View File
@@ -2,7 +2,8 @@
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).
EXIT statement, the address-of operator (^) and byte (unsigned 8-bit) variables and arrays
(& suffix character).
More details of the features added in version 5.00 can be found in the file WHATSNEW.TXT.
+6 -3
View File
@@ -1,4 +1,4 @@
New features in BBC BASIC (Z80) version 5.00, June 2024:
New features in BBC BASIC (Z80) version 5.00, January 2025:
1. BASIC V statements
@@ -54,8 +54,9 @@ New features in BBC BASIC (Z80) version 5.00, June 2024:
4.4 RETURNed parameters from FN/PROC
4.5 Compound assignment (+=, -=, *=, /= etc.)
4.6 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()=
4.7 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,SYS,TINT,WAIT
4.8 Hooks for MODE function, TINT function, WIDTH function
4.7 Hooks for CIRCLE, ELLIPSE, FILL, LINE, ORIGIN, RECTANGLE (graphics)
4.8 Hooks for MOUSE, OFF, ON, SYS, TINT, WAIT (statements)
4.9 Hooks for MODE function, TINT function, WIDTH function
5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY
@@ -66,6 +67,8 @@ New features in BBC BASIC (Z80) version 5.00, June 2024:
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)
5.8 DIM var LOCAL -1 returns the stack pointer, even outside a FN/PROC
5.9 RESTORE LOCAL restores local variables without exiting the FN/PROC
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
Binary file not shown.
+1 -1
View File
@@ -7,7 +7,7 @@ z80asm amos/rmf
z80asm acorn/rmf
z80asm data/rmf
era bbctube.com
link bbctube=/p:0100,main,exec,eval,asmb,math,acorn,amos,/p:4B00,data
link bbctube=/p:0100,main,exec,eval,asmb,math,acorn,amos,/p:4C00,data
hexbin bbctube
era bbctube.hex
ren bbctube.com=bbctube.bin
Binary file not shown.
+21 -1
View File
@@ -3,7 +3,7 @@
;PATCH FOR BBC BASIC TO CP/M 2.2 & 3.0
;* ACORN COMPUTERS Z80 TUBE VERSION *
;(C) COPYRIGHT R.T.RUSSELL, 02-01-1984
;VERSION 5.0, 18-06-2024
;VERSION 5.0, 12-07-2024
;
OSWRCH EQU 0FFEEH
OSWORD EQU 0FFF1H
@@ -61,6 +61,8 @@ TFILL EQU 03H
GLOBAL TINT
GLOBAL WAIT
GLOBAL SYS
GLOBAL CSRON
GLOBAL CSROFF
;
GLOBAL PUTIMS
GLOBAL GETIMS
@@ -385,6 +387,24 @@ GCOL0: LD H,L
CALL WRCH3 ;DLH
XEQGO1: JP XEQ
;
;CSRON - Turn caret on
;CSROFF - Turn caret off
;
CSRON: LD C,1
JR CSRGO
;
CSROFF: LD C,0
CSRGO: LD A,23
CALL OSWRCH
LD A,1
CALL OSWRCH
LD A,C
LD B,8
CSRGO1: CALL OSWRCH
XOR A
DJNZ CSRGO1
JR XEQGO1
;
;LINE x1,y1,x2,y2
;
LINE: CALL EXPRI
+17 -12
View File
@@ -1,8 +1,8 @@
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2025
;
;BBC BASIC INTERPRETER - Z80 VERSION
;EVALUATE EXPRESSION MODULE - "EVAL"
;(C) COPYRIGHT R.T.RUSSELL 1981-2024
;(C) COPYRIGHT R.T.RUSSELL 1981-2025
;
;THE NAME BBC BASIC IS USED WITH THE PERMISSION
;OF THE BRITISH BROADCASTING CORPORATION AND IS
@@ -11,6 +11,9 @@
;VERSION 2.3, 07-05-1984
;VERSION 3.0, 08-03-1987
;VERSION 5.0, 31-05-2024
;VERSION 5.1, 28-12-2024
;VERSION 5.2, 11-01-2025
;VERSION 5.3, 16-03-2025 (Shifts moved to new codes)
;
;BINARY FLOATING POINT REPRESENTATION:
; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA
@@ -273,7 +276,7 @@ SHIFT: CP '='
INC IY
INC B
SHIFT1: LD A,B
SUB 18
SUB 16
JR EXPR2D
;
EXPR2S: EX AF,AF'
@@ -639,7 +642,7 @@ CONS2: LD A,(IY)
RET
;
ARRAY: LD A,14 ;'Bad use of array'
JP ERROR
JR ERROR0
;
; ARRLEN - Get start address and number of elements of an array
; Inputs: HL addresses array descriptor
@@ -723,20 +726,21 @@ LOADS: LD DE,ACCS
EXX
OR A
LD C,A
LD A,80H ;STRING MARKER
REPDUN: LD A,80H ;STRING MARKER
RET Z
LD B,0
LDIR
RET
;
LOADS2: LD A,(HL)
LOADS2: PUSH IX
POP HL
LOADS3: LD A,(HL)
LD (DE),A
INC HL
CP CR
REPDUN: LD A,80H ;STRING MARKER
RET Z
JR Z,REPDUN
INC E
JR NZ,LOADS2
JR NZ,LOADS3
RET ;RETURN NULL STRING
;
; Version 5 extensions:
@@ -1526,9 +1530,8 @@ GET5: LD D,0
GET6: PUSH BC
CALL OSBGET
POP BC
JR C,GET9 ;EOF
BIT 1,B
JR Z,GET8
JR Z,GET10
CP C
JR Z,GET9 ;NUL (or supplied term)
BIT 7,B
@@ -1539,9 +1542,11 @@ GET6: PUSH BC
JR Z,GET9 ;LF
GET7: CP CR
JR Z,GET9 ;CR
GET8: LD (HL),A
GET8: OR A
GET10: LD (HL),A
INC L
DEC D
JR C,GET9 ;EOF
JR NZ,GET6
GET9: EX DE,HL
LD A,80H
+52 -43
View File
@@ -1,8 +1,8 @@
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2025
;
;BBC BASIC INTERPRETER - Z80 VERSION
;STATEMENT EXECUTION MODULE - "EXEC"
;(C) COPYRIGHT R.T.RUSSELL 1981-2024
;(C) COPYRIGHT R.T.RUSSELL 1981-2025
;
;THE NAME BBC BASIC IS USED WITH THE PERMISSION
;OF THE BRITISH BROADCASTING CORPORATION AND IS
@@ -10,7 +10,10 @@
;
;VERSION 2.1, 22-01-1984
;VERSION 3.1, 11-06-1987
;VERSION 5.0, 16-06-2024
;VERSION 5.0, 12-07-2024
;VERSION 5.1, 28-12-2024
;VERSION 5.2, 11-01-2025
;VERSION 5.3, 31-01-2025
;
GLOBAL XEQ
GLOBAL RUN0
@@ -58,6 +61,8 @@
EXTRN BYE
EXTRN NXT
EXTRN NLIST
EXTRN CSRON
EXTRN CSROFF
;
EXTRN OSWRCH
EXTRN OSLINE
@@ -358,6 +363,16 @@ CLI: CALL EXPRS
CALL OSCLI
JR XEQ
;
EXTRAS: CP TELSE-TCMD
JR Z,REM ;ELSE
CP TERROR-TCMD
JR Z,THROW ;ERROR
CP TLINE-TCMD
JP Z,LINE ;LINE
CP TOFF-TCMD
JP Z,CSROFF ;OFF
JP SYNTAX
;
;REM, *
;
EXT: PUSH IY
@@ -372,14 +387,6 @@ REM: PUSH IY
POP IY
JP XEQ0
;
EXTRAS: CP TELSE-TCMD
JR Z,REM ;ELSE
CP TERROR-TCMD
JR Z,THROW ;ERROR
CP TLINE-TCMD
JP Z,LINE ;LINE
JP SYNTAX
;
;ERROR num,string$
;
THROW: CALL EXPRI
@@ -446,7 +453,6 @@ LET: CALL ASSIGN
JR C,SYNTAX ;"Syntax error"
JP P,LETARR ;Numeric array
JP PE,LETARR ;String array
LD A,D ;Type
PUSH DE
PUSH HL
CALL EXPRS
@@ -833,7 +839,9 @@ XEQGO3: JP XEQ
;ON ERROR [LOCAL] statement [:statement...]
;ON ERROR [LOCAL] OFF
;
ON: CP TERROR
ON: CALL TERMQ
JP Z,CSRON
CP TERROR
JR Z,ONERR ;"ON ERROR"
CALL EXPRI
LD A,(IY)
@@ -1791,7 +1799,7 @@ ENDWH1: PUSH IY
CLS: CALL CLRSCN
XOR A
LD (COUNT),A
JP XEQ
JR XEQGO5
;
;STOP
;
@@ -1808,7 +1816,7 @@ STOP: CALL TELL
;REPORT
;
REPOR: CALL REPORT
JP XEQ
JR XEQGO5
;
;CLEAR
;
@@ -1816,32 +1824,30 @@ CLR: CALL CLEAR
LD HL,(PAGE)
JR RESTR1
;
;RESTORE ERROR
;RESTORE DATA / ERROR / LOCAL
;
RESERR: INC IY
LD A,2
RESDEL: INC IY ;Skip DATA / ERROR / LOCAL
LD A,C ;Save error code
EX AF,AF'
LD A,B ;1=DATA, 2=ERROR, 0=LOCAL
CALL RESLOC
JP NZ,XEQ
LD A,53 ;ON ERROR not LOCAL
ERROR5: JP ERROR
;
;RESTORE DATA
;
RESDAT: INC IY
LD A,1
CALL RESLOC
JP NZ,XEQ
LD A,54 ;'DATA not LOCAL'
JR NZ,XEQGO5
EX AF,AF' ;Get error code
DEFB 21H
NOLINE: LD A,41 ;'No such line'
JR ERROR5
ERROR5: JP ERROR
;
;RESTORE [line]
;RESTORE [line | +n | DATA | ERROR | LOCAL]
;
RESTOR: CP TERROR
JR Z,RESERR
LD BC,200H + 53 ;'ON ERROR not LOCAL'
JR Z,RESDEL
CP TDATA
JR Z,RESDAT
LD BC,100H + 54 ;'DATA not LOCAL'
JR Z,RESDEL
CP TLOCAL
LD BC,12 ;'Not in a FN or PROC'
JR Z,RESDEL
CP '+'
JR Z,RESREL
LD HL,(PAGE)
@@ -2014,25 +2020,25 @@ BPUT: CALL CHANEL ;CHANNEL NUMBER
EXX
LD A,L
POP DE
CALL OSBPUT
BPUT1: CALL OSBPUT
BPUTX: JR XEQGO1
;
BPUTS: LD A,E
POP DE
LD D,A
LD HL,ACCS
OR A
JR Z,BPUTS0
BPUTS1: LD A,(HL)
INC HL
CALL OSBPUT
DEC D
JR NZ,BPUTS1
CALL NXT
BPUTS0: CALL NXT
CP ';'
INC IY
JR Z,BPUTX
LD A,LF
CALL OSBPUT
DEC IY
JR NZ,BPUT1
INC IY
JR BPUTX
;
;CALL address[,var[,var...]]
@@ -2356,7 +2362,7 @@ MODIFY: LD A,E
CALL FPP
POP IX
POP DE
JP C,ERROR
JR C,ERRORC
STORE0: LD A,D ;Type
STOREN: CP 5
JR Z,STORE5
@@ -2393,14 +2399,17 @@ MODIFS: LD A,L ;Operator
CP '+'
LD A,H ;Type
JR NZ,STACCS
PUSH IY
PUSH IX
POP IY
EX (SP),IY
CALL PUSHS
PUSH IY
POP IX
CALL LOADS
POP BC
LD A,E
ADD C
LD A,19 ;String too long
ERRORC: JR C,ERROR6
LD A,B ;Type
INC C
DEC C
@@ -2473,7 +2482,7 @@ CHECK: PUSH HL
POP HL
RET C
XOR A
JP ERROR ;"No room"
ERROR6: JP ERROR ;"No room"
;
STORS3: LD C,E
PUSH IX
+4
View File
@@ -19,6 +19,8 @@
GLOBAL TINT
GLOBAL WAIT
GLOBAL SYS
GLOBAL CSRON
GLOBAL CSROFF
;
GLOBAL ADVAL
GLOBAL POINT
@@ -55,6 +57,8 @@ MODEFN:
WIDFN:
WAIT:
SYS:
CSRON:
CSROFF:
XOR A
CALL EXTERR
DEFM 'Sorry'
+12 -11
View File
@@ -1,8 +1,8 @@
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024
TITLE BBC BASIC (C) R.T.RUSSELL 1981-2025
;
;BBC BASIC INTERPRETER - Z80 VERSION
;COMMANDS AND COMMON MODULE - "MAIN"
;(C) COPYRIGHT R.T.RUSSELL 1981-2024
;(C) COPYRIGHT R.T.RUSSELL 1981-2025
;
;THE NAME BBC BASIC IS USED WITH THE PERMISSION
;OF THE BRITISH BROADCASTING CORPORATION AND IS
@@ -11,6 +11,8 @@
;VERSION 2.3, 07-05-1984
;VERSION 3.0, 01-03-1987
;VERSION 5.0, 31-05-2024
;VERSION 5.1, 10-08-2024
;VERSION 5.2, 16-02-2025
;
EXTRN XEQ
EXTRN RUN0
@@ -174,10 +176,10 @@ PURGE: LD (HL),A ;CLEAR SCRATCHPAD
CALL NEWIT
JP NZ,CHAIN0 ;AUTO-RUN
CALL TELL
VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta6'
VERMSG: DEFM 'BBC BASIC (Z80) Version 5.00 '
DEFB CR
DEFB LF
NOTICE: DEFM '(C) Copyright R.T.Russell 2024'
NOTICE: DEFM '(C) Copyright R.T.Russell 2025'
DEFB CR
DEFB LF
DEFB 0
@@ -2017,13 +2019,12 @@ DLP1: EX (SP),HL
;
RANGE: LD A,(IY)
CP '$'
RET Z
CP '%'
RET Z
RET C
CP '&'+1
CCF
RET NC
CP '('
RET Z
CP '&'
RET Z
RANGE1: CP '0'
RET C
CP '9'+1
@@ -2107,14 +2108,14 @@ LEXAN7: CP '*'
JR Z,LEXAN9
OR A
CALL P,LEX ;TOKENISE IF POSS.
CP TDATA
JR Z,LEXAN9
CP TOKLO
JR C,LEXAN8
CP TOKHI+1
JR NC,LEXAN8
ADD A,OFFSET ;LEFT VERSION
LEXAN8: CP TREM
JR Z,LEXAN9
CP TDATA
JR NZ,LEXANA
LEXAN9: SET 6,C ;QUIT TOKENISING
LEXANA: CP TFN
+15 -11
View File
@@ -1,10 +1,11 @@
TITLE '(C) COPYRIGHT R.T.RUSSELL 1986-2024'
TITLE '(C) COPYRIGHT R.T.RUSSELL 1986-2025'
;
;Z80 FLOATING POINT PACKAGE
;(C) COPYRIGHT R.T.RUSSELL 1986-2024
;VERSION 0.0, 26-10-1986
;VERSION 0.1, 14-12-1988 (BUG FIX)
;VERSION 5.0, 16-06-2024 (SHIFTS ADDED)
;VERSION 5.1, 16-03-2025 (Shifts moved to new codes)
;
;BINARY FLOATING POINT REPRESENTATION:
; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA
@@ -129,10 +130,13 @@ FTABLE: DEFW ABS ;16 ABS
DEFW FTEST ;40 TEST
DEFW FCOMP ;41 COMPARE
;
DEFW ISHL ;42 <<
DEFW ISHX ;43 <<<
DEFW ISAR ;44 >>
DEFW ISHR ;45 >>>
DEFW BAD ;42 Reserved for Z88
DEFW BAD ;43 Reserved for Z88
;
DEFW ISHL ;44 <<
DEFW ISHX ;45 <<<
DEFW ISAR ;46 >>
DEFW ISHR ;47 >>>
;
RTABLE: DEFW FAND ;AND (FLOATING-POINT)
DEFW FBDIV ;DIV
@@ -591,16 +595,16 @@ TRUE: LD HL,-1
;
ISHX:
ISHL: CALL SHIFTS
JR Z,SHRET
RET Z
ISHL1: EXX
ADD HL,HL
EXX
ADC HL,HL
DJNZ ISHL1
SHRET: RET
RET
;
ISAR: CALL SHIFTS
JR Z,SHRET
RET Z
ISAR1: SRA H
RR L
EXX
@@ -611,7 +615,7 @@ ISAR1: SRA H
RET
;
ISHR: CALL SHIFTS
JR Z,SHRET
RET Z
ISHR1: SRL H
RR L
EXX
@@ -629,10 +633,10 @@ SHIFTS: CALL FIX2
LD A,E
EXX
LD B,32
JR NZ,SHMAX
RET NZ
LD B,A
OR A
SHMAX: RET
RET
;
;FUNCTIONS:
;
Binary file not shown.
Binary file not shown.