06A0 SA SCR$ 06C3 SA CODE (twice) 06E1 SA CODE 1 0723 SA LINE 1 1A15 E L 1 (label omitted) 1B29 STMT L 1 (twice) 1B6F SEPARATOR 1BF4 STMT NEXT 1C59 VAL FET 2 1C6C CLASS 04 1C7A EXPT 2NUM 1C82 EXPT 1NUM 1C8C EXPT EXP 1F89 DEF FN 4 1FBD DEF FN 7 20C1 IN ITEM 1 20D8 IN ITEM 2 21B9 IN ASSIGN 21E2 CO TEMP 2 2320 CIRCLE 250F S QUOTE 8 252D S RPORT C 25E8 S BRACKET 26DF S NEGATE (twice) 2761 S RPORT C 27BD F FN SBRN 27E6 SF RPORT C 28B2 LOOK VARS 2A7A SL RPT C 2C05 D RPORT C 2CCF DEC RPT C 360C V RPORT C report code/number/value see errors REPORT D 0552, 0D00 "BREAK - CONT repeats" (144F) This report is printed: - if tape operations are stopped by BREAK; in some circumstances, eg while a header is being saved - if scrolling is discontinued. An unlabelled "REPORT D" is incorporated in 0EFD COPY L 1. Exit from: 053F SA/LD RET 0C88 PO SCR 2 (3 times) REPORT E 1E08 "Out of DATA" (1463) This error message is printed if a READ statement is still being implemented but there is no data left in the BASIC. Label not used in ROM. Exit from: 1DED READ REPORT F 0642, 1765 "Invalid file name" (146E) This error message is printed if you try to SAVE withoutany filename or with one longer than 10d characters; LOADing longer names is accepted, though any characters after the tenth will be ignored. It is also used, rather inappropriately, to reject OPENing of any channel labelled with more than one character, orwithout any characters, or with any letter other than K, S or P. Exit from: 0629 SA BLANK 175D OPEN 2 1767 OPEN 3 178B OPEN END REPORT G 1555 "No room for line" (147F) Unlike most of the others, this error message isn't detected during the scanning of the line in 12AC MAIN 2, but after scanning is complete, when 12CF MAIN 3 exits to 155D MAIN ADD. There is no direct jump or exit to the routine: its address is put on the empty machine stack in MAIN ADD. Since thebottom of the stack is the location pointed to by 5C3D ERR SP, if any error occurs while the line is being transferred to the program area RST 0008 ERROR 1 will jump to REPORT G. The only possible one is in the call to 1655 MAKE ROOM in 157D MAIN ADD1,which might produce a memory overflow. It is taken off the stack again in 15AB MAIN ADD2 and when execution goes round the MAIN EXEC loop again, in 12CF MAIN3, is replaced by the address 1303 MAIN 4, which prints nearly all the other error messages. Rems: 155D MAIN ADD address put on stack 15AB MAIN ADD2 address dropped REPORT H 21D4 "STOP in INPUT" (148F) This report is printed if STOP is given as the response to an INPUT prompt; its report number 10h is put in 5C3A ERR NR by 1001 ED STOP, see under 0FF3 ED DOWN. STOP in a program or as a direct command produces report9, "STOP statement". It seems a bit superfluous to have the two messages. Label not used in ROM. Exit from: 21D0 IN STOP Rems: 1001 ED STOP 10h put in ERR NR REPORT I 1D84 "FOR without NEXT" (149C) This error message is printed if no NEXT command can be found with a variable name that matches the current FOR. Exit from: 1D64 F LOOP REPORT J 15C4 "Invalid I/O device" (14AC) This error message is printed if input is attempted on the standard Spectrum from any source except the keyboard. There are no jumps or exits to it in the ROM, but it is made the channel input address by the initial channel information 15AF for all channels except K, the only one which will accept input. REPORT K 2244 (misprint, "-K" omitted) "Invalid colour" (14BE) This error message is printed: - if any number except zero -> 9 is put with PAPER and INK commands - if any but zero -> 7 is put with BORDER commands - if any but zero or one is put with INVERSE or OVER commands - if any but zero, one or 8 is put with BRIGHT or FLASH commands. Exit from: 2228 CO TEMP 6 223E CO TEMP 8 227D CO TEMP D 2294 BORDER REPORT L 1B7B "BREAK into program" (14CC) This report is printed if the BREAK key is found to be pressed at the end of execution of any BASIC statement; CONTINUEhas no effect in this case. Label not used in ROM. Exit from: 1B76 STMT RET REPORT M 1EDA "RAMTOP no good" (14DE) This error message is printed if an attempt is made by aCLEAR command to set 5CB2 RAMTOP either above the address in 5CB4 P RAMT or less than 50d bytes above that in 5C65 STKEND. Exit from: 1EB7 CLEAR 1 (twice) report messages 1391 see errors REPORT N 1BEC "Statement lost" (14EC) This slightly mystifying error message is printed if execution is somehow made to jump to a statement which doesn't exist; eg if the statement got deleted from the program after a BREAK had stopped execution with a GO TO jump pending, and then CONTINUE was pressed. Exit from: 1B9E LINE NEW 1BD1 NEXT LINE report number see errors REPORT O 160E, 1725 "Invalid stream" (14FA) This error message is printed: - if you try to open a stream with a number outside the range zero -> 15d - if you try to open a channel with any label other than K, S or P - if you try to use any of the commands CAT, ERASE, FORMAT or MOVE on the standard Spectrum without Interface 1 or equivalent. The difference between this and Report J is a subtle one, and one is tempted to suggest they could have been amalgamated. Exit from: 1601 CHAN OPEN 171E STR DATA 1736 OPEN 1793 CAT ETC 2070 STR ALTER REPORT P 2812 "FN without DEF" (1508) This error message is printed if execution cannot find aDEF FN with a name matching the FN employed. Label not used in ROM. Exit from: 2808 SF FND DEF report printing see errors REPORT Q 288B "Parameter error" (1516) This error message is printed - if a FN producing a string is used where a number is required, or vice versa - if the last character of a DEF FN isn't a ")". "DEF FN error" would have been shorter and more lucid. Exit from: 2852 SF ARG VL (twice) 2885 SF R BR 2 REPORT R 0806 "Tape loading error" (1525) This error message is printed - if verification fails - if LOAD (0556 LD BYTES) returns with NC; this means BREAK was pressed during the load, or the leader pulse or sync pulse was defective, or the tape record being verified is the wrong type, or there is a break in the string of byte pulses on the tape eg by the tape breaking or stopping, or the parity matching has failed. Exit from: 07CB VR CONTRL (twice) 0802 LD BLOCK report value see errors REPORT 0 1BB0 "OK" (1392) This report is printed if no errors have been found. Label not used in ROM. Exit from: 1B9E LINE NEW REPORT 1 1DD8 "NEXT without FOR" (1394) This error message is printed if a FOR statement couldn't be found to match the NEXT statement. Why didn't they combine this with Report I using some such message as "FOR/NEXT mismatch"? Exit from: 1DAB NEXT REPORT 2 0670, 1C2E "Variable not found" (13A4) This error message is printed - if you try to SAVE or VERIFY or put values in an array which hasn't already been named by a DIM statement - if a NEXT refers to a variable which doesn't exist at all - if a LET statement or similar tries to take values froma variable which hasn't been given any. Exit from: 0652 SA DATA 1C22 VAR A 1 1DAB NEXT 26C9 S LETTER REPORT 3 2A20 "Subscript wrong" (13B6), misprinted "Subscript out of range" at 2A20. This error message is printed - if an array is referred to without specifying enough subscripts - if the subscript is too big or too small - if there is no ")" after the subscripts - if a comma is missing between them - if a slicing command is incompatible with the dimensions - if a DIM command tries to set a dimension less than oneor more than 255d. Exit from: 29AE SV ARRAYS 29C3 SV COMMA 29FB SV MULT 2A12 SV RPT C 2A2C SV ELEM$ 2A94 SV DEFINE 2C2E D NO LOOP REPORT 4 1F15 "Out of memory" (13C6) This error message is printed - if any command would result in a memory overflow, eg a DIM command asking for a huge array, or you try to load a big BASIC program when 5CB2 RAMTOP has been set low down - rather inappropriately, if there is overflow in the 2AFD GET HL*DE routine. This is logical enough when as in the ROM the routine is only used to calculate the amount of room needed for dimensioned arrays. The implementation of this routine is a little differentfrom the others: 0008 ERROR 1 and 0053 ERROR 2 are by-passed. The note on 1F15 is cryptic to the point of bafflement: if instead of saying "the error marker [a seriously ambiguous expression] isn't to be used" the authors had got really garrulous and said "the error cursor pointer isn't needed", theywould have saved this author an hour or two of study. The point is simply that memory overflow is never detected by syntax checking, which systematically skips over alloperations which might produce it; it is an error produced only by actual execution. If it arises from input or editing, the result is a "groan" and a refusal to accept the ENTER keystroke;if from execution of BASIC in_run-time, the result is an error message. What is never required is a reprint of the input with an error cursor, so the error cursor pointer 5C5F X PTR is irrelevant; always to be distinguished - except in the notes! - from the error number in 5C3A ERR NR and the error stack pointer5C3D ERR SP. The authors of the notes have missed the point that it would have done no harm to use the full error restart anyway, and RST 8h followed by byte 03 is three bytes shorter than the coding actually used in the ROM.