.RDKEY \ --- Mod: Code removed for Demonstration Disc: -------> \LDX #16 \ Start the scan with internal key number 16 ("Q") \ \.Rd1 \ \JSR DKS4 \ Scan the keyboard to see if the key in X is currently \ \ being pressed, returning the result in A and X \ \BMI Rd2 \ Jump to Rd2 if this key is being pressed (in which \ \ case DKS4 will have returned the key number with bit \ \ 7 set, which is negative) \ \INX \ Increment the key number, which was unchanged by the \ \ above call to DKS4 \ \BPL Rd1 \ Loop back to test the next key, ending the loop when \ \ X is negative (i.e. 128) \ \TXA \ If we get here, nothing is being pressed, so copy X \ \ into A so that X = A = 128 = %10000000 \ \.Rd2 \ \EOR #%10000000 \ EOR A with #%10000000 to flip bit 7, so A now contains \ \ 0 if no key has been pressed, or the internal key \ \ number if a key has been pressed \ --- And replaced by: --------------------------------> LDA #0 \ This routine is never called in the demo version, but \ if it were, it would always return a zero, so this is \ presumably the remains of a code change to disable \ keyboard input that wasn't needed in the end \ --- End of replacement ------------------------------> TAX \ Copy A into X RTS \ Return from the subroutineName: RDKEY [Show more] Type: Subroutine Category: Keyboard Summary: Scan the keyboard for key pressesContext: See this subroutine in context in the source code References: No direct references to this subroutine in this source file
Scan the keyboard, starting with internal key number 16 ("Q") and working through the set of internal key numbers (see page 142 of the "Advanced User Guide for the BBC Micro" by Bray, Dickens and Holmes for a list of internal key numbers). This routine is effectively the same as OSBYTE 122, though the OSBYTE call preserves A, unlike this routine.
Returns: X If a key is being pressed, X contains the internal key number, otherwise it contains 0 A Contains the same as X