diff --git a/c64/aliases/,aliases_hardware.s b/c64/aliases/,aliases_hardware.s index ee6ceddb..b9622844 100644 --- a/c64/aliases/,aliases_hardware.s +++ b/c64/aliases/,aliases_hardware.s @@ -28,7 +28,7 @@ .alias VIC_SP7Y $D00F .alias VIC_MSIGX $D010 - .alias VIC_SCROLLY $D011 + .alias VIC_SCROLY $D011 .alias VIC_RASTER $D012 .alias VIC_LPENX $D013 .alias VIC_LPENY $D014 diff --git a/c64/aliases/,aliases_rom_basic.s b/c64/aliases/,aliases_rom_basic.s index e69de29b..ff6c46dc 100644 --- a/c64/aliases/,aliases_rom_basic.s +++ b/c64/aliases/,aliases_rom_basic.s @@ -0,0 +1,5 @@ + + ;; BASIC startup vector + + .alias IBASIC_COLD_START $A000 + .alias IBASIC_WARM_START $A002 diff --git a/c64/basic/,target_generic/,hooks_generic.s b/c64/basic/,target_generic/,hooks_generic.s index 186b29d0..92860379 100644 --- a/c64/basic/,target_generic/,hooks_generic.s +++ b/c64/basic/,target_generic/,hooks_generic.s @@ -4,6 +4,6 @@ .macro TARGET_HOOK_BANNER - .byte $05, " OPEN ROMS, ", $00 + .byte " OPEN ROMS, ", $00 .macend diff --git a/c64/basic/,target_ultimate64/,hooks_ultimate64.s b/c64/basic/,target_ultimate64/,hooks_ultimate64.s index 519d07e9..9ae05e35 100644 --- a/c64/basic/,target_ultimate64/,hooks_ultimate64.s +++ b/c64/basic/,target_ultimate64/,hooks_ultimate64.s @@ -4,6 +4,6 @@ .macro TARGET_HOOK_BANNER - .byte $05, " OPEN ROMS FOR ULTIMATE 64", $0D, $0D, " ", $00 + .byte " OPEN ROMS FOR ULTIMATE 64", $0D, $0D, " ", $00 .macend diff --git a/c64/kernal/cint.s b/c64/kernal/cint.s index 973def0d..25c31472 100644 --- a/c64/kernal/cint.s +++ b/c64/kernal/cint.s @@ -10,6 +10,9 @@ cint: + +cint_brk: ; entry for BRK and STOP+RESTORE - XXX, where should it start? + jsr setup_vicii ;; Initialise cursor blink flags (Compute's Mapping the 64 p215) @@ -34,8 +37,8 @@ cint: stx key_first_repeat_delay ;; Set current colour for text (Compute's Mapping the 64 p215) - ldx #$0e ; light blue by default - stx $0286 + ldx #$01 ; default is light blue ($0E), but we use a different one + stx text_colour ;; Set maximum keyboard buffer size (Compute's Mapping the 64 p215) ldx #10 diff --git a/c64/kernal/e544.clear_screen.s b/c64/kernal/e544.clear_screen.s index 6b1d41fc..431c571e 100644 --- a/c64/kernal/e544.clear_screen.s +++ b/c64/kernal/e544.clear_screen.s @@ -1,21 +1,20 @@ ;; Clear screen and initialise line link table ;; (Compute's Mapping the 64 p215-216) -clear_screen: - +clear_screen: + ;; Clear line link table ;; (Compute's Mapping the 64 p215) lda #$00 ldy #24 -clearscreen_l1: +clearscreen_l1: sta screen_line_link_table,y dey bpl clearscreen_l1 ;; Y now = #$FF - ;; Clear screen RAM. ;; We should do this at HIBASE, which annoyingly ;; is no ZP, so we need to make a vector diff --git a/c64/kernal/e5a0.setup_vicii.s b/c64/kernal/e5a0.setup_vicii.s index 671bfadf..d2483a45 100644 --- a/c64/kernal/e5a0.setup_vicii.s +++ b/c64/kernal/e5a0.setup_vicii.s @@ -1,19 +1,20 @@ -setup_vicii: +setup_vicii: + ;; Set up default IO values (Compute's Mapping the 64 p215) - lda #$1b ; Enable text mode - sta $d011 - lda #$c8 ; 40 column etc - sta $d016 + lda #$1B ; Enable text mode + sta VIC_SCROLY + lda #$C8 ; 40 column etc + sta VIC_SCROLX ;; Compute's Mapping the 64, p156 ;; We use a different colour scheme of white text on all blue lda #$06 - sta $D020 - sta $D021 + sta VIC_EXTCOL + sta VIC_BGCOL0 - ;; Turn off sprites - ;; (observed hanging around after running programs and resetting) + ;; Turn off sprites (observed hanging around after running programs and resetting) lda #$00 - sta $D015 - + sta VIC_SPENA + + ;;FALLTROUGH diff --git a/c64/kernal/interrupts/ea31.default_irq_handler.s b/c64/kernal/interrupts/ea31.default_irq_handler.s index e37991f1..ab74f1c8 100644 --- a/c64/kernal/interrupts/ea31.default_irq_handler.s +++ b/c64/kernal/interrupts/ea31.default_irq_handler.s @@ -1,3 +1,4 @@ + default_irq_handler: jsr blink_cursor diff --git a/c64/kernal/ea31.interop b/c64/kernal/interrupts/ea31.interop similarity index 100% rename from c64/kernal/ea31.interop rename to c64/kernal/interrupts/ea31.interop diff --git a/c64/kernal/ea7e.s b/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s similarity index 100% rename from c64/kernal/ea7e.s rename to c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s diff --git a/c64/kernal/ea81.s b/c64/kernal/interrupts/ea81.return_from_interrupt.s similarity index 100% rename from c64/kernal/ea81.s rename to c64/kernal/interrupts/ea81.return_from_interrupt.s diff --git a/c64/kernal/interrupts/fe47.default_nmi_handler.s b/c64/kernal/interrupts/fe47.default_nmi_handler.s index be183b26..fac6d0a7 100644 --- a/c64/kernal/interrupts/fe47.default_nmi_handler.s +++ b/c64/kernal/interrupts/fe47.default_nmi_handler.s @@ -1,7 +1,11 @@ default_nmi_handler: - ;; XXX provide real implementation + ;; XXX implement according to Compute's Mapping the Commodore 64, page 74 + + ;; XXX check if the source was RESTORE key, quit if it wasn't (no RS-232 support) + ;; XXX if cartridge present, enter it through warm start vector + ;; XXX if stop pressed, go to default_brk_handler inc $D020 rti diff --git a/c64/kernal/fe47.interop b/c64/kernal/interrupts/fe47.interop similarity index 100% rename from c64/kernal/fe47.interop rename to c64/kernal/interrupts/fe47.interop diff --git a/c64/kernal/interrupts/fe66.default_brk_handler.s b/c64/kernal/interrupts/fe66.default_brk_handler.s index 54232eeb..230be89d 100644 --- a/c64/kernal/interrupts/fe66.default_brk_handler.s +++ b/c64/kernal/interrupts/fe66.default_brk_handler.s @@ -1,6 +1,11 @@ + default_brk_handler: - ;; XXX implement this! + ;; Implemented according to Compute's Mapping the Commodore 64, pages 73-74 + + jsr JRESTOR + jsr JIOINIT + jsr CINT_BRK + + jmp (IBASIC_WARM_START) - ;; Acknowledge CIA interrupt and return - jmp clear_cia1_interrupt_flag_and_return_from_interrupt diff --git a/c64/kernal/fe66.interop b/c64/kernal/interrupts/fe66.interop similarity index 100% rename from c64/kernal/fe66.interop rename to c64/kernal/interrupts/fe66.interop diff --git a/c64/kernal/interrupts/irq_handler.s b/c64/kernal/interrupts/irq_handler.s index 82bbaac7..74d1eb78 100644 --- a/c64/kernal/interrupts/irq_handler.s +++ b/c64/kernal/interrupts/irq_handler.s @@ -1,3 +1,4 @@ + irq_handler: ;; The IRQ is a commonly messed with thing on the C64, ;; so we need to handle entry points that are commonly @@ -7,17 +8,18 @@ irq_handler: ;; $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 - ;; Sequence according to Compute's Mapping the 64 p73 + ;; Save registers, sequence according to Compute's Mapping the Commodore 64, page 73 pha txa pha tya pha - ;; Call interrupt routine - ;; (but only if initialised) + ;; Call interrupt routine (only if initialised) lda CINV ora CINV+1 - beq default_irq_handler + bne + jmp (CINV) +* + ;; Vector not initialized - call default interrupt routine + jmp default_irq_handler diff --git a/c64/kernal/interrupts/nmi_handler.s b/c64/kernal/interrupts/nmi_handler.s index 652070f1..220ec401 100644 --- a/c64/kernal/interrupts/nmi_handler.s +++ b/c64/kernal/interrupts/nmi_handler.s @@ -1,5 +1,7 @@ nmi_handler: + ;; XXX provide real implementation + jmp (NMINV)