![]() |
Routines |
| Prev: 869F | Up: Map | Next: 873C |
|
Used by the routine at 869F. Displays the code entry screen and waits for a code to be entered. Returns with the zero flag set if the code entered is correct.
|
||||||||
| 86C3 | LD DE,$4800 | Print the message pointed to by IX at (8,0) | ||||||
| 86C6 | LD C,$20 | |||||||
| 86C8 | CALL $9680 | |||||||
| 86CB | LD HL,$4842 | Print the graphic for the '1' key at (10,2) | ||||||
| 86CE | LD DE,$9B00 | |||||||
| 86D1 | LD C,$00 | |||||||
| 86D3 | CALL $9456 | |||||||
| 86D6 | LD HL,$4845 | Print the graphic for the '2' key at (10,5) | ||||||
| 86D9 | CALL $9456 | |||||||
| 86DC | LD HL,$4848 | Print the graphic for the '3' key at (10,8) | ||||||
| 86DF | CALL $9456 | |||||||
| 86E2 | LD HL,$484B | Print the graphic for the '4' key at (10,11) | ||||||
| 86E5 | CALL $9456 | |||||||
| 86E8 | LD HL,$9B80 | Copy the 128 attribute bytes from 9B80 to the screen (lines 8, 9, 10 and 11) | ||||||
| 86EB | LD DE,$5900 | |||||||
| 86EE | LD BC,$0080 | |||||||
| 86F1 | LDIR | |||||||
| 86F3 | LD A,($5C78) | Collect the LSB of the system variable FRAMES | ||||||
| 86F6 | ADD A,$25 | Add 0x25 to this value and replace it; this ensures that the value collected on the second pass through this routine is different from the value collected on the first pass | ||||||
| 86F8 | LD ($5C78),A | |||||||
| 86FB | CP $B3 | Is the value between 0x00 and 0xB2? | ||||||
| 86FD | JR C,$8701 | Jump if so | ||||||
| 86FF | SUB $B4 | Otherwise subtract 0xB4; note that if the original value of the LSB of the system variable FRAMES was 0x8E, this leaves A holding 0xFF, which is a bug | ||||||
| 8701 | LD L,A | Now L holds either 0xFF or some number between 0x00 and 0xB2 | ||||||
| 8702 | LD H,$9E | Point HL at one of the entries in the table at 9E00 (or at 9EFF if L=0xFF) | ||||||
| 8704 | LD A,(HL) | Pick up the table entry | ||||||
| 8705 | ADD A,L | Add L to obtain the actual code | ||||||
| 8706 | LD ($85E4),A | Store the code at 85E4 | ||||||
| 8709 | LD C,L | Copy the code index to C; this will be used to compute the grid location | ||||||
| 870A | LD E,$2F | Calculate the ASCII code of the grid location number (0-9) in E | ||||||
| 870C | INC E | |||||||
| 870D | LD A,C | |||||||
| 870E | CP $12 | |||||||
| 8710 | JR C,$8717 | |||||||
| 8712 | SUB $12 | |||||||
| 8714 | LD C,A | |||||||
| 8715 | JR $870C | |||||||
| 8717 | LD A,E | Print the grid location number at (8,30) | ||||||
| 8718 | LD DE,$481E | |||||||
| 871B | CALL $9691 | |||||||
| 871E | LD A,C | Calculate the ASCII code of the grid location letter (A-R) in A | ||||||
| 871F | ADD A,$41 | |||||||
| 8721 | LD DE,$481D | Print the grid location letter at (8,29) | ||||||
| 8724 | CALL $9691 | |||||||
|
Here we enter a loop that prints a 2x2 coloured block at (10,16), (10,19), (10,22) or (10,25) whenever '1', '2', '3' or '4' is pressed, or returns to the calling routine at 869F if ENTER is pressed.
|
||||||||
| 8727 | LD IX,$5950 | Point IX at the attribute file location of the first coloured block at (10,16) | ||||||
| 872B | CALL $873C | Print a coloured block when '1', '2', '3' or '4' is pressed, or return to 869F if ENTER is pressed | ||||||
| 872E | INC IX | Move IX along to the location of the next coloured block | ||||||
| 8730 | INC IX | |||||||
| 8732 | INC IX | |||||||
| 8734 | LD A,IXl | Have we just printed the fourth coloured block at (10,25)? | ||||||
| 8736 | CP $5C | |||||||
| 8738 | JR NZ,$872B | If not, jump back to print the next one | ||||||
| 873A | JR $8727 | Otherwise rewind IX to the location of the first coloured block | ||||||
| Prev: 869F | Up: Map | Next: 873C |