![]() |
Routines |
| Prev: 06935 | Up: Map | Next: 07023 |
| 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 206, giving the range 0 to 49 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 0). | ||
| 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 (T-ADDR) 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 255. | ||
| 07021 | DEC B | |||
| 07022 | RET | |||
| Prev: 06935 | Up: Map | Next: 07023 |