diff --git a/WHATSNEW.TXT b/WHATSNEW.TXT index bb105a9..fd0c3c8 100644 --- a/WHATSNEW.TXT +++ b/WHATSNEW.TXT @@ -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 ON, OFF, 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 @@ -67,6 +68,7 @@ New features in BBC BASIC (Z80) version 5.00, June 2024: 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 diff --git a/bin/acorn/BBCBASIC.COM b/bin/acorn/BBCBASIC.COM index 28027fa..ff25b59 100644 Binary files a/bin/acorn/BBCBASIC.COM and b/bin/acorn/BBCBASIC.COM differ diff --git a/bin/cpm/BBCBASIC.COM b/bin/cpm/BBCBASIC.COM index ae7d798..b60c595 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 c68ff7c..a96ce7c 100644 --- a/src/EXEC.Z80 +++ b/src/EXEC.Z80 @@ -13,6 +13,7 @@ ;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 @@ -1823,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 JR NZ,XEQGO5 - LD A,53 ;ON ERROR not LOCAL -ERROR5: JP ERROR -; -;RESTORE DATA -; -RESDAT: INC IY - LD A,1 - CALL RESLOC - JR NZ,XEQGO5 - LD A,54 ;'DATA not LOCAL' + 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) diff --git a/tests/ERRORTST.BBC b/tests/ERRORTST.BBC index 682e3e1..df9ff16 100644 Binary files a/tests/ERRORTST.BBC and b/tests/ERRORTST.BBC differ