scroll left and right work in stdef and hidef adds octo test roms adds schip fonts to memory
74 lines
1.5 KiB
Plaintext
74 lines
1.5 KiB
Plaintext
###########################################
|
|
#
|
|
# Keyboard Test
|
|
#
|
|
# A simple live display of which CHIP-8
|
|
# keys appear to be held down at any given time.
|
|
# useful for testing alternative Keyboard
|
|
# layouts or input routines.
|
|
#
|
|
###########################################
|
|
|
|
: held 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
: keymap 0x1 0x2 0x3 0xC 0x4 0x5 0x6 0xD 0x7 0x8 0x9 0xE 0xA 0x0 0xB 0xF
|
|
: button 0x7E 0xFF 0xFF 0xFF 0xFF 0xFF 0x7E
|
|
|
|
: main
|
|
:const cell 8
|
|
:calc start-x { 2 + 32 - ( cell * 4 ) / 2 }
|
|
:calc start-y { 1 + 0 }
|
|
:calc end-x { start-x + cell * 4 }
|
|
:calc end-y { start-y + cell * 4 }
|
|
|
|
v1 := start-x
|
|
v2 := start-y
|
|
v3 := 0
|
|
loop
|
|
i := keymap
|
|
i += v3
|
|
load v0
|
|
i := hex v0
|
|
sprite v1 v2 5
|
|
v1 += cell
|
|
if v1 == end-x then v2 += cell
|
|
if v1 == end-x then v1 := start-x
|
|
v3 += 1
|
|
if v3 != 16 then
|
|
again
|
|
|
|
loop
|
|
# unroll this loop fully to try to
|
|
# minimize input lag:
|
|
:macro scan {
|
|
:calc keycode { @ keymap + CALLS }
|
|
:calc heldaddr { held + CALLS }
|
|
:calc kx { -2 + start-x + cell * floor CALLS % 4 }
|
|
:calc ky { -1 + start-y + cell * floor CALLS / 4 }
|
|
v1 := keycode
|
|
v2 := kx
|
|
v3 := ky
|
|
i := heldaddr
|
|
load v0
|
|
if v0 == 0 begin
|
|
if v1 key begin
|
|
v0 := 1
|
|
i := button
|
|
sprite v2 v3 7
|
|
end
|
|
else
|
|
if v1 -key begin
|
|
v0 := 0
|
|
i := button
|
|
sprite v2 v3 7
|
|
end
|
|
end
|
|
i := heldaddr
|
|
save v0
|
|
}
|
|
scan scan scan scan
|
|
scan scan scan scan
|
|
scan scan scan scan
|
|
scan scan scan scan
|
|
again
|
|
|