![]() |
Routines |
Prev: 04519 | Up: Map |
The address of this routine is found in the parameter table.
|
|||||||
NEW | 04535 | DI | Disable the maskable interrupt. | ||||
04536 | LD A,255 | The NEW flag. | |||||
04538 | LD DE,(23730) | The existing value of RAMTOP is preserved. | |||||
04542 | EXX | Load the alternate registers with the following system variables (P-RAMT, RASP, PIP, UDG). All of which will also be preserved. | |||||
04543 | LD BC,(23732) | ||||||
04547 | LD DE,(23608) | ||||||
04551 | LD HL,(23675) | ||||||
04554 | EXX | ||||||
This entry point is used by the routine at START.
The main entry point.
|
|||||||
START_NEW | 04555 | LD B,A | Save the flag for later. | ||||
04556 | LD A,7 | Make the border white in colour. | |||||
04558 | OUT (254),A | ||||||
04560 | LD A,63 | Set the I register to hold the value of 63. | |||||
04562 | LD I,A | ||||||
04564 | NOP | Wait 24 T states. | |||||
04565 | NOP | ||||||
04566 | NOP | ||||||
04567 | NOP | ||||||
04568 | NOP | ||||||
04569 | NOP | ||||||
Now the memory is checked.
|
|||||||
04570 | LD H,D | Transfer the value in DE (START=65535, NEW=RAMTOP). | |||||
04571 | LD L,E | ||||||
RAM_FILL | 04572 | LD (HL),2 | Enter the value of 2 into every location above 16383. | ||||
04574 | DEC HL | ||||||
04575 | CP H | ||||||
04576 | JR NZ,RAM_FILL | ||||||
RAM_READ | 04578 | AND A | Prepare for true subtraction. | ||||
04579 | SBC HL,DE | The carry flag will become reset when the top is reached. | |||||
04581 | ADD HL,DE | ||||||
04582 | INC HL | Update the pointer. | |||||
04583 | JR NC,RAM_DONE | Jump when at top. | |||||
04585 | DEC (HL) | 2 goes to 1. | |||||
04586 | JR Z,RAM_DONE | But if zero then RAM is faulty. Use current HL as top. | |||||
04588 | DEC (HL) | 1 goes to 0. | |||||
04589 | JR Z,RAM_READ | Step to the next test unless it fails. | |||||
RAM_DONE | 04591 | DEC HL | HL points to the last actual location in working order. | ||||
Next restore the 'preserved' system variables. (Meaningless when coming from START.)
|
|||||||
04592 | EXX | Restore P-RAMT, RASP, PIP and UDG. | |||||
04593 | LD (23732),BC | ||||||
04597 | LD (23608),DE | ||||||
04601 | LD (23675),HL | ||||||
04604 | EXX | ||||||
04605 | INC B | Test the START/NEW flag. | |||||
04606 | 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.
|
|||||||
04608 | LD (23732),HL | Top of physical RAM (P-RAMT). | |||||
04611 | LD DE,16047 | Last byte of 'U' in character set. | |||||
04614 | LD BC,168 | There are this number of bytes in twenty one letters. | |||||
04617 | EX DE,HL | Switch the pointers. | |||||
04618 | LDDR | Now copy the character forms of the letters 'A' to 'U'. | |||||
04620 | EX DE,HL | Switch the pointers back. | |||||
04621 | INC HL | Point to the first byte. | |||||
04622 | LD (23675),HL | Now set UDG. | |||||
04625 | DEC HL | Down one location. | |||||
04626 | LD BC,64 | Set the system variables RASP and PIP. | |||||
04629 | LD (23608),BC | ||||||
RAM_SET | 04633 | LD (23730),HL | Set RAMTOP. | ||||
04636 | LD HL,15360 | Initialise the system variable CHARS. | |||||
04639 | LD (23606),HL | ||||||
Next the machine stack is set up.
|
|||||||
04642 | LD HL,(23730) | The top location (RAMTOP) is made to hold 62. | |||||
04645 | LD (HL),62 | ||||||
04647 | DEC HL | The next location is left holding zero. | |||||
04648 | LD SP,HL | These two locations represent the 'last entry'. | |||||
04649 | DEC HL | Step down two locations to find the correct value for ERR-SP. | |||||
04650 | DEC HL | ||||||
04651 | LD (23613),HL | ||||||
The initialisation routine continues with:
|
|||||||
04654 | IM 1 | Interrupt mode 1 is used. | |||||
04656 | LD IY,23610 | IY holds +ERR-NR always. | |||||
04660 | 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. | |||||
04661 | LD HL,23734 | The system variable CHANS is set to the base address of the channel information area. | |||||
04664 | LD (23631),HL | ||||||
04667 | LD DE,5551 | The initial channel data is moved from the table (CHANINFO) to the channel information area. | |||||
04670 | LD BC,21 | ||||||
04673 | EX DE,HL | ||||||
04674 | LDIR | ||||||
04676 | EX DE,HL | The system variable DATADD is made to point to the last location of the channel data. | |||||
04677 | DEC HL | ||||||
04678 | LD (23639),HL | ||||||
04681 | INC HL | And PROG and VARS to the the location after that. | |||||
04682 | LD (23635),HL | ||||||
04685 | LD (23627),HL | ||||||
04688 | LD (HL),128 | The end-marker of the variables area. | |||||
04690 | INC HL | Move on one location to find the value for E-LINE. | |||||
04691 | LD (23641),HL | ||||||
04694 | LD (HL),13 | Make the edit-line be a single 'carriage return' character. | |||||
04696 | INC HL | ||||||
04697 | LD (HL),128 | Now enter an end marker. | |||||
04699 | INC HL | Move on one location to find the value for WORKSP, STKBOT and STKEND. | |||||
04700 | LD (23649),HL | ||||||
04703 | LD (23651),HL | ||||||
04706 | LD (23653),HL | ||||||
04709 | LD A,56 | Initialise the colour system variables (ATTR-P, ATTR-T, BORDCR) to FLASH 0, BRIGHT 0, PAPER 7, INK 0, BORDER 7. | |||||
04711 | LD (23693),A | ||||||
04714 | LD (23695),A | ||||||
04717 | LD (23624),A | ||||||
04720 | LD HL,1315 | Initialise the system variables REPDEL and REPPER. | |||||
04723 | LD (23561),HL | ||||||
04726 | DEC (IY-58) | Make KSTATE0 hold 255. | |||||
04729 | DEC (IY-54) | Make KSTATE4 hold 255. | |||||
04732 | LD HL,5574 | Next move the initial stream data from its table to the streams area. | |||||
04735 | LD DE,23568 | ||||||
04738 | LD BC,14 | ||||||
04741 | LDIR | ||||||
04743 | SET 1,(IY+1) | Signal 'printer in use' (set bit 1 of FLAGS) and clear the printer buffer. | |||||
04747 | CALL CLEAR_PRB | ||||||
04750 | LD (IY+49),2 | Set the size of the lower part of the display (DF-SZ) and clear the whole display. | |||||
04754 | CALL CLS | ||||||
04757 | XOR A | Now print the message '© 1982 Sinclair Research Ltd' on the bottom line. | |||||
04758 | LD DE,5432 | ||||||
04761 | CALL PO_MSG | ||||||
04764 | SET 5,(IY+2) | Signal 'the lower part will required to be cleared' (set bit 5 of TV-FLAG). | |||||
04768 | JR MAIN_1 | Jump forward into the main execution loop. |
Prev: 04519 | Up: Map |