%import textio %zeropage basicsafe %option no_sysinit ; The documentation for custom key handlers can be found here: ; https://github.com/X16Community/x16-docs/blob/101759f3bfa5e6cce4e8c5a0b67cb0f2f1c6341e/X16%20Reference%20-%2003%20-%20Editor.md#custom-keyboard-keynum-code-handler main { bool stop_program = false sub start() { txt.print("custom key handler test - press keys! esc to quit!\n") sys.set_irqd() uword old_keyhdl = cx16.KEYHDL cx16.KEYHDL = &keyboard_handler sys.clear_irqd() while not stop_program { ; wait } sys.set_irqd() cx16.KEYHDL = old_keyhdl sys.clear_irqd() } sub keyboard_handler(ubyte keynum) -> ubyte { ; NOTE: this handler routine expects the keynum in A and return value in A ; which is thankfully how prog8 translates this subroutine's calling convention. ; NOTE: it may be better to store the keynum somewhere else and let the main program ; loop figure out what to do with it, rather than putting it all in the handler routine txt.print_ubhex(keynum, true) txt.spc() if keynum & $80 !=0 txt.chrout('u') else txt.chrout('d') txt.nl() if keynum==$6e { ; escape stops the program main.stop_program = true } return 0 ; By returning 0 (in A) we will eat this key event. Return the original keynum value to pass it through. } }