z80:Input Routines
From Learn @ Cemetech
Jump to navigationJump to searchThe main source of user input will be through the keypad, so almost every input routine will require use of a GetKey function.
Note: This page will need to have routines for actual user input aside from GetKey routines.
GetKey
This is essentially like several of the OS routines. If OS interrupts are read, you can also read from address 8445h. But if you really want a custom routine:
;=============================================================== GetKey: ;=============================================================== ;Outputs: ; A is a value from 0 to 56 that is the keypress ; HL is not modified ; BC is not modified ;Destroys: ; D ; E is destroyed if no keys are pressed, else it is also the keypress ;=============================================================== ld de,$7FFF KeyLoop: rlc d ld a,d out (1),a sub 7Fh ret z ld a,e add a,8 ld e,a in a,(1) inc a jr z,KeyLoop dec a inc e rra jr c,$-2 ld a,e ret
ScanAllKeys
This routine requires 7 bytes of RAM pointed to by HL. This will return the value of all the key groups, stored in each of the bytes:
ScanAllKeys: ;Inputs: ; HL points to the 7 bytes to output the result to ;Notes: ; There is not enough delay for 15MHz ld bc,0701h ld a,$FE ;test the keys KeyUpdateLoop: out (1),a rlca nop ini jr nz,KeyUpdateLoop ret