Archie: option to fix 25MHz audio.

This commit is contained in:
sorgelig
2019-04-27 00:51:15 +08:00
parent e825f8d0a0
commit 4014b10874
3 changed files with 62 additions and 38 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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