Skip to navigation

Elite on the BBC Micro and NES

Keyboard: TT217

[BBC Master version]

Name: TT217 [Show more] Type: Subroutine Category: Keyboard Summary: Scan the keyboard until a key is pressed
Context: See this subroutine in context in the source code Variations: See code variations for this subroutine in the different versions References: This subroutine is called as follows: * gnum calls TT217 * MT26 calls TT217 * qv calls TT217 * TT214 calls TT217 * mes9 calls via out * OUCH calls via out * GTDRV calls via t * LOD calls via t * NEWBRK calls via t * SVE calls via t * YESNO calls via t

Scan the keyboard until a key is pressed, and return the key's ASCII code. If, on entry, a key is already being held down, then wait until that key is released first (so this routine detects the first key down event following the subroutine call).
Returns: X The ASCII code of the key that was pressed A Contains the same as X Y Y is preserved
Other entry points: out Contains an RTS t As TT217 but don't preserve Y, set it to YSAV instead
.TT217 STY YSAV \ Store Y in temporary storage, so we can restore it \ later .t LDY #2 \ Delay for 2 vertical syncs (2/50 = 0.04 seconds) so we JSR DELAY \ don't take up too much CPU time while looping round JSR RDKEY \ Scan the keyboard for a key press and return the \ ASCII code of the key pressed in X (or 0 for no key \ press) BNE t \ If a key was already being held down when we entered \ this routine, keep looping back up to t, until the \ key is released .t2 JSR RDKEY \ Any pre-existing key press is now gone, so we can \ start scanning the keyboard again, returning the \ ASCII code of the key pressed in X (or 0 for no key \ press) BEQ t2 \ Keep looping up to t2 until a key is pressed LDY YSAV \ Restore the original value of Y we stored above TAX \ Copy A into X .out RTS \ Return from the subroutine