diff --git a/c64/kernal/ioinit.s b/c64/kernal/ioinit.s index 79c76dc4..64047b7a 100644 --- a/c64/kernal/ioinit.s +++ b/c64/kernal/ioinit.s @@ -14,5 +14,26 @@ ioinit: sta $D020 lda #$06 sta $D021 + + ;; Enable CIA1 IRQ and ~50Hz timer + ;; (https://csdb.dk/forums/?roomid=11&topicid=69037) + lda #$7f + sta $DC0D ; First disable all + + ;; Set timer interval to ~1/50th of a second + lda #<20000 + sta $dc04 + lda #>20000 + sta $dc05 + + ;; Enable timer interrupt + lda #$81 + sta $dc0d + + ;; Enable timer A to run continuously + ;; (http://codebase64.org/doku.php?id=base:timerinterrupts) + lda #$11 + sta $dc0e + lda $dc0d rts diff --git a/c64/kernal/irq_handler.s b/c64/kernal/irq_handler.s index 7a1f9baf..0a1349f1 100644 --- a/c64/kernal/irq_handler.s +++ b/c64/kernal/irq_handler.s @@ -14,6 +14,9 @@ irq_handler: tya pha + ;; Acknowledge CIA interrupt + lda $dc0d + ;; Call interrupt routine ;; (but only if initialised) lda $0314