diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 35d78203..92c0db49 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -19,11 +19,19 @@ ; Adapted for the freeware Zilog Macro Assembler 2.10 to produce ; the original ROM code (checksum A934H). PA ; -; SBC V2 BOOTROM VERSION 27/10/2018 -; difficultylevelhigh@gmail.com +;================================================================================== +; SBC V2 BOOTROM VERSION +; +; 20181027 - Initial retrobrewcomputer SBC V2 version - difficultylevelhigh@gmail.com +; 20191012 - Add PLAY command for SBC-V2-004 Sound support. +; 20191013 - Add option for long error messages. ; #INCLUDE "std.asm" ; +; CUSTOMIZATION +; +ABBRERR .EQU FALSE ; Choose between long error message and abbreviated error messages. +; ; GENERAL EQUATES CTRLC .EQU 03H ; Control "C" @@ -457,27 +465,51 @@ PRITAB: .BYTE 79H ; Precedence value ; BASIC ERROR CODE LIST -ERRORS: .BYTE "NF" ; NEXT without FOR - .BYTE "SN" ; Syntax error - .BYTE "RG" ; RETURN without GOSUB - .BYTE "OD" ; Out of DATA - .BYTE "FC" ; Illegal function call - .BYTE "OV" ; Overflow error - .BYTE "OM" ; Out of memory - .BYTE "UL" ; Undefined line - .BYTE "BS" ; Bad subscript - .BYTE "DD" ; Re-DIMensioned array - .BYTE "/0" ; Division by zero - .BYTE "ID" ; Illegal direct - .BYTE "TM" ; Type mis-match - .BYTE "OS" ; Out of string space - .BYTE "LS" ; String too long - .BYTE "ST" ; String formula too complex - .BYTE "CN" ; Can't CONTinue - .BYTE "UF" ; Undefined FN function - .BYTE "MO" ; Missing operand - .BYTE "HX" ; HEX error - .BYTE "BN" ; BIN error +#IF ABBRERR +ERRORS: .BYTE "NF" ; NEXT without FOR + .BYTE "SN" ; Syntax error + .BYTE "RG" ; RETURN without GOSUB + .BYTE "OD" ; Out of DATA + .BYTE "FC" ; Illegal function call + .BYTE "OV" ; Overflow error + .BYTE "OM" ; Out of memory + .BYTE "UL" ; Undefined line + .BYTE "BS" ; Bad subscript + .BYTE "DD" ; Re-DIMensioned array + .BYTE "/0" ; Division by zero + .BYTE "ID" ; Illegal direct + .BYTE "TM" ; Type mis-match + .BYTE "OS" ; Out of string space + .BYTE "LS" ; String too long + .BYTE "ST" ; String formula too complex + .BYTE "CN" ; Can't CONTinue + .BYTE "UF" ; Undefined FN function + .BYTE "MO" ; Missing operand + .BYTE "HX" ; HEX error + .BYTE "BN" ; BIN error +#ELSE +ERRORS: .BYTE "NEXT without FOR",0 + .BYTE "Syntax",0 + .BYTE "RETURN without GOSUB",0 + .BYTE "Out of DATA",0 + .BYTE "Illegal function call",0 + .BYTE "Overflow",0 + .BYTE "Out of memory",0 + .BYTE "Undefined line",0 + .BYTE "Bad subscript",0 + .BYTE "Re-DIMensioned array",0 + .BYTE "Division by zero",0 + .BYTE "Illegal direct",0 + .BYTE "Type mis-match",0 + .BYTE "Out of string space",0 + .BYTE "String too long",0 + .BYTE "String formula too complex",0 + .BYTE "Can't CONTinue",0 + .BYTE "Undefined FN function",0 + .BYTE "Missing operand",0 + .BYTE "HEX",0 + .BYTE "BIN",0 +#ENDIF ; INITIALISATION TABLE ------------------------------------------------------- @@ -614,11 +646,25 @@ ERROR: CALL CLREG ; Clear registers and stack LD D,A ; D = 0 (A is 0) LD A,'?' CALL OUTC ; Output '?' - ADD HL,DE ; Offset to correct error code - LD A,(HL) ; First character - CALL OUTC ; Output it - CALL GETCHR ; Get next character - CALL OUTC ; Output it +#IF ABBRERR + ADD HL,DE ; Offset to correct error code + LD A,(HL) ; First character + CALL OUTC ; Output it + CALL GETCHR ; Get next character + CALL OUTC ; Output it +#ELSE + PUSH BC ; Count through + LD B,E ; the error list + SRL B ; until we get + JR Z,CHRZRO ; error message +NXCHR: LD A,(HL) ; + OR A ; E/2 = entry + INC HL ; number in the + JR NZ,NXCHR ; list. + DJNZ NXCHR +CHRZRO: CALL PRS ; Display message. + POP BC +#ENDIF LD HL,ERRMSG ; "Error" message ERRIN: CALL PRS ; Output message LD HL,(LINEAT) ; Get line of error