Routines |
Prev: 34499 | Up: Map | Next: 34762 |
|
||||||||
34620 | LD BC,63486 | Read keys 1-2-3-4-5 | ||||||
34623 | IN A,(C) | |||||||
34625 | AND 15 | Is '1', '2', '3' or '4' (still) being pressed? | ||||||
34627 | CP 15 | |||||||
34629 | JR NZ,34620 | Jump back if so | ||||||
34631 | LD B,191 | Read keys H-J-K-L-ENTER | ||||||
34633 | IN A,(C) | |||||||
34635 | BIT 0,A | Is ENTER being pressed? | ||||||
34637 | JR NZ,34693 | Jump if not | ||||||
34639 | LD A,(22873) | Pick up the attribute byte of the fourth 2x2 block at (10,25) | ||||||
34642 | AND 127 | Has the fourth digit been entered yet? | ||||||
34644 | CP 7 | |||||||
34646 | JR Z,34693 | Jump if not | ||||||
We have four coloured blocks, and ENTER is being pressed. Time to validate the entered code.
|
||||||||
34648 | SUB 8 | 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 | ||||||
34650 | AND 24 | |||||||
34652 | RRCA | |||||||
34653 | RRCA | |||||||
34654 | RRCA | |||||||
34655 | LD C,A | |||||||
34656 | LD A,(22867) | 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) | ||||||
34659 | SUB 8 | |||||||
34661 | AND 24 | |||||||
34663 | RLCA | |||||||
34664 | OR C | |||||||
34665 | LD C,A | |||||||
34666 | LD A,(22870) | 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) | ||||||
34669 | SUB 8 | |||||||
34671 | AND 24 | |||||||
34673 | RRCA | |||||||
34674 | OR C | |||||||
34675 | LD C,A | |||||||
34676 | LD A,(22864) | Compute bits 6 and 7 of the entered code from the attribute byte of the first coloured block at (10,16) in A | ||||||
34679 | SUB 8 | |||||||
34681 | AND 24 | |||||||
34683 | RLCA | |||||||
34684 | RLCA | |||||||
34685 | RLCA | |||||||
34686 | POP HL | Drop the return address from the stack | ||||||
34687 | OR C | Merge bits 0-5 of the entered code into A; now A holds all 8 bits of the entered code | ||||||
34688 | LD HL,34276 | Point HL at 34276 (where the correct entry code is stored) | ||||||
34691 | CP (HL) | Set the zero flag if the entered code matches | ||||||
34692 | RET | Return to the routine at 34463 | ||||||
Here we check whether '1', '2', '3' or '4' is being pressed.
|
||||||||
34693 | SET 7,(IX+0) | Make sure the current 2x2 block is flashing | ||||||
34697 | SET 7,(IX+1) | |||||||
34701 | SET 7,(IX+32) | |||||||
34705 | SET 7,(IX+33) | |||||||
34709 | LD BC,63486 | Read keys 1-2-3-4-5 | ||||||
34712 | IN A,(C) | |||||||
34714 | AND 15 | Keep only bits 0-3 (keys 1-2-3-4) | ||||||
34716 | LD E,8 | E=8 (INK 0: PAPER 1) | ||||||
34718 | CP 14 | Is '1' alone being pressed? | ||||||
34720 | JR Z,34741 | Jump if so | ||||||
34722 | LD E,16 | E=16 (INK 0: PAPER 2) | ||||||
34724 | CP 13 | Is '2' alone being pressed? | ||||||
34726 | JR Z,34741 | Jump if so | ||||||
34728 | LD E,24 | E=24 (INK 0: PAPER 3) | ||||||
34730 | CP 11 | Is '3' alone being pressed? | ||||||
34732 | JR Z,34741 | Jump if so | ||||||
34734 | LD E,32 | E=32 (INK 0: PAPER 4) | ||||||
34736 | CP 7 | Is '4' alone being pressed? | ||||||
34738 | JP NZ,34631 | 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.
|
||||||||
34741 | LD (IX+0),E | Set the colour of the 2x2 block (no longer flashing) | ||||||
34744 | LD (IX+1),E | |||||||
34747 | LD (IX+32),E | |||||||
34750 | LD (IX+33),E | |||||||
34753 | LD BC,24 | Pause for about 0.02s | ||||||
34756 | DJNZ 34756 | |||||||
34758 | DEC C | |||||||
34759 | JR NZ,34756 | |||||||
34761 | RET |
Prev: 34499 | Up: Map | Next: 34762 |