Routines |
Prev: 86C3 | Up: Map | Next: 87CA |
|
||||||||
873C | LD BC,$F7FE | Read keys 1-2-3-4-5 | ||||||
873F | IN A,(C) | |||||||
8741 | AND $0F | Is '1', '2', '3' or '4' (still) being pressed? | ||||||
8743 | CP $0F | |||||||
8745 | JR NZ,$873C | Jump back if so | ||||||
8747 | LD B,$BF | Read keys H-J-K-L-ENTER | ||||||
8749 | IN A,(C) | |||||||
874B | BIT 0,A | Is ENTER being pressed? | ||||||
874D | JR NZ,$8785 | Jump if not | ||||||
874F | LD A,($5959) | Pick up the attribute byte of the fourth 2x2 block at (10,25) | ||||||
8752 | AND $7F | Has the fourth digit been entered yet? | ||||||
8754 | CP $07 | |||||||
8756 | JR Z,$8785 | Jump if not | ||||||
We have four coloured blocks, and ENTER is being pressed. Time to validate the entered code.
|
||||||||
8758 | SUB $08 | Compute bits 0 and 1 of the entered code from the attribute byte of the fourth coloured block at (10,25) and store them in C | ||||||
875A | AND $18 | |||||||
875C | RRCA | |||||||
875D | RRCA | |||||||
875E | RRCA | |||||||
875F | LD C,A | |||||||
8760 | LD A,($5953) | Compute bits 4 and 5 of the entered code from the attribute byte of the second coloured block at (10,19) and store them in C (alongside bits 0 and 1) | ||||||
8763 | SUB $08 | |||||||
8765 | AND $18 | |||||||
8767 | RLCA | |||||||
8768 | OR C | |||||||
8769 | LD C,A | |||||||
876A | LD A,($5956) | Compute bits 2 and 3 of the entered code from the attribute byte of the third coloured block at (10,22) and store them in C (alongside bits 0, 1, 4 and 5) | ||||||
876D | SUB $08 | |||||||
876F | AND $18 | |||||||
8771 | RRCA | |||||||
8772 | OR C | |||||||
8773 | LD C,A | |||||||
8774 | LD A,($5950) | Compute bits 6 and 7 of the entered code from the attribute byte of the first coloured block at (10,16) in A | ||||||
8777 | SUB $08 | |||||||
8779 | AND $18 | |||||||
877B | RLCA | |||||||
877C | RLCA | |||||||
877D | RLCA | |||||||
877E | POP HL | Drop the return address from the stack | ||||||
877F | OR C | Merge bits 0-5 of the entered code into A; now A holds all 8 bits of the entered code | ||||||
8780 | LD HL,$85E4 | Point HL at 85E4 (where the correct entry code is stored) | ||||||
8783 | CP (HL) | Set the zero flag if the entered code matches | ||||||
8784 | RET | Return to the routine at 869F | ||||||
Here we check whether '1', '2', '3' or '4' is being pressed.
|
||||||||
8785 | SET 7,(IX+$00) | Make sure the current 2x2 block is flashing | ||||||
8789 | SET 7,(IX+$01) | |||||||
878D | SET 7,(IX+$20) | |||||||
8791 | SET 7,(IX+$21) | |||||||
8795 | LD BC,$F7FE | Read keys 1-2-3-4-5 | ||||||
8798 | IN A,(C) | |||||||
879A | AND $0F | Keep only bits 0-3 (keys 1-2-3-4) | ||||||
879C | LD E,$08 | E=0x08 (INK 0: PAPER 1) | ||||||
879E | CP $0E | Is '1' alone being pressed? | ||||||
87A0 | JR Z,$87B5 | Jump if so | ||||||
87A2 | LD E,$10 | E=0x10 (INK 0: PAPER 2) | ||||||
87A4 | CP $0D | Is '2' alone being pressed? | ||||||
87A6 | JR Z,$87B5 | Jump if so | ||||||
87A8 | LD E,$18 | E=0x18 (INK 0: PAPER 3) | ||||||
87AA | CP $0B | Is '3' alone being pressed? | ||||||
87AC | JR Z,$87B5 | Jump if so | ||||||
87AE | LD E,$20 | E=0x20 (INK 0: PAPER 4) | ||||||
87B0 | CP $07 | Is '4' alone being pressed? | ||||||
87B2 | JP NZ,$8747 | If not, jump back to check the ENTER key | ||||||
Exactly one of the number keys '1', '2', '3' or '4' is being pressed. E holds the corresponding attribute byte to use for the coloured block.
|
||||||||
87B5 | LD (IX+$00),E | Set the colour of the 2x2 block (no longer flashing) | ||||||
87B8 | LD (IX+$01),E | |||||||
87BB | LD (IX+$20),E | |||||||
87BE | LD (IX+$21),E | |||||||
87C1 | LD BC,$0018 | Pause for about 0.02s | ||||||
87C4 | DJNZ $87C4 | |||||||
87C6 | DEC C | |||||||
87C7 | JR NZ,$87C4 | |||||||
87C9 | RET |
Prev: 86C3 | Up: Map | Next: 87CA |