v5beta4: Array Arithmetic improved compatibility
This commit is contained in:
1 parent
4b2b530017
commit
d11e0d2d91
4 files changed
+57
-54
No files matched your search
+5
-2
@@ -1,4 +1,4 @@
|
||||
New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
New features in BBC BASIC (Z80) version 5.00, June 2024:
|
||||
|
||||
1. BASIC V statements
|
||||
|
||||
@@ -38,7 +38,10 @@ New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
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.
|
||||
* String array expressions are not currently supported, instead of using
|
||||
a$() = b$() + c$() use a$() = b$() : a$() += c$()
|
||||
The use of EVAL with whole-array expressions is 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$() = ""
|
||||
|
||||
Binary file not shown.
+51
-51
@@ -10,7 +10,7 @@
|
||||
;
|
||||
;VERSION 2.3, 07-05-1984
|
||||
;VERSION 3.0, 08-03-1987
|
||||
;VERSION 5.0, 14-05-2024
|
||||
;VERSION 5.0, 31-05-2024
|
||||
;
|
||||
;BINARY FLOATING POINT REPRESENTATION:
|
||||
; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA
|
||||
@@ -367,6 +367,11 @@ EXPR4B: CALL SAVE
|
||||
CALL DOIT
|
||||
JR EXPR4A
|
||||
;
|
||||
EXPR45: LD A,E
|
||||
CP '+'
|
||||
JR Z,EXPR4
|
||||
CP '-'
|
||||
JR Z,EXPR4
|
||||
EXPR5: CALL ITEM
|
||||
OR A ;TEST TYPE
|
||||
EX AF,AF' ;SAVE TYPE
|
||||
@@ -395,6 +400,9 @@ EXPRS: CALL EXPR
|
||||
RET M
|
||||
JR MISMAT
|
||||
;
|
||||
BADHEX: LD A,28
|
||||
ERROR2: JP ERROR ;"Bad HEX or binary"
|
||||
;
|
||||
NEGATE: EXX
|
||||
LD A,H
|
||||
CPL
|
||||
@@ -419,9 +427,6 @@ ADD1: EXX
|
||||
INC HL
|
||||
RET
|
||||
;
|
||||
BADHEX: LD A,28
|
||||
ERROR2: JP ERROR ;"Bad HEX or binary"
|
||||
;
|
||||
ITEMI: CALL ITEM
|
||||
OR A
|
||||
JP P,SFIX
|
||||
@@ -1914,20 +1919,6 @@ RELOPQ: CP '>'
|
||||
CP '<'
|
||||
RET
|
||||
;
|
||||
COMMA: CALL NXT
|
||||
INC IY
|
||||
CP ','
|
||||
RET Z
|
||||
LD A,5
|
||||
JR ERROR1 ;"Missing ,"
|
||||
;
|
||||
BRAKET: CALL NXT
|
||||
INC IY
|
||||
CP ')'
|
||||
RET Z
|
||||
LD A,27
|
||||
ERROR1: JP ERROR ;"Missing )"
|
||||
;
|
||||
SAVE: INC IY
|
||||
AND 0FH
|
||||
SAVE1: EX AF,AF'
|
||||
@@ -1966,6 +1957,20 @@ DOIT: EX AF,AF'
|
||||
LD A,(IY)
|
||||
RET
|
||||
;
|
||||
COMMA: CALL NXT
|
||||
INC IY
|
||||
CP ','
|
||||
RET Z
|
||||
LD A,5
|
||||
JR ERROR1 ;"Missing ,"
|
||||
;
|
||||
BRAKET: CALL NXT
|
||||
INC IY
|
||||
CP ')'
|
||||
RET Z
|
||||
LD A,27
|
||||
ERROR1: JP ERROR ;"Missing )"
|
||||
;
|
||||
DISPT2: PUSH HL
|
||||
LD HL,SOPTBL
|
||||
JR DISPT0
|
||||
@@ -2044,17 +2049,17 @@ LETARR: RES 6,D ;Lose array marker
|
||||
; allocate space on stack and zero it:
|
||||
;
|
||||
XOR A ;Clear carry and zero error code
|
||||
LD HL,0
|
||||
SBC HL,HL
|
||||
ADD HL,SP ;HL = SP
|
||||
SBC HL,BC
|
||||
JP C,ERROR ;'No room'
|
||||
JR C,ERROR1 ;'No room'
|
||||
PUSH BC
|
||||
LD BC,(FREE)
|
||||
INC B ;Safety margin
|
||||
SBC HL,BC
|
||||
ADD HL,BC
|
||||
POP BC
|
||||
JP C,ERROR ;'No room'
|
||||
JR C,ERROR1 ;'No room'
|
||||
LD SP,HL
|
||||
LETA0: LD (HL),0
|
||||
INC HL
|
||||
@@ -2094,8 +2099,7 @@ EXPRA1: INC IY
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
LD E,A ;For unary minus
|
||||
CALL NXT
|
||||
LD E,A ;Operator
|
||||
CALL ITEMA
|
||||
POP IX
|
||||
POP HL
|
||||
@@ -2171,16 +2175,20 @@ EXPRA8: ADD HL,BC ;Skip remaining elements
|
||||
RET
|
||||
;
|
||||
; ITEMA: evaluate and operate on array item
|
||||
; Inputs: A = operator
|
||||
; D = type
|
||||
; E = operator
|
||||
; Inputs: D = type
|
||||
; E = operator ('=' for first item)
|
||||
; BC = number of elements
|
||||
; HL = pointer to destination on stack
|
||||
; IY = text pointer
|
||||
; Outputs: IY updated
|
||||
; Destroys: Everything except SP
|
||||
;
|
||||
ITEMA: CP '-'
|
||||
ITEMA: CALL NXT
|
||||
PUSH HL ;Pointer to destination
|
||||
PUSH BC ;Number of elements
|
||||
PUSH IY ;In case normal expression
|
||||
PUSH DE ;Ditto
|
||||
CP '-'
|
||||
JR NZ,ITEMA1 ;Not unary minus
|
||||
LD A,E
|
||||
CP '='
|
||||
@@ -2188,16 +2196,14 @@ ITEMA: CP '-'
|
||||
INC IY ;Bump past '-'
|
||||
CALL NXT
|
||||
LD E,'-' ;Unary minus
|
||||
ITEMA1: PUSH HL ;Pointer to destination
|
||||
PUSH BC ;Number of elements
|
||||
PUSH DE ;Type and previous operator
|
||||
PUSH IY ;In case normal expression
|
||||
ITEMA1: PUSH DE ;Type and operator
|
||||
CALL GETVAR
|
||||
POP DE ;Type & operator
|
||||
JR NZ,ITEMA4 ;Non-array expression
|
||||
BIT 6,A
|
||||
JR Z,ITEMA4 ;Not a whole array
|
||||
POP BC ;Junk saved original op
|
||||
POP BC ;Junk saved text pointer
|
||||
POP DE ;Type & operator
|
||||
RES 6,A
|
||||
CP D
|
||||
JP NZ,MISMAT ;'Type mismatch'
|
||||
@@ -2258,10 +2264,12 @@ ITEMA3: EX DE,HL ;DE = destination
|
||||
;
|
||||
; Process numeric non-array item:
|
||||
;
|
||||
ITEMA4: POP IY ;Restore text pointer
|
||||
ITEMA4: POP DE ;Restore original operator
|
||||
POP IY ;Restore original text pointer
|
||||
BIT 7,D
|
||||
JR NZ,ITEMA5
|
||||
CALL EXPR4 ;; should be EXP345
|
||||
PUSH DE
|
||||
CALL EXPR45 ;; should be EXP345
|
||||
LD A,C ;Exponent
|
||||
POP DE ;Type / operator
|
||||
POP BC ;Count
|
||||
@@ -2302,8 +2310,7 @@ ITEMA5: CALL EXPRS
|
||||
LD C,A
|
||||
LD B,0
|
||||
LDIR
|
||||
ITEMA0: POP DE
|
||||
POP BC
|
||||
ITEMA0: POP BC
|
||||
POP IX
|
||||
EXX
|
||||
LD L,A
|
||||
@@ -2361,13 +2368,11 @@ ARRDOT: INC IY ;Bump past dot
|
||||
JR Z,ARR1D
|
||||
LD H,(IY-1)
|
||||
LD L,(IY-2)
|
||||
ARR1D: PUSH AF
|
||||
PUSH DE
|
||||
LD C,A
|
||||
LD B,0
|
||||
CALL MUL16
|
||||
ARR1D: PUSH DE
|
||||
EX DE,HL
|
||||
CALL X14OR5
|
||||
EX DE,HL
|
||||
POP DE
|
||||
POP AF
|
||||
LD B,(IX-1)
|
||||
LD C,(IX-2)
|
||||
;
|
||||
@@ -2518,9 +2523,7 @@ INNER: PUSH DE ;6
|
||||
ADD IY,BC
|
||||
PUSH AF
|
||||
PUSH HL
|
||||
EX DE,HL
|
||||
CALL MUL16
|
||||
EX DE,HL
|
||||
CALL X14OR5
|
||||
POP BC
|
||||
CALL MOD16
|
||||
POP AF
|
||||
@@ -2540,12 +2543,9 @@ INNER: PUSH DE ;6
|
||||
SBC HL,DE
|
||||
PUSH HL
|
||||
POP IY
|
||||
LD L,A
|
||||
LD H,0
|
||||
PUSH AF
|
||||
CALL MUL16
|
||||
POP AF
|
||||
EX DE,HL
|
||||
LD D,B
|
||||
LD E,C
|
||||
CALL X14OR5
|
||||
ADD IX,DE
|
||||
POP HL
|
||||
POP DE
|
||||
|
||||
+1
-1
@@ -174,7 +174,7 @@ PURGE: LD (HL),A ;CLEAR SCRATCHPAD
|
||||
CALL NEWIT
|
||||
JP NZ,CHAIN0 ;AUTO-RUN
|
||||
CALL TELL
|
||||
VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta3'
|
||||
VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta4'
|
||||
DEFB CR
|
||||
DEFB LF
|
||||
NOTICE: DEFM '(C) Copyright R.T.Russell 2024'
|
||||
|
||||
Reference in new issue
Block a user