begin implementing IRQ framework
This commit is contained in:
1 parent
1ca55c8df3
commit
9908c4e62a
2 files changed
+41
-2
No files matched your search
@@ -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
|
||||||
|
|
||||||
@@ -1,3 +1,25 @@
|
|||||||
irq_handler:
|
irq_handler:
|
||||||
inc $d020
|
;; The IRQ is a commonly messed with thing on the C64,
|
||||||
rti
|
;; 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
|
||||||
Reference in new issue
Block a user