diff --git a/src/aliases/,aliases_hardware_m65.s b/src/aliases/,aliases_hardware_m65.s index 075f5ac6..80cc491e 100644 --- a/src/aliases/,aliases_hardware_m65.s +++ b/src/aliases/,aliases_hardware_m65.s @@ -20,6 +20,8 @@ .label VIC_CHARSTEP = $D058 // 2 bytes - logical characters per line + .label VIC_SRH = $D05D // - various flags, bit 7 = hot registers + .label VIC_SCRNPTR = $D060 // 4 bytes - pointer to start of screen memory .label VIC_COLPTR = $D064 // 2 bytes - pointer to start of color memory diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index de974bb7..496bb7ee 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -38,6 +38,8 @@ .label viciv_unhide = KERNAL_0.viciv_unhide .label viciv_init = KERNAL_0.viciv_init .label viciv_shutdown = KERNAL_0.viciv_shutdown +.label viciv_hotregs_on = KERNAL_0.viciv_hotregs_on +.label viciv_hotregs_off = KERNAL_0.viciv_hotregs_off .label m65_scrtab_txtwidth = KERNAL_0.m65_scrtab_txtwidth .label m65_scrtab_txtheight = KERNAL_0.m65_scrtab_txtheight diff --git a/src/kernal/board_m65/mega65_viciv_init.s b/src/kernal/board_m65/mega65_viciv_init.s index 510063a4..d4bd917a 100644 --- a/src/kernal/board_m65/mega65_viciv_init.s +++ b/src/kernal/board_m65/mega65_viciv_init.s @@ -22,4 +22,21 @@ viciv_init: lda #%01000000 // enable C65 character set sta VIC_CTRLA + // Disable hot registers + + // FALLTROUGH + +viciv_hotregs_off: + + lda VIC_SRH + and #$7F +!: + sta VIC_SRH + rts + +viciv_hotregs_on: + + lda VIC_SRH + ora #$80 + bra !- diff --git a/src/kernal/board_m65/mega65_viciv_shutdown.s b/src/kernal/board_m65/mega65_viciv_shutdown.s index 553cd580..3d76f1af 100644 --- a/src/kernal/board_m65/mega65_viciv_shutdown.s +++ b/src/kernal/board_m65/mega65_viciv_shutdown.s @@ -23,6 +23,10 @@ viciv_shutdown: sta VIC_CTRLA // enable C64 character set sta VIC_CTRLB // disable extended resolution and attributes + // Reenable hot registers + + jsr viciv_hotregs_on + // Hide VIC-IV registers and quit sta VIC_KEY diff --git a/src/kernal/screen_m65/mega65_scrmodeset.s b/src/kernal/screen_m65/mega65_scrmodeset.s index 2a49ec3e..51edf6cd 100644 --- a/src/kernal/screen_m65/mega65_scrmodeset.s +++ b/src/kernal/screen_m65/mega65_scrmodeset.s @@ -46,11 +46,15 @@ m65_scrmodeset_internal: // entry point for M65_MODE65 tax + jsr viciv_hotregs_on + lda m65_scrtab_scrolx,x sta VIC_SCROLX lda m65_scrtab_vic_ctrlb,x sta VIC_CTRLB + jsr viciv_hotregs_off + // Set the logical row length to 80 ldx #$50