; .include "irq_handler.h65" ; .bss ; .code ; .proc register_via_handler ; .endproc ; .proc remove_via_handler ; .endproc ; .proc main_handler ; Print "Unknown IRQ" ; rti ; .endproc ; .zeropage ; tmp: .res 1 ; .macro VIAHandler via_addr, via_handlers_table ; lda via_addr + IO::IFR ; sta tmp ; bbr7 tmp,@rts ; irq ; bbs0 tmp,@ca2 ; bbs1 tmp,@ca1 ; bbs2 tmp,@sr ; bbs3 tmp,@cb2 ; bbs4 tmp,@cb1 ; bbs5 tmp,@t2 ; bbs6 tmp,@t1 ; ; TODO error, one should have been true ; stp ; @rts: ; rts ; @ca2: jmp (via_handlers_table) ; @ca1: jmp (via_handlers_table+2) ; @sr: jmp (via_handlers_table+4) ; @cb2: jmp (via_handlers_table+6) ; @cb1: jmp (via_handlers_table+8) ; @t2: jmp (via_handlers_table+10) ; @t1: jmp (via_handlers_table+12) ; .endmacro