From 64ae9ad75b57ec3cfbb3dc64b9e73457ad210ea9 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 28 Aug 2020 23:15:17 +0200 Subject: [PATCH] switching from MEGA65 native mode to legacy mode works now --- src/kernal/board_m65/mega65_imports.s | 2 ++ src/kernal/board_m65/mega65_viciv_init.s | 27 ++++++++++++++++++ src/kernal/board_m65/mega65_viciv_shutdown.s | 29 ++++++++++++++++++++ src/kernal/board_m65/mega65_viciv_unhide.s | 10 ++----- src/kernal/extapi_m65/mega65_mode64.s | 17 ++---------- src/kernal/extapi_m65/mega65_mode65.s | 22 ++------------- src/kernal/panic.s | 8 ++++++ 7 files changed, 74 insertions(+), 41 deletions(-) create mode 100644 src/kernal/board_m65/mega65_viciv_init.s create mode 100644 src/kernal/board_m65/mega65_viciv_shutdown.s diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index 4e4d9cb7..7077b18f 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -36,6 +36,8 @@ .label setup_irq_timer = KERNAL_0.setup_irq_timer .label wait_x_bars = KERNAL_0.wait_x_bars .label viciv_unhide = KERNAL_0.viciv_unhide +.label viciv_init = KERNAL_0.viciv_init +.label viciv_shutdown = KERNAL_0.viciv_shutdown .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 new file mode 100644 index 00000000..000bf1b1 --- /dev/null +++ b/src/kernal/board_m65/mega65_viciv_init.s @@ -0,0 +1,27 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Routine to initialize VIC-IV for entering MEGA65 native mode +// + + +viciv_init: + + // Switch VIC to VIC-IV mode + + jsr viciv_unhide + + // Disable badlines and slow interrupt emulation + + lda #$00 + sta MISC_EMU + + // Set misc VIC-IV flags + + lda #%01000000 // enable C65 character set + sta VIC_CTRLA + + // XXX enable 48 MHz mode in VIC_CTRLC + + rts diff --git a/src/kernal/board_m65/mega65_viciv_shutdown.s b/src/kernal/board_m65/mega65_viciv_shutdown.s new file mode 100644 index 00000000..553cd580 --- /dev/null +++ b/src/kernal/board_m65/mega65_viciv_shutdown.s @@ -0,0 +1,29 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Routine to shutdown VIC-IV for leaving MEGA65 native mode +// + + +viciv_shutdown: + + // Switch VIC to VIC-IV mode, temporarily + + jsr viciv_unhide + + // Reenable badlines and slow interrupt emulation + + lda #$03 + sta MISC_EMU + + // Set misc VIC-IV flags + + lda #%00000000 + sta VIC_CTRLA // enable C64 character set + sta VIC_CTRLB // disable extended resolution and attributes + + // Hide VIC-IV registers and quit + + sta VIC_KEY + rts diff --git a/src/kernal/board_m65/mega65_viciv_unhide.s b/src/kernal/board_m65/mega65_viciv_unhide.s index 179950f3..2961cb3a 100644 --- a/src/kernal/board_m65/mega65_viciv_unhide.s +++ b/src/kernal/board_m65/mega65_viciv_unhide.s @@ -1,15 +1,11 @@ -// #LAYOUT# STD * #TAKE -// #LAYOUT# X16 * #IGNORE -// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE // #LAYOUT# * * #IGNORE // -// Routine to unhide Mega65 extra registers +// Routine to unhide MEGA65 extra registers // -#if ROM_LAYOUT_M65 - viciv_unhide: lda #$47 @@ -18,5 +14,3 @@ viciv_unhide: sta VIC_KEY rts - -#endif diff --git a/src/kernal/extapi_m65/mega65_mode64.s b/src/kernal/extapi_m65/mega65_mode64.s index 14910d22..010e85ea 100644 --- a/src/kernal/extapi_m65/mega65_mode64.s +++ b/src/kernal/extapi_m65/mega65_mode64.s @@ -8,8 +8,6 @@ M65_MODE64: sei - // XXX provide full implementation - switch back to normal text mode - // Set the magic string to mark legacy mode lda #$00 @@ -17,19 +15,10 @@ M65_MODE64: sta M65_MAGICSTR+1 sta M65_MAGICSTR+2 - // Reenable badlines and slow interrupt emulation + // Restore VIC-II configuration - lda #$03 - sta MISC_EMU - - // Set misc VIC-IV flags - - lda %00000000 // enable C64 character set - sta VIC_CTRLA - - // Switch to VIC-II mode - - sta VIC_KEY + jsr viciv_shutdown + jsr setup_vicii // Reenable interrupts diff --git a/src/kernal/extapi_m65/mega65_mode65.s b/src/kernal/extapi_m65/mega65_mode65.s index 273f98ee..100ffeb0 100644 --- a/src/kernal/extapi_m65/mega65_mode65.s +++ b/src/kernal/extapi_m65/mega65_mode65.s @@ -21,27 +21,11 @@ M65_MODE65: lda #$35 // '5' sta M65_MAGICSTR+2 - // XXX find a better place for code below + // Initialize VIC-IV - // Switch VIC to VIC-IV mode + jsr viciv_init - jsr viciv_unhide - - // Disable badlines and slow interrupt emulation - - lda #$00 - sta MISC_EMU - - // Set misc VIC-IV flags - - lda %01000000 // enable C65 character set - sta VIC_CTRLA - - // XXX enable 48 MHz mode in VIC_CTRLC - - // XXX posibly alter other settings - - // Set screen mode to 80x25 + // Set screen mode to 80x50 lda #$02 jsr m65_scrmodeset_internal diff --git a/src/kernal/panic.s b/src/kernal/panic.s index 7e2ef9c4..f2a8023a 100644 --- a/src/kernal/panic.s +++ b/src/kernal/panic.s @@ -16,6 +16,14 @@ panic: sei pha +#if ROM_LAYOUT_M65 + + // Make sure we are in legacy mode + + jsr M65_MODE64 + +#endif + // Reinitialize the hardware jsr IOINIT