Поковырял я тут опрос клавиатуры для ATARI.
В принципе можно напрямую опрашивать кнопки напрямую из порта.
Есть статусный порт 753, если значение там не 0, то значит что-то было нажато и последний код читаем из 53279.
Есть пару нюансов, опрашиваются в принципе все кнопки за исключением Start, Select, Option - они другим портом читаются (53279) причём биты ещё и инвертированы (0=если нажата)
Второй момент это повтор, как видно из скриншота, даже кратковременное нажатие дублит кнопку и тут уж надо думать как реализовать логику автоповтора.
Но как для теста пойдёт.
kbd.mfk:
Код:
import stdio
noinline asm void wait(byte register(a) f) {
clc
adc os_RTCLOK.b2
.rt_check:
cmp os_RTCLOK.b2
bne .rt_check
rts
}
void printHex(byte val) {
byte c
c = (val >> 4)
if (c > 9) {
c = c - 10 + $41
} else {
c = c + $30
}
putchar(c)
c = (val & $0f)
if (c > 9) {
c = c - 10 + $41
} else {
c = c + $30
}
putchar(c)
}
void main() {
byte kbd, kbd2, kbd3, keyDel
putstrz("Key Test:"z)
new_line()
while (true) {
wait(1)
keyDel = peek(753)
if (keyDel != 0) {
kbd = peek(53769)
putword(kbd)
putstrz("($"z)
printHex(kbd)
putstrz(")"z)
new_line()
poke(53769, 0)
}
kbd2 = peek(53279)
if (kbd2 & %00000001 == 0) {
putstrz("Start"z)
new_line()
}
if (kbd2 & %00000010 == 0) {
putstrz("Select"z)
new_line()
}
if (kbd2 & %00000100 == 0) {
putstrz("Option"z)
new_line()
}
}
}