Routines |
Prev: 47772 | Up: Map | Next: 47853 |
|
||||||||
47788 | EXX | Swap registers | ||||||
47789 | LD BC,65278 | Load B and C with 254 | ||||||
47792 | LD HL,47853 | Point HL at list of return values | ||||||
47795 | IN A,(C) | Read from port 254 into A (i.e. read keyboard) [IN 65278 reads the half row CAPS SHIFT to V] | ||||||
47797 | SET 0,A | Set bit 0 of A (i.e. clear pressing of CAPS SHIFT) | ||||||
47799 | AND 31 | Strip out all but the five bits representing key presses | ||||||
47801 | XOR 31 | Invert all of the lowest five bits | ||||||
47803 | JR NZ,47843 | If this value is non-zero, then a key has been pressed, so skip ahead to 47843 | ||||||
47805 | LD DE,5 | Advance HL by five characters in list of return values string... | ||||||
47808 | ADD HL,DE | ... | ||||||
47809 | LD E,6 | Load E with 6 as there are 6 keyboard half-rows to test (loop counter) | ||||||
47811 | RLC B | With each loop, change BC from 65278 -> 65022 -> 64510 -> 63486 -> 61438 -> 57342 -> 49150 | ||||||
47813 | IN A,(C) | Read from port 254 into A (i.e. read keyboard) | ||||||
47815 | AND 31 | Strip out all but the five bits representing key presses | ||||||
47817 | XOR 31 | Invert all of the lowest five bits | ||||||
47819 | JR NZ,47843 | If this value is non-zero, then a key has been pressed, so skip ahead to 47843 | ||||||
47821 | INC HL | Advance HL by five characters in list of return values string... | ||||||
47822 | INC HL | ... | ||||||
47823 | INC HL | ... | ||||||
47824 | INC HL | ... | ||||||
47825 | INC HL | ... | ||||||
47826 | DEC E | Decrease number of remaining keyboard half-rows to check | ||||||
47827 | JR NZ,47811 | If there are any more half rows to check then loop back to 47811 | ||||||
47829 | RLC B | Set BC to 32766 for final keyboard half-row | ||||||
47831 | IN A,(C) | Read from port 254 into A (i.e. read keyboard) | ||||||
47833 | SET 1,A | Set bit 1 of A (i.e. clear pressing of SYMBOL SHIFT) | ||||||
47835 | AND 31 | Strip out all but the five bits representing key presses | ||||||
47837 | XOR 31 | Invert all of the lowest five bits | ||||||
47839 | JR NZ,47843 | If this value is non-zero, then a key has been pressed, so skip ahead to 47843 | ||||||
47841 | EXX | Swap registers | ||||||
47842 | RET | Return [no key pressed] | ||||||
47843 | SRL A | Shift bits right | ||||||
47845 | JR C,47850 | If carry flag is set, then this is the key that was pressed, so skip ahead to 47850 | ||||||
47847 | INC HL | Advance HL to check next character | ||||||
47848 | JR 47843 | Loop back to 47843 | ||||||
47850 | LD A,(HL) | Load current character in list of return values string into A as this is the key that was pressed | ||||||
47851 | EXX | Swap registers | ||||||
47852 | RET | Return [key pressed] |
Prev: 47772 | Up: Map | Next: 47853 |