![]() |
Routines |
| Prev: 11A7 | Up: Map | Next: 12A2 |
|
The address of this routine is found in the parameter table.
|
||||
| NEW | 11B7 | DI | Disable the maskable interrupt. | |
| 11B8 | LD A,$FF | The NEW flag. | ||
| 11BA | LD DE,($5CB2) | The existing value of RAMTOP is preserved. | ||
| 11BE | EXX | Load the alternate registers with the following system variables (P-RAMT, RASP, PIP, UDG). All of which will also be preserved. | ||
| 11BF | LD BC,($5CB4) | |||
| 11C3 | LD DE,($5C38) | |||
| 11C7 | LD HL,($5C7B) | |||
| 11CA | EXX | |||
|
This entry point is used by the routine at START.
The main entry point.
|
||||
| START_NEW | 11CB | LD B,A | Save the flag for later. | |
| 11CC | LD A,$07 | Make the border white in colour. | ||
| 11CE | OUT ($FE),A | |||
| 11D0 | LD A,$3F | Set the I register to hold the value of +3F. | ||
| 11D2 | LD I,A | |||
| 11D4 | NOP | Wait 24 T states. | ||
| 11D5 | NOP | |||
| 11D6 | NOP | |||
| 11D7 | NOP | |||
| 11D8 | NOP | |||
| 11D9 | NOP | |||
|
Now the memory is checked.
|
||||
| 11DA | LD H,D | Transfer the value in DE (START=+FFFF, NEW=RAMTOP). | ||
| 11DB | LD L,E | |||
| RAM_FILL | 11DC | LD (HL),$02 | Enter the value of +02 into every location above +3FFF. | |
| 11DE | DEC HL | |||
| 11DF | CP H | |||
| 11E0 | JR NZ,RAM_FILL | |||
| RAM_READ | 11E2 | AND A | Prepare for true subtraction. | |
| 11E3 | SBC HL,DE | The carry flag will become reset when the top is reached. | ||
| 11E5 | ADD HL,DE | |||
| 11E6 | INC HL | Update the pointer. | ||
| 11E7 | JR NC,RAM_DONE | Jump when at top. | ||
| 11E9 | DEC (HL) | +02 goes to +01. | ||
| 11EA | JR Z,RAM_DONE | But if zero then RAM is faulty. Use current HL as top. | ||
| 11EC | DEC (HL) | +01 goes to +00. | ||
| 11ED | JR Z,RAM_READ | Step to the next test unless it fails. | ||
| RAM_DONE | 11EF | DEC HL | HL points to the last actual location in working order. | |
|
Next restore the 'preserved' system variables. (Meaningless when coming from START.)
|
||||
| 11F0 | EXX | Restore P-RAMT, RASP, PIP and UDG. | ||
| 11F1 | LD ($5CB4),BC | |||
| 11F5 | LD ($5C38),DE | |||
| 11F9 | LD ($5C7B),HL | |||
| 11FC | EXX | |||
| 11FD | INC B | Test the START/NEW flag. | ||
| 11FE | JR Z,RAM_SET | Jump forward if coming from the NEW command routine. | ||
|
Overwrite the system variables when coming from START and initialise the user-defined graphics area.
|
||||
| 1200 | LD ($5CB4),HL | Top of physical RAM (P-RAMT). | ||
| 1203 | LD DE,$3EAF | Last byte of 'U' in character set. | ||
| 1206 | LD BC,$00A8 | There are this number of bytes in twenty one letters. | ||
| 1209 | EX DE,HL | Switch the pointers. | ||
| 120A | LDDR | Now copy the character forms of the letters 'A' to 'U'. | ||
| 120C | EX DE,HL | Switch the pointers back. | ||
| 120D | INC HL | Point to the first byte. | ||
| 120E | LD ($5C7B),HL | Now set UDG. | ||
| 1211 | DEC HL | Down one location. | ||
| 1212 | LD BC,$0040 | Set the system variables RASP and PIP. | ||
| 1215 | LD ($5C38),BC | |||
| RAM_SET | 1219 | LD ($5CB2),HL | Set RAMTOP. | |
| 121C | LD HL,$3C00 | Initialise the system variable CHARS. | ||
| 121F | LD ($5C36),HL | |||
|
Next the machine stack is set up.
|
||||
| 1222 | LD HL,($5CB2) | The top location (RAMTOP) is made to hold +3E. | ||
| 1225 | LD (HL),$3E | |||
| 1227 | DEC HL | The next location is left holding zero. | ||
| 1228 | LD SP,HL | These two locations represent the 'last entry'. | ||
| 1229 | DEC HL | Step down two locations to find the correct value for ERR-SP. | ||
| 122A | DEC HL | |||
| 122B | LD ($5C3D),HL | |||
|
The initialisation routine continues with:
|
||||
| 122E | IM 1 | Interrupt mode 1 is used. | ||
| 1230 | LD IY,$5C3A | IY holds +ERR-NR always. | ||
| 1234 | EI | The maskable interrupt can now be enabled. The real-time clock will be updated and the keyboard scanned every 1/50th of a second. | ||
| 1235 | LD HL,$5CB6 | The system variable CHANS is set to the base address of the channel information area. | ||
| 1238 | LD ($5C4F),HL | |||
| 123B | LD DE,$15AF | The initial channel data is moved from the table (CHANINFO) to the channel information area. | ||
| 123E | LD BC,$0015 | |||
| 1241 | EX DE,HL | |||
| 1242 | LDIR | |||
| 1244 | EX DE,HL | The system variable DATADD is made to point to the last location of the channel data. | ||
| 1245 | DEC HL | |||
| 1246 | LD ($5C57),HL | |||
| 1249 | INC HL | And PROG and VARS to the the location after that. | ||
| 124A | LD ($5C53),HL | |||
| 124D | LD ($5C4B),HL | |||
| 1250 | LD (HL),$80 | The end-marker of the variables area. | ||
| 1252 | INC HL | Move on one location to find the value for E-LINE. | ||
| 1253 | LD ($5C59),HL | |||
| 1256 | LD (HL),$0D | Make the edit-line be a single 'carriage return' character. | ||
| 1258 | INC HL | |||
| 1259 | LD (HL),$80 | Now enter an end marker. | ||
| 125B | INC HL | Move on one location to find the value for WORKSP, STKBOT and STKEND. | ||
| 125C | LD ($5C61),HL | |||
| 125F | LD ($5C63),HL | |||
| 1262 | LD ($5C65),HL | |||
| 1265 | LD A,$38 | Initialise the colour system variables (ATTR-P, ATTR-T, BORDCR) to FLASH 0, BRIGHT 0, PAPER 7, INK 0, BORDER 7. | ||
| 1267 | LD ($5C8D),A | |||
| 126A | LD ($5C8F),A | |||
| 126D | LD ($5C48),A | |||
| 1270 | LD HL,$0523 | Initialise the system variables REPDEL and REPPER. | ||
| 1273 | LD ($5C09),HL | |||
| 1276 | DEC (IY-$3A) | Make KSTATE0 hold +FF. | ||
| 1279 | DEC (IY-$36) | Make KSTATE4 hold +FF. | ||
| 127C | LD HL,$15C6 | Next move the initial stream data from its table to the streams area. | ||
| 127F | LD DE,$5C10 | |||
| 1282 | LD BC,$000E | |||
| 1285 | LDIR | |||
| 1287 | SET 1,(IY+$01) | Signal 'printer in use' (set bit 1 of FLAGS) and clear the printer buffer. | ||
| 128B | CALL CLEAR_PRB | |||
| 128E | LD (IY+$31),$02 | Set the size of the lower part of the display (DF-SZ) and clear the whole display. | ||
| 1292 | CALL CLS | |||
| 1295 | XOR A | Now print the message '© 1982 Sinclair Research Ltd' on the bottom line. | ||
| 1296 | LD DE,$1538 | |||
| 1299 | CALL PO_MSG | |||
| 129C | SET 5,(IY+$02) | Signal 'the lower part will required to be cleared' (set bit 5 of TV-FLAG). | ||
| 12A0 | JR MAIN_1 | Jump forward into the main execution loop. | ||
| Prev: 11A7 | Up: Map | Next: 12A2 |