diff --git a/bin/cpm/BBCBASIC.COM b/bin/cpm/BBCBASIC.COM index 228e967..0b3f046 100644 Binary files a/bin/cpm/BBCBASIC.COM and b/bin/cpm/BBCBASIC.COM differ diff --git a/src/EXEC.Z80 b/src/EXEC.Z80 index b2db858..da5ac69 100644 --- a/src/EXEC.Z80 +++ b/src/EXEC.Z80 @@ -10,7 +10,7 @@ ; ;VERSION 2.1, 22-01-1984 ;VERSION 3.1, 11-06-1987 -;VERSION 5.0, 19-05-2024 +;VERSION 5.0, 10-06-2024 ; GLOBAL XEQ GLOBAL RUN0 @@ -430,7 +430,7 @@ SWAP1: LD C,(HL) INC DE INC HL DJNZ SWAP1 - JR XEQR + JR XEQGO4 ; ;[LET] var = expr ; @@ -453,7 +453,7 @@ LET: CALL ASSIGN POP IX POP HL CALL MODIFS -XEQR: JP XEQ +XEQGO4: JP XEQ ; ; GETSTR - Get string variable ; Inputs: IY = text pointer @@ -498,7 +498,7 @@ ASM: LD (CURLIN),IY AND 0FH OR 30H LD (HL),A - JR XEQR + JR XEQGO4 ; ;= ; @@ -625,9 +625,11 @@ DIM3: PUSH HL BIT 0,A JR Z,ARRCHK ;NOT LOCAL LD HL,0 - ADD HL,SP SBC HL,DE + OR A SBC HL,BC + ADD HL,SP + JR Z,ARRCHK ;RESERVE NOTHING LD SP,HL PUSH DE PUSH BC @@ -889,8 +891,10 @@ ON4: LD A,(IY) JP Z,IF1 ;ELSE CLAUSE CP CR JR NZ,ON4 - LD A,40 -ERROR2: JP ERROR ;"ON range" + LD A,40 ;'ON range' + DEFB 21H +FORVAR: LD A,34 ;'FOR variable' +ERROR2: JP ERROR ; ONPROC: LD A,TON JP PROC @@ -961,9 +965,6 @@ XEQGO2: JP XEQ ; ;FOR var = expr TO expr [STEP expr] ; -FORVAR: LD A,34 - JR ERROR2 ;"FOR variable" -; FOR: CALL ASSIGN JR NZ,FORVAR ;"FOR variable" PUSH AF ;SAVE TYPE @@ -1367,7 +1368,7 @@ ENDPRO: POP BC JP ERROR ;"No PROC" ; ENDPR1: POP IY - JP XEQ +XEQGO6: JP XEQ ; ;INPUT #channel,var,var... ; @@ -1428,7 +1429,7 @@ INPUT: CP '#' INPUT0: LD HL,BUFFER LD (HL),CR ;INITIALISE EMPTY INPUT1: CALL TERMQ - JP Z,XEQ ;DONE + JR Z,XEQGO6 ;DONE INC IY CP ',' JR Z,INPUT3 ;SKIP COMMA @@ -1556,14 +1557,14 @@ IF: CALL EXPRI JR Z,IFNOT ;FALSE LD A,(IY) CP TTHEN - JP NZ,XEQ + JR NZ,XEQGO7 IF0: INC IY ;SKIP "THEN" LD A,(IY) CP ';' JR Z,IF0 IF1: CALL NXT CP TLINO - JP NZ,XEQ ;STATEMENT FOLLOWS + JR NZ,XEQGO7 ;STATEMENT FOLLOWS JP GOTO ;LINE NO. FOLLOWS ; IFELSE: LD A,(IY) @@ -1603,8 +1604,8 @@ MELSE: LD BC,-3 LD BC,TENDIF LD DE,TENDIF*256+TTHEN CALL NSCAN - JP Z,XEQ - JR NENDIF + JR NZ,NENDIF +XEQGO7: JP XEQ ; ; WHEN and OTHERWISE: ; @@ -1613,7 +1614,7 @@ WHEN: LD BC,-3 LD BC,TENDCASE LD DE,TENDCASE*256+TOF CALL NSCAN - JP Z,XEQ + JR Z,XEQGO7 LD A,47 JR ERROR4 ;"Missing ENDCASE" ; @@ -1707,12 +1708,12 @@ CASE2: LD A,(IY) ;Finished, level stack if string: ; CASE9: BIT 0,B - JR Z,CASE8 + JR Z,XEQGO5 LD H,0 LD L,C ADD HL,SP LD SP,HL -CASE8: JP XEQ + JR XEQGO5 ; ;Matched, so skip any more expressions: ; @@ -2727,6 +2728,7 @@ RESARR: POP BC ADD HL,SP CALL NZ,FREESA ;Free string array RESAR1: LD SP,HL + INC IX ;Flag something restored JR RESLO1 ; ; RESLOC - Restore local variables/arrays or DATA/ERROR status from stack diff --git a/src/MAIN.Z80 b/src/MAIN.Z80 index 1753333..335449c 100644 --- a/src/MAIN.Z80 +++ b/src/MAIN.Z80 @@ -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 5beta4' +VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta5' DEFB CR DEFB LF NOTICE: DEFM '(C) Copyright R.T.Russell 2024'