From cdb5c1eef67830220285fd5893293c54c19224de Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 3 Sep 2020 19:42:10 +0200 Subject: [PATCH] autoswitch to legacy mode if loading file below $0800 --- src/kernal/board_m65/mega65_imports.s | 1 + src/kernal/board_m65/mega65_load_autoswitch.s | 44 +++++++++++++++++++ src/kernal/board_m65/mega65_proxies.s | 6 +++ src/kernal/iec/load_iec.s | 9 ++++ src/kernal/tape/tape_common.s | 8 ++++ 5 files changed, 68 insertions(+) create mode 100644 src/kernal/board_m65/mega65_load_autoswitch.s diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index 68b57db9..b1d5f35b 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -69,6 +69,7 @@ .label lvs_return_last_address = KERNAL_0.proxy_K1_lvs_return_last_address .label lvs_device_not_found_error = KERNAL_0.proxy_K1_lvs_device_not_found_error .label lvs_load_verify_error = KERNAL_0.proxy_K1_lvs_load_verify_error +.label m65_load_autoswitch_tape = KERNAL_0.proxy_K1_m65_load_autoswitch_tape .label lvs_check_EAL = KERNAL_0.lvs_check_EAL .label lvs_STAL_to_MEMUSS = KERNAL_0.lvs_STAL_to_MEMUSS diff --git a/src/kernal/board_m65/mega65_load_autoswitch.s b/src/kernal/board_m65/mega65_load_autoswitch.s new file mode 100644 index 00000000..650dd136 --- /dev/null +++ b/src/kernal/board_m65/mega65_load_autoswitch.s @@ -0,0 +1,44 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Automatic switching to legacy C64 mode if loading anything below $0800 +// + +#if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO + + +m65_load_autoswitch_tape: + + lda VERCKK + bne m65_load_autoswitch_done // no autoswitch for VERIFY + + lda STAL+1 + +#endif + +m65_load_autoswitch: + + lda VERCKK + bne m65_load_autoswitch_done // no autoswitch for VERIFY + + lda EAL+1 + + // FALLTROUGH + +m65_load_autoswitch_check: + + cmp #$08 + bcs m65_load_autoswitch_done // no autoswitch if loading above $07FF + + jsr M65_MODEGET + bcs m65_load_autoswitch_done // no autoswitch if already in legacy mode + + sec + jmp M65_MODESET + + // XXX consider displaying something here + +m65_load_autoswitch_done: + + rts diff --git a/src/kernal/board_m65/mega65_proxies.s b/src/kernal/board_m65/mega65_proxies.s index 51651693..2eb02bb8 100644 --- a/src/kernal/board_m65/mega65_proxies.s +++ b/src/kernal/board_m65/mega65_proxies.s @@ -53,6 +53,12 @@ proxy_K1_lvs_load_verify_error: jsr map_NORMAL jmp lvs_load_verify_error +proxy_K1_m65_load_autoswitch_tape: + + jsr map_NORMAL + jsr m65_load_autoswitch_tape + jmp_8 !- + proxy_K1_print_kernal_message: jsr map_NORMAL diff --git a/src/kernal/iec/load_iec.s b/src/kernal/iec/load_iec.s index c9778dd0..09d02bbd 100644 --- a/src/kernal/iec/load_iec.s +++ b/src/kernal/iec/load_iec.s @@ -95,7 +95,16 @@ load_iec: lda STAL+1 sta EAL+1 !: +#if ROM_LAYOUT_M65 + + // Switch to legacy mode if needed + + jsr m65_load_autoswitch + +#endif + // Display start address + jsr lvs_display_loading_verifying #if (CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS) && !CONFIG_MEMORY_MODEL_60K diff --git a/src/kernal/tape/tape_common.s b/src/kernal/tape/tape_common.s index e46ce6b1..4b896671 100644 --- a/src/kernal/tape/tape_common.s +++ b/src/kernal/tape/tape_common.s @@ -223,6 +223,14 @@ tape_handle_header: jsr lvs_STAL_to_MEMUSS +#if ROM_LAYOUT_M65 + + // Switch to legacy mode if needed + + jsr m65_load_autoswitch_tape + +#endif + // Print LOADING and start address jsr lvs_display_loading_verifying