diff --git a/c64/kernal/ea31.default_irq_handler.s b/c64/kernal/ea31.default_irq_handler.s new file mode 100644 index 00000000..64933725 --- /dev/null +++ b/c64/kernal/ea31.default_irq_handler.s @@ -0,0 +1,7 @@ +default_irq_handler: + + jsr blink_cursor + jsr scan_keyboard + + ;; Acknowledge CIA interrupt and return + jmp clear_cia1_interrupt_flag_and_return_from_interrupt: diff --git a/c64/kernal/ea7e.s b/c64/kernal/ea7e.s new file mode 100644 index 00000000..9fd19423 --- /dev/null +++ b/c64/kernal/ea7e.s @@ -0,0 +1,11 @@ + ;; https://csdb.dk/forums/index.php?roomid=11&topicid=5776 + ;; Clear the CIA1 interrupt flag, and then fall through to + ;; the return from interrupt routine + +clear_cia1_interrupt_flag_and_return_from_interrupt: + + ;; We have free choice of LDA, LDX or LDY to achieve this goal + ;; in 3 bytes and minimum cycles. Thus we randomly choose LDY. + LDY $DC0D + + ;; FALL THROUGH to $EA81 diff --git a/c64/kernal/ioinit.s b/c64/kernal/ioinit.s index 270e9bb0..6f49fb22 100644 --- a/c64/kernal/ioinit.s +++ b/c64/kernal/ioinit.s @@ -15,6 +15,11 @@ ioinit: sta $D020 sta $D021 + ;; Turn off sprites + ;; (observed hanging around after running programs and resetting) + lda #$00 + sta $D015 + ;; Enable CIA1 IRQ and ~50Hz timer ;; (https://csdb.dk/forums/?roomid=11&topicid=69037) lda #$7f diff --git a/c64/kernal/ea31.irq_handler.s b/c64/kernal/irq_handler.s similarity index 84% rename from c64/kernal/ea31.irq_handler.s rename to c64/kernal/irq_handler.s index 7340963b..1b8b4730 100644 --- a/c64/kernal/ea31.irq_handler.s +++ b/c64/kernal/irq_handler.s @@ -15,18 +15,9 @@ irq_handler: tya pha - ;; Acknowledge CIA interrupt - lda $dc0d - ;; Call interrupt routine ;; (but only if initialised) lda $0314 ora $0315 beq default_irq_handler jmp ($0314) -default_irq_handler: - - jsr blink_cursor - jsr scan_keyboard - - jmp return_from_interrupt diff --git a/src/preprocess.c b/src/preprocess.c index 955b9267..b18f05a4 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -119,6 +119,7 @@ int main(int argc,char **argv) if (sscanf(source_files[i].file,"%x.%[^.]",&addr,funcname)==2) { // Function must appear at specific address source_files[i].address=addr; + printf("function '%s' should be placed at $%04X\n",funcname,addr); } }