diff --git a/WHATSNEW.TXT b/WHATSNEW.TXT index 41621cc..a2cf451 100644 --- a/WHATSNEW.TXT +++ b/WHATSNEW.TXT @@ -21,9 +21,9 @@ New features in BBC BASIC (Z80) version 5.00, May 2024: 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.6 MOD(array()) +2.7 SUM(array()) +2.8 SUMLEN(array()) 2.9 GET$#file 3. BASIC V whole array operations @@ -56,7 +56,7 @@ New features in BBC BASIC (Z80) version 5.00, May 2024: 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.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 THEN; (trailing semicolon) diff --git a/bin/cpm/BBCBASIC.COM b/bin/cpm/BBCBASIC.COM index 7ca5625..3541e8b 100644 Binary files a/bin/cpm/BBCBASIC.COM and b/bin/cpm/BBCBASIC.COM differ diff --git a/bin/cpm/MAKE.SUB b/bin/cpm/MAKE.SUB index 4827b77..f14a362 100644 --- a/bin/cpm/MAKE.SUB +++ b/bin/cpm/MAKE.SUB @@ -1,12 +1,12 @@ -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 +z80asm dist/rmf +z80asm main/rmf +z80asm exec/rmf +z80asm eval/rmf +z80asm asmb/rmf +z80asm cmos/rmf +z80asm math/rmf +z80asm hook/rmf +z80asm data/rmf era bbcbasic.com link bbcbasic=dist,main,exec,eval,asmb,math,hook,cmos,/p:4B00,data hexbin bbcbasic diff --git a/src/CMOS.Z80 b/src/CMOS.Z80 index 792d2ad..539ee06 100644 --- a/src/CMOS.Z80 +++ b/src/CMOS.Z80 @@ -39,6 +39,7 @@ EXTRN FREE EXTRN HIMEM EXTRN CURLIN + EXTRN AUTONO EXTRN USER EXTRN VERMSG ; @@ -1256,7 +1257,8 @@ WRCH1: CALL BDOS0 SET 1,(HL) RET ; -TOGGLE: LD A,(FLAGS) +TOGGLE: LD BC,0 + LD A,(FLAGS) XOR 00000100B LD (FLAGS),A RET @@ -1319,6 +1321,8 @@ LIMIT: CALL Z,KEYGET ;READ KEYBOARD OR A ;TEST FOR ESCAPE LD A,C JP M,OSEXIT + CP 'P' AND 1FH + JP Z,TOGGLE CP (IX-11) ;CURSOR UP (IX-11) JP Z,LEFT CP (IX-10) ;CURSOR DOWN (IX-10) @@ -1328,13 +1332,11 @@ LIMIT: CALL Z,KEYGET ;READ KEYBOARD JR Z,BACK CP (IX-9) ;START OF LINE (IX-9) JR Z,LEFT - CP (IX-7) ;CLEAR RIGHT (IX-7) - JR Z,DELETE CP (IX-8) ;END OF LINE (IX-8) JP Z,RIGHT + CP (IX-7) ;CLEAR RIGHT (IX-7) + JR Z,DELETE LD C,0 ;INHIBIT REPEAT - CP 'P' AND 1FH - JP Z,TOGGLE CP (IX-1) ;INSERT / OVR (IX-1) JP Z,INSERT CP (IX-6) ;DELETE LEFT (IX-6) @@ -1359,10 +1361,15 @@ OSEXIT: LD A,(HL) JP NZ,ABORT ;ESCAPE LD A,LF CALL OSWRCH - LD DE,(CURLIN) XOR A LD L,A LD (EDPTR),HL + LD DE,(CURLIN) + CP D + RET NZ + CP E + RET NZ + LD DE,(AUTONO) CP D RET NZ CP E diff --git a/src/MAIN.Z80 b/src/MAIN.Z80 index 1d2e026..341655f 100644 --- a/src/MAIN.Z80 +++ b/src/MAIN.Z80 @@ -10,7 +10,7 @@ ; ;VERSION 2.3, 07-05-1984 ;VERSION 3.0, 01-03-1987 -;VERSION 5.0, 27-05-2024 +;VERSION 5.0, 31-05-2024 ; EXTRN XEQ EXTRN RUN0 @@ -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 5beta2' +VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta3' DEFB CR DEFB LF NOTICE: DEFM '(C) Copyright R.T.Russell 2024' @@ -220,7 +220,10 @@ NOAUTO: LD HL,ACCS JR NZ,NOTCMD ADD A,A LD C,A - LD B,0 + LD A,H + OR L + JR NZ,INAUTO + LD B,A LD HL,CMDTAB ADD HL,BC LD A,(HL) ;TABLE ENTRY @@ -231,6 +234,7 @@ NOAUTO: LD HL,ACCS CALL NXT JP (HL) ;EXECUTE COMMAND ; +INAUTO: LD IY,ACCS NOTCMD: LD A,H OR L CALL Z,LINNUM @@ -339,8 +343,6 @@ KEYWDS: DEFB 80H DEFM 'CHAIN' DEFB 0BDH DEFM 'CHR$' - DEFB 01H - DEFM 'CIRCLE' ; v5 DEFB 0D8H DEFM 'CLEAR ' DEFB 0D9H @@ -353,6 +355,8 @@ KEYWDS: DEFB 80H DEFM 'COS' DEFB 9CH DEFM 'COUNT ' + DEFB 01H + DEFM 'CIRCLE' ; v5 DEFB 0DCH DEFM 'DATA' DEFB 9DH @@ -365,16 +369,14 @@ KEYWDS: DEFB 80H DEFM 'DIM' DEFB 0DFH DEFM 'DRAW' - DEFB 02H - DEFM 'ELLIPSE' ; v5 - DEFB 0CBH - DEFM 'ENDCASE ' ; v5 - DEFB 0CDH - DEFM 'ENDIF ' ; v5 DEFB 0E1H DEFM 'ENDPROC ' DEFB 0CEH DEFM 'ENDWHILE ' ; v5 + DEFB 0CBH + DEFM 'ENDCASE ' ; v5 + DEFB 0CDH + DEFM 'ENDIF ' ; v5 DEFB 0E0H DEFM 'END ' DEFB 0E2H @@ -389,16 +391,18 @@ KEYWDS: DEFB 80H DEFM 'ERROR' DEFB 0C5H DEFM 'EOF ' - DEFB 10H - DEFM 'EXIT ' ; v5 DEFB 82H DEFM 'EOR' DEFB 9FH DEFM 'ERR ' + DEFB 10H + DEFM 'EXIT ' ; v5 DEFB 0A1H DEFM 'EXP' DEFB 0A2H DEFM 'EXT ' + DEFB 02H + DEFM 'ELLIPSE' ; v5 DEFB 0E3H DEFM 'FOR' DEFB 0A3H @@ -427,12 +431,12 @@ KEYWDS: DEFB 80H DEFM 'INKEY$' DEFB 0A6H DEFM 'INKEY' - DEFB 0CH - DEFM 'INSTALL' ; v5 DEFB 0A8H DEFM 'INT' DEFB 0A7H DEFM 'INSTR(' + DEFB 0CH + DEFM 'INSTALL' ; v5 DEFB 86H DEFM 'LINE' DEFB 92H @@ -455,24 +459,22 @@ KEYWDS: DEFB 80H DEFM 'MODE' DEFB 83H DEFM 'MOD' - DEFB 04H - DEFM 'MOUSE' ; v5 DEFB 0ECH DEFM 'MOVE' + DEFB 04H + DEFM 'MOUSE' ; v5 DEFB 0EDH DEFM 'NEXT' DEFB 0ACH DEFM 'NOT' - DEFB 05H - DEFM 'ORIGIN' ; v5 - DEFB 0CCH - DEFM 'OTHERWISE' ; v5 DEFB 0EEH DEFM 'ON' DEFB 87H DEFM 'OFF ' DEFB 0CAH DEFM 'OF ' ; v5 + DEFB 05H + DEFM 'ORIGIN' ; v5 DEFB 84H DEFM 'OR' DEFB 8EH @@ -483,6 +485,8 @@ KEYWDS: DEFB 80H DEFM 'OPENUP' DEFB 0FFH DEFM 'OSCLI' + DEFB 0CCH + DEFM 'OTHERWISE' ; v5 DEFB 0F1H DEFM 'PRINT' DEFB 90H @@ -495,12 +499,12 @@ KEYWDS: DEFB 80H DEFM 'PLOT' DEFB 0B0H DEFM 'POINT(' - DEFB 0EH - DEFM 'PUT' ; Token changed DEFB 0F2H DEFM 'PROC' DEFB 0B1H DEFM 'POS ' + DEFB 0EH + DEFM 'PUT' ; Token changed DEFB 06H DEFM 'QUIT ' ; v5 DEFB 0F8H @@ -551,18 +555,18 @@ KEYWDS: DEFB 80H DEFM 'SYS' ; v5 DEFB 0B7H DEFM 'TAN' - DEFB 8CH - DEFM 'THEN' - DEFB 0B8H - DEFM 'TO' DEFB 8AH DEFM 'TAB(' - DEFB 0FCH - DEFM 'TRACE' + DEFB 8CH + DEFM 'THEN' DEFB 91H DEFM 'TIME ' DEFB 0AH DEFM 'TINT' + DEFB 0B8H + DEFM 'TO' + DEFB 0FCH + DEFM 'TRACE' DEFB 0B9H DEFM 'TRUE ' DEFB 0FDH @@ -575,14 +579,14 @@ KEYWDS: DEFB 80H DEFM 'VAL' DEFB 0BCH DEFM 'VPOS ' - DEFB 0FEH - DEFM 'WIDTH' - DEFB 0BH - DEFM 'WAIT ' ; v5 - DEFB 0C9H - DEFM 'WHEN' ; v5 DEFB 0C7H DEFM 'WHILE' ; v5 + DEFB 0C9H + DEFM 'WHEN' ; v5 + DEFB 0BH + DEFM 'WAIT ' ; v5 + DEFB 0FEH + DEFM 'WIDTH' ;'LEFT' TOKENS: DEFB 0CFH DEFM 'PTR' @@ -832,7 +836,7 @@ LENSUB EQU $-TOKSUB DELETE: CALL DLPAIR DELET1: LD A,(HL) OR A - JP Z,WARM + JR Z,WARMNC INC HL LD E,(HL) INC HL @@ -856,7 +860,7 @@ LISTO: INC IY ;SKIP "O" EXX LD A,L LD (LISTON),A -CLOOP1: JP CLOOP + JP CLOOP ; ;LIST ;LIST line @@ -1006,10 +1010,7 @@ RENUM1: LD A,(HL) ;BUILD TABLE POP HL EX DE,HL JR C,RENUM1 ;CONTINUE - CALL EXTERR ;"Out of space" - DEFB 16H - DEFB 18H - DEFB 0 + JP ERROR ;'No room' (A = 0) ; RENUM2: EX DE,HL LD (HL),-1 @@ -1021,7 +1022,7 @@ RENUM2: EX DE,HL RENUM3: LD C,(HL) LD A,C OR A - JP Z,WARM + JR Z,WARMNC EXX EX DE,HL INC HL @@ -1114,6 +1115,15 @@ BAD: CALL TELL ;"Bad program' NEW: CALL NEWIT JR CLOOP0 ; +;LOAD filename +; +LOAD: CALL EXPRS ;GET FILENAME + LD A,CR + LD (DE),A + CALL LOAD0 + CALL CLEAR + JR WARM0 +; ;OLD ; OLD: LD HL,(PAGE) @@ -1131,15 +1141,6 @@ OLD: LD HL,(PAGE) CALL CLEAN CLOOP0: JP CLOOP ; -;LOAD filename -; -LOAD: CALL EXPRS ;GET FILENAME - LD A,CR - LD (DE),A - CALL LOAD0 - CALL CLEAR - JR WARM0 -; ;SAVE filename ; SAVE: CALL EXPRS ;FILENAME @@ -1203,7 +1204,7 @@ ERROR2: LD SP,(HIMEM) LD E,0 CALL C,OSSHUT ;CLOSE ALL FILES CALL CRLF - JP CLOOP + JR CLOOP0 ; ;SUBROUTINES: ; @@ -1442,12 +1443,9 @@ LOUT: BIT 0,E CALL OUT RET ; -INDADD: INC E - RET -; INDSUB: DEC E JP P,INDRET - INC E +INDADD: INC E INDRET: RET ; ;CRLF - SEND CARRIAGE RETURN, LINE FEED.