begin implementing IRQ framework

This commit is contained in:
Paul Gardner-Stephen committed 2019-04-19 23:11:32 +09:30
1 parent 1ca55c8df3
commit 9908c4e62a
2 files changed
+41 -2

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
;; The IRQ is a commonly messed with thing on the C64,
;; so we need to handle entry points that are commonly
;; relied upon, including:
;; $EA31 - Standard IRQ routine
;; $EA61 - Check keyboard, but don't update timer? https://github.com/cc65/cc65/issues/324
;; $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb
;; Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb)
return_from_interrupt:
;; Restore registers and return
pla
tay
pla
tax
pla
rti
+24 -2
View File
@@ -1,3 +1,25 @@
irq_handler:
inc $d020
rti
;; The IRQ is a commonly messed with thing on the C64,
;; so we need to handle entry points that are commonly
;; relied upon, including:
;; $EA31 - Standard IRQ routine
;; $EA61 - Check keyboard, but don't update timer? https://github.com/cc65/cc65/issues/324
;; $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb
;; Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb)
;; Save registers
pha
txa
pha
tya
pha
;; Call interrupt routine
;; (but only if initialised)
lda $0314
ora $0315
beq no_handler_installed
jmp ($0314)
no_handler_installed:
jmp return_from_interrupt