Spectrum ROM | Routines |
Prev: 06935 | Up: Map |
Each statement is considered in turn until the end of the line is reached.
|
|||||||
STMT_LOOP | 06952 | RST 32 | Advance CH-ADD along the line. | ||||
This entry point is used by the routines at LINE_SCAN and IF_CMD.
|
|||||||
STMT_L_1 | 06953 | CALL SET_WORK | The work space is cleared. | ||||
06956 | INC (IY+13) | Increase SUBPPC on each passage around the loop. | |||||
06959 | JP M,REPORT_C | But only '127' statements are allowed in a single line. | |||||
06962 | RST 24 | Fetch a character. | |||||
06963 | LD B,0 | Clear the B register for later. | |||||
06965 | CP 13 | Is the character a 'carriage return'? | |||||
06967 | JR Z,LINE_END | Jump if it is. | |||||
06969 | CP ":" | Go around the loop again if it is a ':'. | |||||
06971 | JR Z,STMT_LOOP | ||||||
A statement has been identified so, first, its initial command is considered.
|
|||||||
06973 | LD HL,7030 | Pre-load the machine stack with the return address STMT_RET. | |||||
06976 | PUSH HL | ||||||
06977 | LD C,A | Save the command temporarily in the C register whilst CH-ADD is advanced again. | |||||
06978 | RST 32 | ||||||
06979 | LD A,C | ||||||
06980 | SUB 206 | Reduce the command's code by +CE, giving the range +00 to +31 for the fifty commands. | |||||
06982 | JP C,REPORT_C | Give the appropriate error if not a command code. | |||||
06985 | LD C,A | Move the command code to the BC register pair (B holds +00). | |||||
06986 | LD HL,6728 | The base address of the syntax offset table. | |||||
06989 | ADD HL,BC | The required offset is passed to the C register and used to compute the base address for the command's entries in the parameter table. | |||||
06990 | LD C,(HL) | ||||||
06991 | ADD HL,BC | ||||||
06992 | JR GET_PARAM | Jump forward into the scanning loop with this address. | |||||
Each of the command class routines applicable to the present command is executed in turn. Any required separators are also considered.
|
|||||||
SCAN_LOOP | 06994 | LD HL,(23668) | The temporary pointer to the entries in the parameter table (T-ADDR). | ||||
GET_PARAM | 06997 | LD A,(HL) | Fetch each entry in turn. | ||||
06998 | INC HL | Update the pointer to the entries for the next pass. | |||||
06999 | LD (23668),HL | ||||||
07002 | LD BC,6994 | Pre-load the machine stack with the return address SCAN_LOOP. | |||||
07005 | PUSH BC | ||||||
07006 | LD C,A | Copy the entry to the C register for later. | |||||
07007 | CP 32 | Jump forward if the entry is a 'separator'. | |||||
07009 | JR NC,SEPARATOR | ||||||
07011 | LD HL,7169 | The base address of the command class table. | |||||
07014 | LD B,0 | Clear the B register and index into the table. | |||||
07016 | ADD HL,BC | ||||||
07017 | LD C,(HL) | Fetch the offset and compute the starting address of the required command class routine. | |||||
07018 | ADD HL,BC | ||||||
07019 | PUSH HL | Push the address on to the machine stack. | |||||
07020 | RST 24 | Before making an indirect jump to the command class routine pass the command code to the A register and set the B register to +FF. | |||||
07021 | DEC B | ||||||
07022 | RET |
Prev: 06935 | Up: Map |