v5beta6: Added Acorn Z80 edition

This commit is contained in:
Richard Russell committed 2024-06-17 10:26:16 +01:00
1 parent 6bc386b76b
commit efc55d3fd7
12 files changed
+1931 -67

No files matched your search

+2 -2
View File
@@ -10,8 +10,8 @@ More details of the features added in version 5.00 can be found in the file WHAT
The files in green constitute the generic BBC BASIC interpreter which is shared by all the 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 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 blue box are used to build the generic CP/M edition. The files in the red box are used
the Acorn Z80 Second Processor edition (in principle: the source files are on an 8" floppy!) to build the Acorn Z80 Second Processor edition.
Note that the name 'BBC BASIC' is used by permission of the British Broadcasting Corporation 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. and is not transferrable to a derived or forked work.
+7 -6
View File
@@ -50,17 +50,18 @@ New features in BBC BASIC (Z80) version 5.00, June 2024:
4.1 Bit-shifts <<, >>, >>> 4.1 Bit-shifts <<, >>, >>>
4.2 Floating-point indirection (|) 4.2 Floating-point indirection (|)
4.3 RETURNed parameters from FN/PROC 4.3 Additional VDU delimiter '|'
4.4 Compound assignment (+=, -=, *=, /= etc.) 4.4 RETURNed parameters from FN/PROC
4.5 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()= 4.5 Compound assignment (+=, -=, *=, /= etc.)
4.6 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,TINT,SYS,WAIT 4.6 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()=
4.7 Hooks for WIDTH function, TINT function, MODE function 4.7 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,SYS,TINT,WAIT
4.8 Hooks for MODE function, TINT function, WIDTH function
5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY 5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY
5.1 EXIT REPEAT / WHILE / FOR [var] 5.1 EXIT REPEAT / WHILE / FOR [var]
5.2 Address-of operator (^) 5.2 Address-of operator (^)
5.3 Byte variables and arrays (& suffix) 5.3 Byte (unsigned 8-bit) variables and arrays (& suffix)
5.4 'BY len' and 'TO term' qualifiers to GET$#file 5.4 'BY len' and 'TO term' qualifiers to GET$#file
5.5 ELSE IF <condition> THEN; (trailing semicolon) 5.5 ELSE IF <condition> THEN; (trailing semicolon)
5.6 == synonymous with = in comparisons 5.6 == synonymous with = in comparisons
Binary file not shown.
+13
View File
@@ -0,0 +1,13 @@
z80asm main/rmf
z80asm exec/rmf
z80asm eval/rmf
z80asm asmb/rmf
z80asm math/rmf
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
hexbin bbctube
era bbctube.hex
ren bbctube.com=bbctube.bin
Binary file not shown.
+737
View File
@@ -0,0 +1,737 @@
TITLE COPYRIGHT (C) R.T.RUSSELL 1983-2024
;
;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, 16-06-2024
;
OSWRCH EQU 0FFEEH
OSWORD EQU 0FFF1H
OSBYTE EQU 0FFF4H
;
ESC EQU 1BH
TBY EQU 0FH
TTO EQU 0B8H
TFILL EQU 03H
;
EXTRN ITEMI
EXTRN EXPRI
EXTRN COMMA
EXTRN TERMQ
EXTRN BRAKET
EXTRN EXTERR
EXTRN STOREN
EXTRN TRAP
EXTRN VAR
EXTRN NXT
EXTRN XEQ
;
EXTRN ACCS
EXTRN COUNT
EXTRN WIDTH
EXTRN SCRAP
;
GLOBAL OSCALL
GLOBAL CLRSCN
GLOBAL PUTCSR
GLOBAL GETCSR
GLOBAL PUTIME
GLOBAL GETIME
GLOBAL OSKEY
;
GLOBAL CLG
GLOBAL MOVE
GLOBAL DRAW
GLOBAL PLOT
GLOBAL MODE
GLOBAL COLOUR
GLOBAL GCOL
GLOBAL ADVAL
GLOBAL SOUND
GLOBAL ENVEL
GLOBAL POINT
;
GLOBAL CIRCLE
GLOBAL ELLIPS
GLOBAL FILL
GLOBAL MOUSE
GLOBAL ORIGIN
GLOBAL RECTAN
GLOBAL LINE
GLOBAL TINT
GLOBAL WAIT
GLOBAL SYS
;
GLOBAL PUTIMS
GLOBAL GETIMS
GLOBAL TINTFN
GLOBAL MODEFN
GLOBAL WIDFN
;
;GETIME - Read elapsed-time clock.
; Outputs: DEHL = elapsed time (centiseconds)
; Destroys: A,D,E,H,L,F
;
GETIME: LD A,1
LD HL,SCRAP
CALL OSWORD
LD HL,SCRAP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX DE,HL
RET
;
;GETIMS - Read real-time clock as string.
; Outputs: TIME$ in string accumulator
; E = string length (25)
; Destroys: A,B,C,D,E,H,L,F
;
GETIMS: LD A,14
LD HL,SCRAP
LD (HL),0
CALL OSWORD
LD HL,SCRAP
LD DE,ACCS
LD A,(HL)
CP E
RET Z
LD BC,25
LDIR
RET
;
;
;PUTIME - Load elapsed-time clock.
; Inputs: DEHL = time to load (centiseconds)
; Destroys: A,D,E,H,L,F
;
PUTIME: PUSH IX
LD IX,SCRAP
LD (IX+0),L
LD (IX+1),H
LD (IX+2),E
LD (IX+3),D
LD A,2
LD HL,SCRAP
CALL OSWORD
POP IX
RET
;
;PUTIMS - Wtite real-time clock as string.
; Inputs: string in string accumulator
; E = string length
; Destroys: A,B,C,D,E,H,L,F
;
PUTIMS: LD A,E ;Length
CP 26
RET NC
LD B,0
LD C,A
LD DE,SCRAP+1
LD HL,ACCS
LDIR
LD HL,SCRAP
LD (HL),A
LD A,15
JP OSWORD
;
;
;CLRSCN - Clear screen.
; Destroys: A,D,E,H,L,F
;
CLRSCN: LD A,0CH
JP OSWRCH
;
;
;OSKEY - 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
;
OSKEY: LD A,129
CALL OSBYTE
LD A,H
OR A
RET NZ ;TIME-OUT, CARRY RESET
LD A,L
SCF
RET ;NORMAL, CARRY SET
;
;PUTCSR - Move cursor to specified position.
; Inputs: DE = horizontal position (LHS=0)
; HL = vertical position (TOP=0)
; Destroys: A,D,E,H,L,F
;
PUTCSR: LD A,1FH
CALL OSWRCH
LD A,E
CALL OSWRCH
LD A,L
JP OSWRCH
;
;GETCSR - Return cursor coordinates.
; Outputs: DE = X coordinate (POS)
; HL = Y coordinate (VPOS)
; Destroys: A,D,E,H,L,F
;
GETCSR: LD A,134
CALL OSBYTE
LD E,L
LD L,H
LD D,0
LD H,D
RET
;
;POINT - var=POINT(x,y)
;
POINT: CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
POP DE
CALL BRAKET
LD IX,SCRAP
LD (IX+0),E
LD (IX+1),D
LD (IX+2),L
LD (IX+3),H
LD HL,SCRAP
LD A,9
CALL OSWORD
LD A,(IX+4)
LD L,A
ADD A,1
SBC A,A
LD H,A
RETEXX: EXX
LD H,A
LD L,A
XOR A
LD C,A
RET
;
;ADVAL - var=ADVAL(n)
;
ADVAL: CALL ITEMI
EXX
LD A,128
CALL OSBYTE
XOR A
JR RETEXX
;
;MODEFN - var=MODE
;
MODEFN: LD A,135
CALL OSBYTE
LD L,H
RETU8: XOR A
LD H,A
JR RETEXX
;
;WIDFN - var=WIDTH
;
WIDFN: LD A,(WIDTH)
LD L,A
JR RETU8
;
;ENVEL - ENVELOPE var,var,var,var,var,var,var,
; var,var,var,var,var,var,var
;
ENVEL: LD B,0
LD IX,SCRAP
PUSH BC
PUSH IX
ENVEL1: CALL EXPRI
EXX
POP IX
POP BC
LD (IX),L
LD A,B
CP 13
JR Z,ENVEL2
INC B
INC IX
PUSH BC
PUSH IX
CALL COMMA
JR ENVEL1
ENVEL2: LD HL,SCRAP
LD A,8
CALL OSWORD
JP XEQ
;
;SOUND - SOUND var,var,var,var
;
SOUND: LD B,0
LD IX,SCRAP
PUSH BC
PUSH IX
SOUND1: CALL EXPRI
EXX
POP IX
POP BC
LD (IX+0),L
LD (IX+1),H
INC IX
INC IX
INC B
INC B
LD A,B
CP 8
JR Z,SOUND2
PUSH BC
PUSH IX
CALL COMMA
JR SOUND1
SOUND2: LD HL,SCRAP
LD A,7
CALL OSWORD
JP XEQ
;
;MODE - MODE n
;
MODE: CALL EXPRI
XOR A
LD (COUNT),A
EXX
LD H,L
LD L,22
CALL WRCH2
JR XEQGO1
;
;CLG
;
CLG: LD A,16
CALL OSWRCH
JR XEQGO1
;
;ORIGIN x,y
;
ORIGIN: CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
POP DE
LD C,29
CALL WRCH5
JR XEQGO1
;
;COLOUR n
;COLOUR n,p
;COLOUR n,r,g,b
;
COLOUR: CALL EXPRI ;n
EXX
LD A,(IY)
CP ','
JR Z,PALCOL
LD H,L
LD L,17
CALL WRCH2
JR XEQGO1
;
PALCOL: PUSH HL
CALL CEXPRI ;p or r
EXX
EX DE,HL
LD HL,0
LD A,(IY)
CP ','
JR NZ,PALET1
PUSH DE
CALL CEXPRI ;g
EXX
PUSH HL
CALL CEXPRI ;b
EXX
POP DE
POP BC
LD A,L
POP HL
LD D,C ;r
LD C,L ;n
LD L,E ;g
LD H,A ;b
LD E,16
PUSH BC
PALET1: POP BC
LD B,19
CALL WRCH6
JR XEQGO1
;
;GCOL [a,]b
;
GCOL: CALL EXPRI
EXX
LD E,0
LD A,(IY)
CP ','
JR NZ,GCOL0
PUSH HL
CALL CEXPRI
EXX
POP DE
GCOL0: LD H,L
LD L,E
LD D,18
CALL WRCH3 ;DLH
XEQGO1: JP XEQ
;
;LINE x1,y1,x2,y2
;
LINE: CALL EXPRI
EXX
PUSH HL
CALL EXPR3
EX (SP),HL ;HL <- x1, (SP) <- y2
PUSH BC
EX DE,HL
LD C,4
CALL VDU25
POP DE
POP HL
LD C,5
JR PLOT4A
;
;CIRCLE [FILL] x,y,r
;
CIRCLE: CP TFILL
PUSH AF
JR NZ,CIRCL0
INC IY
CIRCL0: CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
POP BC ;y
POP DE ;x
PUSH HL
LD L,C
LD H,B
LD C,4 ; PLOT 4 = MOVE
CALL VDU25
POP DE ;r
LD HL,0
POP AF
LD C,145 ; PLOT 145 = outline circle
JR NZ,PLOT4A
LD C,153 ; PLOT 153 = filled circle
PLOT4A: JR PLOT4
;
;ELLIPSE [FILL] x,y,a,b
;
ELLIPS: CP TFILL
PUSH AF
JR NZ,ELLIP0
INC IY
ELLIP0: CALL EXPRI
EXX
PUSH HL
CALL EXPR3
EX (SP),HL ;HL <- x, (SP) <- b
PUSH BC
EX DE,HL
LD C,4 ; PLOT 4 = Move absolute
CALL VDU25
POP DE ;a
PUSH DE
LD HL,0
LD C,L ; PLOT 0 - Move relative
CALL VDU25
POP DE ;a
XOR A
LD L,A
LD H,A
SBC HL,DE
EX DE,HL
POP HL ;b
POP AF
LD C,193 ; PLOT 193 = outline ellipse
JR NZ,PLOT4
LD C,201 ; PLOT 201 = filled ellipse
JR PLOT4
;
;MOVE [BY} x,y
;DRAW [BY] x,y
;PLOT [BY] [n,]x,y
;FILL [BY] x,y
;
MOVE: LD C,4
JR PLOT1
;
DRAW: LD C,5
JR PLOT1
;
FILL: LD C,133
JR PLOT1
;
PLOT: LD C,69
CP TBY
JR Z,PLOT1
CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
LD A,(IY)
CP ','
JR Z,PLOT3
POP DE
LD C,69
JR PLOT4
;
PLOT1: CP TBY
JR NZ,PLOT2
INC IY
RES 2,C ;Change absolute to relative
PLOT2: PUSH BC
CALL EXPRI
EXX
PLOT3: PUSH HL
CALL CEXPRI
EXX
POP DE
POP BC
PLOT4: CALL VDU25
JP XEQ
;
;RECTANGLE [FILL] x,y,w[,h] [TO xnew,ynew]
;
RECTAN: CP TFILL
PUSH AF
JR NZ,RECT0
INC IY
RECT0: CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
PUSH HL
LD A,(IY)
CP ','
JR NZ,RECT1
CALL CEXPRI
EXX
RECT1: POP BC ;w
POP DE ;y
EX (SP),HL ;HL <- x, (SP) <- h
PUSH BC
EX DE,HL
LD C,4
CALL VDU25
LD A,(IY)
CP TTO
JR Z,RECTTO
POP DE ;w
POP HL ;h
POP AF
JR NZ,OUTLIN
LD C,97
JR PLOT4
;
;Block copy / move:
;
RECTTO: INC IY ; Bump over TO
CALL EXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
POP BC ;newx
POP DE ;w
EX (SP),HL ;HL <- h, (SP) <- newy
PUSH BC
EX DE,HL
LD C,0
CALL VDU25
POP DE ;newx
POP HL ;newy
POP AF
LD C,190 ; PLOT 190 - Block copy
JR NZ,PLOT4B
DEC C ; PLOT 189 - Block move
PLOT4B: JR PLOT4
;
;Outline rectangle:
;
OUTLIN: LD C,9 ; PLOT 9 - draw relative
PUSH HL
LD HL,0
CALL VDU25 ; side 1
POP HL
PUSH DE
LD DE,0
CALL VDU25 ; side 2
POP DE
PUSH HL
XOR A
LD L,A
LD H,A
SBC HL,DE
EX DE,HL
LD L,A
LD H,A
CALL VDU25 ; side 3
POP DE
XOR A
LD L,A
LD H,A
SBC HL,DE
LD E,A
LD D,A
JR PLOT4B
;
;MOUSE x, y, b
;
MOUSE: LD A,128
LD HL,9
CALL OSBYTE
PUSH HL
LD A,128
LD HL,8
CALL OSBYTE
PUSH HL
LD A,128
LD HL,7
CALL OSBYTE
PUSH HL
CALL VAR
POP HL
CALL STOREI
CALL COMMA
CALL NXT
CALL VAR
POP HL
CALL STOREI
CALL COMMA
CALL NXT
CALL VAR
POP HL
CALL STOREI
XEQGO2: JP XEQ
;
;WAIT [n]
;
WAIT: CALL TERMQ
JR Z,XEQGO2
CALL EXPRI
EXX
LD B,H
LD C,L
CALL GETIME
ADD HL,BC
LD BC,0
EX DE,HL
ADC HL,BC
EX DE,HL
WAIT1: CALL TRAP
PUSH DE
PUSH HL
CALL GETIME
POP BC
OR A
SBC HL,BC
LD H,B
LD L,C
EX DE,HL
POP BC
SBC HL,BC
JR NC,XEQGO2
EX DE,HL
LD D,B
LD E,C
JR WAIT1
;
;OSCALL - Trap call to FFxx
;
OSCALL: POP HL ;DITCH RETURN ADDRESS
LD HL,OSRET
PUSH HL ;NEW RETURN ADDRESS
LD A,(IX+4) ;A%
LD E,(IX+20) ;E%
LD H,(IX+100) ;Y%
LD L,(IX+96) ;X%
JP (IY)
OSRET: PUSH AF
LD A,L ;F H L A
LD L,H ;| | | |
EXX ;| | | |
POP BC ;| | | |
LD H,A ;| | | |
LD L,B ;H L H' L'
LD A,C
EXX
LD H,A
RET
;
VDU25: LD B,25
WRCH6: LD A,B
CALL OSWRCH
WRCH5: LD A,C
CALL OSWRCH
WRCH4: LD A,E
CALL OSWRCH
WRCH3: LD A,D
CALL OSWRCH
WRCH2: LD A,L
CALL OSWRCH
LD A,H
JP OSWRCH
;
EXPR3: CALL CEXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
PUSH HL
CALL CEXPRI
EXX
POP BC ;x2
POP DE ;y1
RET
;
CEXPRI: CALL COMMA
JP EXPRI
;
STOREI: BIT 7,A
JR NZ,EEK
BIT 6,A
JR NZ,EEK
EXX
LD HL,0
LD C,L
JP STOREN
;
EEK: LD A,50
CALL EXTERR
DEFB 13H ;'Bad '
DEFB 04H ;'MOUSE'
DEFB 20H
DEFB 15H ;'variable'
DEFB 0
;
TINT:
TINTFN:
SYS:
XOR A
CALL EXTERR
DEFM 'Sorry'
DEFB 0
;
END
+1119
View File
File diff suppressed because it is too large. Load diff
+21 -21
View File
@@ -440,14 +440,14 @@ INCRDF: CALL INCSEC
; ;
READ: CALL SETDMA READ: CALL SETDMA
LD A,33 LD A,33
BDOS1: CALL BDOS0 ;* BDOS1: CALL BDOS0
JR NZ,CPMERR ;* JR NZ,CPMERR
OR A ;* OR A
RET ;* RET
CPMERR: LD A,255 ;* CP/M 3 CPMERR: LD A,255
CALL EXTERR ;* BDOS ERROR CALL EXTERR
DEFM 'CP/M Error' ;* DEFM 'CP/M Error'
DEFB 0 ;* DEFB 0
; ;
BDOS0: PUSH BC BDOS0: PUSH BC
PUSH DE PUSH DE
@@ -456,8 +456,8 @@ BDOS0: PUSH BC
PUSH IY PUSH IY
LD C,A LD C,A
CALL BDOS CALL BDOS
INC H ;* TEST H INC H
DEC H ;* CP/M 3 ONLY DEC H
POP IY POP IY
POP IX POP IX
POP HL POP HL
@@ -883,10 +883,10 @@ DIR1: CALL LTRAP
LD HL,DSKBUF+1 LD HL,DSKBUF+1
ADD HL,DE ADD HL,DE
PUSH HL PUSH HL
LD DE,8 ;** LD DE,8
ADD HL,DE ADD HL,DE
LD E,(HL) ;** LD E,(HL)
INC HL ;** INC HL
BIT 7,(HL) ;SYSTEM FILE? BIT 7,(HL) ;SYSTEM FILE?
POP HL POP HL
LD C,18 LD C,18
@@ -899,13 +899,13 @@ DIR1: CALL LTRAP
ADD A,'A' ADD A,'A'
CALL OSWRCH CALL OSWRCH
LD B,8 LD B,8
LD A,' ' ;** LD A,' '
BIT 7,E ;** READ ONLY? BIT 7,E ;READ ONLY?
JR Z,DIR3 ;** JR Z,DIR3
LD A,'*' ;** LD A,'*'
DIR3: CALL CPTEXT DIR3: CALL CPTEXT
LD B,3 LD B,3
LD A,' ' ;** LD A,' '
CALL SPTEXT CALL SPTEXT
POP BC POP BC
DJNZ DIR2 DJNZ DIR2
@@ -1046,11 +1046,11 @@ COMDS: DEFM 'BY'
; B = number of characters to print ; B = number of characters to print
; Destroys: A,B,H,L,F ; Destroys: A,B,H,L,F
; ;
CPTEXT: PUSH AF ;** CPTEXT: PUSH AF
LD A,':' LD A,':'
CALL OSWRCH CALL OSWRCH
POP AF ;** POP AF
SPTEXT: CALL OSWRCH ;** SPTEXT: CALL OSWRCH
PTEXT: LD A,(HL) PTEXT: LD A,(HL)
AND 7FH AND 7FH
INC HL INC HL
+14 -5
View File
@@ -10,7 +10,7 @@
; ;
;VERSION 2.1, 22-01-1984 ;VERSION 2.1, 22-01-1984
;VERSION 3.1, 11-06-1987 ;VERSION 3.1, 11-06-1987
;VERSION 5.0, 10-06-2024 ;VERSION 5.0, 16-06-2024
; ;
GLOBAL XEQ GLOBAL XEQ
GLOBAL RUN0 GLOBAL RUN0
@@ -1557,14 +1557,14 @@ IF: CALL EXPRI
JR Z,IFNOT ;FALSE JR Z,IFNOT ;FALSE
LD A,(IY) LD A,(IY)
CP TTHEN CP TTHEN
JR NZ,XEQGO7 JP NZ,XEQ
IF0: INC IY ;SKIP "THEN" IF0: INC IY ;SKIP "THEN"
LD A,(IY) LD A,(IY)
CP ';' CP ';'
JR Z,IF0 JR Z,IF0
IF1: CALL NXT IF1: CALL NXT
CP TLINO CP TLINO
JR NZ,XEQGO7 ;STATEMENT FOLLOWS JP NZ,XEQ ;STATEMENT FOLLOWS
JP GOTO ;LINE NO. FOLLOWS JP GOTO ;LINE NO. FOLLOWS
; ;
IFELSE: LD A,(IY) IFELSE: LD A,(IY)
@@ -1968,13 +1968,17 @@ TRACE0: DEC HL
TRACE1: LD (TRACEN),HL TRACE1: LD (TRACEN),HL
JR XEQGO1 JR XEQGO1
; ;
;VDU expr,expr;.... ;VDU expr,expr;....[|]
; ;
VDU: CALL EXPRI VDU: CALL EXPRI
EXX EXX
LD A,L LD A,L
CALL OSWRCH LD B,1
VDU1: CALL OSWRCH
DJNZ VDU1
LD A,(IY) LD A,(IY)
CP '|'
JR Z,VDU4
CP ',' CP ','
JR Z,VDU2 JR Z,VDU2
CP ';' CP ';'
@@ -1986,6 +1990,11 @@ VDU3: CALL TERMQ
JR NZ,VDU JR NZ,VDU
JR XEQGO1 JR XEQGO1
; ;
VDU4: INC IY
XOR A
LD B,9
JR VDU1
;
;CLOSE channel number ;CLOSE channel number
; ;
CLOSE: CALL CHANEL CLOSE: CALL CHANEL
+1 -1
View File
@@ -174,7 +174,7 @@ PURGE: LD (HL),A ;CLEAR SCRATCHPAD
CALL NEWIT CALL NEWIT
JP NZ,CHAIN0 ;AUTO-RUN JP NZ,CHAIN0 ;AUTO-RUN
CALL TELL CALL TELL
VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta5' VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta6'
DEFB CR DEFB CR
DEFB LF DEFB LF
NOTICE: DEFM '(C) Copyright R.T.Russell 2024' NOTICE: DEFM '(C) Copyright R.T.Russell 2024'
+17 -32
View File
@@ -4,7 +4,7 @@
;(C) COPYRIGHT R.T.RUSSELL 1986-2024 ;(C) COPYRIGHT R.T.RUSSELL 1986-2024
;VERSION 0.0, 26-10-1986 ;VERSION 0.0, 26-10-1986
;VERSION 0.1, 14-12-1988 (BUG FIX) ;VERSION 0.1, 14-12-1988 (BUG FIX)
;VERSION 5.0, 21-05-2024 (SHIFTS ADDED) ;VERSION 5.0, 16-06-2024 (SHIFTS ADDED)
; ;
;BINARY FLOATING POINT REPRESENTATION: ;BINARY FLOATING POINT REPRESENTATION:
; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA ; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA
@@ -387,16 +387,7 @@ IMUL: LD A,H
JP NEGATE JP NEGATE
; ;
IMUL1: DEC C IMUL1: DEC C
EXX CALL SLA8
SLA E
RL D
EXX
RL E
RL D
EXX
ADC HL,HL
EXX
ADC HL,HL
JP P,IMUL1 ;NORMALISE JP P,IMUL1 ;NORMALISE
EX AF,AF' EX AF,AF'
RET M RET M
@@ -2177,30 +2168,12 @@ SQR2: INC A
RET P RET P
SQRA: SLA C SQRA: SLA C
RL B RL B
INC C
EXX EXX
RL C RL C
RL B RL B
EXX CALL SLA8
INC C CALL SLA8
SLA E
RL D
EXX
RL E
RL D
EXX
ADC HL,HL
EXX
ADC HL,HL
EXX
SLA E
RL D
EXX
RL E
RL D
EXX
ADC HL,HL
EXX
ADC HL,HL
EXX EXX
JP NC,SQR1 JP NC,SQR1
SQR3: OR A SQR3: OR A
@@ -2230,6 +2203,18 @@ SQRB: ADD HL,HL
DEC C DEC C
RET RET
; ;
SLA8: EXX
SLA E
RL D
EXX
RL E
RL D
EXX
ADC HL,HL
EXX
ADC HL,HL
RET
;
DIGITQ: LD A,(IX) DIGITQ: LD A,(IX)
CP '9'+1 CP '9'+1
CCF CCF
Binary file not shown.