Input
The 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
page revision: 0, last edited: 28 Mar 2013 14:05