From 4014b108740785542bea8cfe66ab715cd0e0cf52 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Sat, 27 Apr 2019 00:51:15 +0800 Subject: [PATCH] Archie: option to fix 25MHz audio. --- menu.cpp | 21 ++++++++--- support/archie/archie.cpp | 77 +++++++++++++++++++++++---------------- support/archie/archie.h | 2 + 3 files changed, 62 insertions(+), 38 deletions(-) diff --git a/menu.cpp b/menu.cpp index 6e69aab..3c70feb 100644 --- a/menu.cpp +++ b/menu.cpp @@ -933,7 +933,7 @@ void HandleUI(void) OsdSetTitle(user_io_get_core_name(), OSD_ARROW_RIGHT | OSD_ARROW_LEFT); m = 0; - menumask = 0x1ff; + menumask = 0x3ff; OsdWrite(m++); strcpy(s, " Floppy 0: "); @@ -965,16 +965,20 @@ void HandleUI(void) sprintf(s, " Stereo mix: %s", config_stereo_msg[archie_get_amix()]); OsdWrite(m++, s, menusub == 5); + strcpy(s, " 25MHz audio fix: "); + strcat(s, archie_get_afix() ? "Enable" : "Disable"); + OsdWrite(m++, s, menusub == 6); + OsdWrite(m++); sprintf(s, " Swap joysticks: %s", user_io_get_joyswap() ? "Yes" : "No"); - OsdWrite(m++, s, menusub == 6); - sprintf(s, " Swap mouse btn 2/3: %s", archie_get_mswap() ? "Yes" : "No"); OsdWrite(m++, s, menusub == 7); + sprintf(s, " Swap mouse btn 2/3: %s", archie_get_mswap() ? "Yes" : "No"); + OsdWrite(m++, s, menusub == 8); while(m<15) OsdWrite(m++); - OsdWrite(15, STD_EXIT, menusub == 8, 0); + OsdWrite(15, STD_EXIT, menusub == 9, 0); menustate = MENU_ARCHIE_MAIN2; parentstate = MENU_ARCHIE_MAIN1; @@ -1016,16 +1020,21 @@ void HandleUI(void) break; case 6: - user_io_set_joyswap(!user_io_get_joyswap()); + archie_set_afix(!archie_get_afix()); menustate = MENU_ARCHIE_MAIN1; break; case 7: + user_io_set_joyswap(!user_io_get_joyswap()); + menustate = MENU_ARCHIE_MAIN1; + break; + + case 8: archie_set_mswap(!archie_get_mswap()); menustate = MENU_ARCHIE_MAIN1; break; - case 8: // Exit + case 9: // Exit menustate = MENU_NONE1; break; } diff --git a/support/archie/archie.cpp b/support/archie/archie.cpp index 2848eba..35511d6 100644 --- a/support/archie/archie.cpp +++ b/support/archie/archie.cpp @@ -96,17 +96,29 @@ int archie_get_60() return config.system_ctrl & 0b1000; } -static int mswap = 0; -void archie_set_mswap(char i) -{ - mswap = i; -} - -int archie_get_mswap() -{ - return mswap; -} - +void archie_set_afix(char i) +{ + if (i) config.system_ctrl |= 0b10000; + else config.system_ctrl &= ~0b10000; + user_io_8bit_set_status((i ? -1 : 0), 0b100000); +} + +int archie_get_afix() +{ + return config.system_ctrl & 0b10000; +} + +static int mswap = 0; +void archie_set_mswap(char i) +{ + mswap = i; +} + +int archie_get_mswap() +{ + return mswap; +} + void archie_set_amix(char i) { config.system_ctrl = (config.system_ctrl & ~0b110) | ((i & 3)<<1); @@ -203,6 +215,7 @@ void archie_init(void) archie_set_ar(archie_get_ar()); archie_set_amix(archie_get_amix()); archie_set_60(archie_get_60()); + archie_set_afix(archie_get_afix()); // upload rom file @@ -395,27 +408,27 @@ void archie_poll(void) // arm acks first byte case BACK: - if (kbd_state != STATE_WAIT4ACK1) { - archie_debugf("KBD unexpected BACK, resetting KBD"); - kbd_state = STATE_HRST; - } - else { -#ifdef HOLD_OFF_TIME - // wait some time before sending next byte - archie_debugf("KBD starting hold off"); - kbd_state = STATE_HOLD_OFF; - hold_off_timer = GetTimer(10); - // wait some time before sending next byte - archie_debugf("KBD starting hold off"); - kbd_state = STATE_HOLD_OFF; - hold_off_timer = GetTimer(10); -#else - kbd_state = STATE_IDLE; - archie_check_queue(); - kbd_state = STATE_IDLE; - archie_check_queue(); -#endif - } + if (kbd_state != STATE_WAIT4ACK1) { + archie_debugf("KBD unexpected BACK, resetting KBD"); + kbd_state = STATE_HRST; + } + else { +#ifdef HOLD_OFF_TIME + // wait some time before sending next byte + archie_debugf("KBD starting hold off"); + kbd_state = STATE_HOLD_OFF; + hold_off_timer = GetTimer(10); + // wait some time before sending next byte + archie_debugf("KBD starting hold off"); + kbd_state = STATE_HOLD_OFF; + hold_off_timer = GetTimer(10); +#else + kbd_state = STATE_IDLE; + archie_check_queue(); + kbd_state = STATE_IDLE; + archie_check_queue(); +#endif + } break; // arm acks second byte diff --git a/support/archie/archie.h b/support/archie/archie.h index 2c48e74..0b7b1e2 100644 --- a/support/archie/archie.h +++ b/support/archie/archie.h @@ -19,5 +19,7 @@ void archie_set_mswap(char i); int archie_get_mswap(); void archie_set_60(char i); int archie_get_60(); +void archie_set_afix(char i); +int archie_get_afix(); #endif // ARCHIE_H