MT32-pi support for Minimig and AtariST.
This commit is contained in:
266
menu.cpp
266
menu.cpp
@@ -174,6 +174,10 @@ enum MENU
|
||||
MENU_ARCHIE_MAIN1,
|
||||
MENU_ARCHIE_MAIN2,
|
||||
MENU_ARCHIE_MAIN_FILE_SELECTED,
|
||||
|
||||
// MT32-pi
|
||||
MENU_MT32PI_MAIN1,
|
||||
MENU_MT32PI_MAIN2,
|
||||
};
|
||||
|
||||
static uint32_t menustate = MENU_NONE1;
|
||||
@@ -3441,7 +3445,7 @@ void HandleUI(void)
|
||||
|
||||
case MENU_ST_MAIN1:
|
||||
OsdSetSize(16);
|
||||
menumask = 0x3ff;
|
||||
menumask = 0x77f;
|
||||
OsdSetTitle("AtariST", 0);
|
||||
m = 0;
|
||||
|
||||
@@ -3465,11 +3469,18 @@ void HandleUI(void)
|
||||
OsdWrite(m++, " Save config \x16", menusub == 6);
|
||||
OsdWrite(m++);
|
||||
|
||||
OsdWrite(m++, " Reset", menusub == 7);
|
||||
OsdWrite(m++, " Cold Boot", menusub == 8);
|
||||
if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) & 1)
|
||||
{
|
||||
menumask |= 0x80;
|
||||
OsdWrite(m++, " MT32-pi \x16", menusub == 7);
|
||||
OsdWrite(m++);
|
||||
}
|
||||
|
||||
OsdWrite(m++, " Reset", menusub == 8);
|
||||
OsdWrite(m++, " Cold Boot", menusub == 9);
|
||||
|
||||
for (; m < OsdGetSize()-1; m++) OsdWrite(m);
|
||||
MenuWrite(15, STD_EXIT, menusub == 9, 0, OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
MenuWrite(15, STD_EXIT, menusub == 10, 0, OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
|
||||
menustate = MENU_ST_MAIN2;
|
||||
parentstate = MENU_ST_MAIN1;
|
||||
@@ -3552,7 +3563,15 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 7: // Reset
|
||||
case 7:
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
menusub = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 8: // Reset
|
||||
if (select)
|
||||
{
|
||||
tos_reset(0);
|
||||
@@ -3560,7 +3579,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 8: // Cold Boot
|
||||
case 9: // Cold Boot
|
||||
if (select)
|
||||
{
|
||||
tos_insert_disk(0, "");
|
||||
@@ -3570,7 +3589,7 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 9: // Exit
|
||||
case 10: // Exit
|
||||
if (select)
|
||||
{
|
||||
menustate = MENU_NONE1;
|
||||
@@ -3935,11 +3954,207 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case MENU_MT32PI_MAIN1:
|
||||
{
|
||||
parentstate = menustate;
|
||||
OsdSetTitle("MT32-pi");
|
||||
menumask = 0x7F;
|
||||
uint32_t mt32_cfg = is_minimig() ? minimig_get_extcfg() : tos_get_extctrl();
|
||||
|
||||
m = 0;
|
||||
OsdWrite(m++);
|
||||
strcpy(s, " Use MT32-pi: ");
|
||||
strcat(s, (mt32_cfg & 0x2) ? " No" : "Yes");
|
||||
OsdWrite(m++, s, menusub == 0);
|
||||
|
||||
strcpy(s, " Show Info: ");
|
||||
switch ((mt32_cfg >> 8) & 3)
|
||||
{
|
||||
case 0:
|
||||
strcat(s, " No");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
strcat(s, " Yes");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
strcat(s, " LCD-On(non-FB)");
|
||||
break;
|
||||
|
||||
case 3:
|
||||
strcat(s, "LCD-Auto(non-FB)");
|
||||
break;
|
||||
}
|
||||
OsdWrite(m++, s, menusub == 1);
|
||||
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Default Config:");
|
||||
|
||||
strcpy(s, " Synth: ");
|
||||
strcat(s, (mt32_cfg & 0x4) ? "FluidSynth" : " Munt");
|
||||
OsdWrite(m++, s, menusub == 2);
|
||||
|
||||
strcpy(s, " Munt ROM: ");
|
||||
switch ((mt32_cfg >> 3) & 3)
|
||||
{
|
||||
case 0:
|
||||
strcat(s, "MT-32 v1");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
strcat(s, "MT-32 v2");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
strcat(s, " CM-32L");
|
||||
break;
|
||||
|
||||
case 3:
|
||||
strcat(s, " Unknown");
|
||||
break;
|
||||
}
|
||||
OsdWrite(m++, s, menusub == 3);
|
||||
|
||||
sprintf(s, " SoundFont: %d", (mt32_cfg >> 5) & 7);
|
||||
OsdWrite(m++, s, menusub == 4);
|
||||
|
||||
OsdWrite(m++);
|
||||
strcpy(s, " Current Config: ");
|
||||
hdmask = spi_uio_cmd16(UIO_GET_OSDMASK, 0);
|
||||
if (((hdmask >> 1) & 3) == 1)
|
||||
{
|
||||
switch ((hdmask >> 3) & 3)
|
||||
{
|
||||
case 0:
|
||||
strcat(s, " MT-32 v1");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
strcat(s, " MT-32 v2");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
strcat(s, " CM-32L");
|
||||
break;
|
||||
|
||||
default:
|
||||
strcat(s, " Unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (((hdmask >> 1) & 3) == 2)
|
||||
{
|
||||
sprintf(s + strlen(s), "SoundFont %d", (hdmask >> 3) & 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
strcat(s, " Unknown");
|
||||
}
|
||||
OsdWrite(m++, s);
|
||||
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Reset Hanging Notes", menusub == 5);
|
||||
|
||||
while (m < 15) OsdWrite(m++);
|
||||
OsdWrite(15, STD_EXIT, menusub == 6, 0);
|
||||
|
||||
menustate = MENU_MT32PI_MAIN2;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case MENU_MT32PI_MAIN2:
|
||||
if (menu || back || left)
|
||||
{
|
||||
if (is_minimig())
|
||||
{
|
||||
menustate = MENU_MINIMIG_MAIN1;
|
||||
menusub = 9;
|
||||
}
|
||||
else
|
||||
{
|
||||
menustate = MENU_ST_MAIN1;
|
||||
menusub = 7;
|
||||
}
|
||||
}
|
||||
else if (select || plus || minus)
|
||||
{
|
||||
uint16_t mt32_cfg = is_minimig() ? minimig_get_extcfg() : tos_get_extctrl();
|
||||
|
||||
switch (menusub)
|
||||
{
|
||||
case 0:
|
||||
mt32_cfg ^= 0x2;
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m = (mt32_cfg >> 8) & 3;
|
||||
m = (m + (minus ? -1 : 1)) & 3;
|
||||
mt32_cfg = (mt32_cfg & ~0x300) | (m<<8);
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
mt32_cfg ^= 0x4;
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m = (mt32_cfg >> 3) & 3;
|
||||
if (minus)
|
||||
{
|
||||
m = (m - 1) & 3;
|
||||
if (m == 3) m = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m = (m + 1) & 3;
|
||||
if (m == 3) m = 0;
|
||||
}
|
||||
mt32_cfg = (mt32_cfg & ~0x18) | (m << 3);
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
m = (mt32_cfg >> 5) & 7;
|
||||
m = (m + (minus ? -1 : 1)) & 7;
|
||||
mt32_cfg = (mt32_cfg & ~0xE0) | (m << 5);
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (select)
|
||||
{
|
||||
if (is_minimig()) minimig_set_extcfg(mt32_cfg | 1);
|
||||
else tos_set_extctrl(mt32_cfg | 1);
|
||||
mt32_cfg &= ~1;
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (select) menustate = MENU_NONE1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (is_minimig()) minimig_set_extcfg(mt32_cfg);
|
||||
else tos_set_extctrl(mt32_cfg);
|
||||
}
|
||||
else if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) != hdmask)
|
||||
{
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/******************************************************************/
|
||||
/* minimig main menu */
|
||||
/******************************************************************/
|
||||
case MENU_MINIMIG_MAIN1:
|
||||
menumask = 0x1FF0; // b01110000 Floppy turbo, Harddisk options & Exit.
|
||||
menumask = 0x3DF0; // b01110000 Floppy turbo, Harddisk options & Exit.
|
||||
OsdSetTitle("Minimig", OSD_ARROW_RIGHT | OSD_ARROW_LEFT);
|
||||
helptext_idx = HELPTEXT_MAIN;
|
||||
|
||||
@@ -4001,15 +4216,19 @@ void HandleUI(void)
|
||||
OsdWrite(m++, " CPU & Chipset \x16", menusub == 6, 0);
|
||||
OsdWrite(m++, " Memory \x16", menusub == 7, 0);
|
||||
OsdWrite(m++, " Audio & Video \x16", menusub == 8, 0);
|
||||
OsdWrite(m++);
|
||||
|
||||
OsdWrite(m++, " Save configuration \x16", menusub == 9, 0);
|
||||
OsdWrite(m++, " Load configuration \x16", menusub == 10, 0);
|
||||
//if (spi_uio_cmd16(UIO_GET_OSDMASK, 0) & 1)
|
||||
{
|
||||
menumask |= 0x200;
|
||||
OsdWrite(m++, " MT32-pi \x16", menusub == 9);
|
||||
}
|
||||
|
||||
OsdWrite(m++);
|
||||
OsdWrite(m++, " Reset", menusub == 11, 0);
|
||||
OsdWrite(m++, " Save configuration \x16", menusub == 10, 0);
|
||||
OsdWrite(m++, " Load configuration \x16", menusub == 11, 0);
|
||||
|
||||
OsdWrite(15, STD_EXIT, menusub == 12, 0);
|
||||
while (m < 14) OsdWrite(m++);
|
||||
OsdWrite(m++, " Reset", menusub == 12, 0);
|
||||
OsdWrite(15, STD_EXIT, menusub == 13, 0);
|
||||
|
||||
menustate = MENU_MINIMIG_MAIN2;
|
||||
parentstate = MENU_MINIMIG_MAIN1;
|
||||
@@ -4082,19 +4301,24 @@ void HandleUI(void)
|
||||
else if (menusub == 9)
|
||||
{
|
||||
menusub = 0;
|
||||
menustate = MENU_MINIMIG_SAVECONFIG1;
|
||||
menustate = MENU_MT32PI_MAIN1;
|
||||
}
|
||||
else if (menusub == 10)
|
||||
{
|
||||
menusub = 0;
|
||||
menustate = MENU_MINIMIG_LOADCONFIG1;
|
||||
menustate = MENU_MINIMIG_SAVECONFIG1;
|
||||
}
|
||||
else if (menusub == 11)
|
||||
{
|
||||
menusub = 0;
|
||||
menustate = MENU_MINIMIG_LOADCONFIG1;
|
||||
}
|
||||
else if (menusub == 12)
|
||||
{
|
||||
menustate = MENU_NONE1;
|
||||
minimig_reset();
|
||||
}
|
||||
else if (menusub == 12)
|
||||
else if (menusub == 13)
|
||||
{
|
||||
menustate = MENU_NONE1;
|
||||
}
|
||||
@@ -4186,13 +4410,13 @@ void HandleUI(void)
|
||||
else
|
||||
{
|
||||
menustate = MENU_MINIMIG_MAIN1;
|
||||
menusub = 10;
|
||||
menusub = 11;
|
||||
}
|
||||
}
|
||||
if (menu || left) // exit menu
|
||||
{
|
||||
menustate = MENU_MINIMIG_MAIN1;
|
||||
menusub = 10;
|
||||
menusub = 11;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4669,13 +4893,13 @@ void HandleUI(void)
|
||||
|
||||
if (menusub<10) minimig_cfg_save(menusub);
|
||||
menustate = MENU_MINIMIG_MAIN1;
|
||||
menusub = 9;
|
||||
menusub = 10;
|
||||
}
|
||||
else
|
||||
if (menu || left) // exit menu
|
||||
{
|
||||
menustate = MENU_MINIMIG_MAIN1;
|
||||
menusub = 9;
|
||||
menusub = 10;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -378,6 +378,7 @@ static void ApplyConfiguration(char reloadkickstart)
|
||||
minimig_ConfigVideo(minimig_config.scanlines);
|
||||
minimig_ConfigAudio(minimig_config.audio);
|
||||
minimig_ConfigAutofire(minimig_config.autofire, 0xC);
|
||||
minimig_set_extcfg(minimig_config.ext_cfg & ~1);
|
||||
}
|
||||
|
||||
int minimig_cfg_load(int num)
|
||||
@@ -704,3 +705,18 @@ void minimig_ConfigAutofire(unsigned char autofire, unsigned char mask)
|
||||
param = (param << 8) | autofire;
|
||||
spi_uio_cmd16(UIO_MM2_JOY, param);
|
||||
}
|
||||
|
||||
void minimig_set_extcfg(unsigned short ext_cfg)
|
||||
{
|
||||
minimig_config.ext_cfg = ext_cfg;
|
||||
|
||||
spi_uio_cmd_cont(UIO_SET_STATUS2);
|
||||
spi32_w(0);
|
||||
spi32_w(ext_cfg);
|
||||
DisableIO();
|
||||
}
|
||||
|
||||
unsigned short minimig_get_extcfg()
|
||||
{
|
||||
return minimig_config.ext_cfg;
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ typedef struct
|
||||
unsigned long version;
|
||||
char kickstart[992];
|
||||
char label[32];
|
||||
mm_filterTYPE filter;
|
||||
unsigned short ext_cfg;
|
||||
unsigned char memory;
|
||||
unsigned char chipset;
|
||||
mm_floppyTYPE floppy;
|
||||
@@ -78,4 +78,7 @@ void minimig_ConfigChipset(unsigned char chipset);
|
||||
void minimig_ConfigFloppy(unsigned char drives, unsigned char speed);
|
||||
void minimig_ConfigAutofire(unsigned char autofire, unsigned char mask);
|
||||
|
||||
void minimig_set_extcfg(unsigned short ext_cfg);
|
||||
unsigned short minimig_get_extcfg();
|
||||
|
||||
#endif
|
||||
|
||||
@@ -31,6 +31,8 @@ typedef struct {
|
||||
char acsi_img[2][1024];
|
||||
char video_adjust[2];
|
||||
char cdc_control_redirect;
|
||||
char reserved;
|
||||
uint32_t ext_ctrl;
|
||||
} tos_config_t;
|
||||
|
||||
static tos_config_t config;
|
||||
@@ -68,6 +70,7 @@ static void set_control(uint32_t ctrl)
|
||||
|
||||
spi_uio_cmd_cont(UIO_SET_STATUS2);
|
||||
spi32_w(ctrl);
|
||||
spi32_w(config.ext_ctrl);
|
||||
DisableIO();
|
||||
}
|
||||
|
||||
@@ -77,6 +80,17 @@ void tos_update_sysctrl(uint32_t ctrl)
|
||||
set_control(config.system_ctrl);
|
||||
}
|
||||
|
||||
uint32_t tos_get_extctrl()
|
||||
{
|
||||
return config.ext_ctrl;
|
||||
}
|
||||
|
||||
void tos_set_extctrl(uint32_t ext_ctrl)
|
||||
{
|
||||
config.ext_ctrl = ext_ctrl;
|
||||
set_control(config.system_ctrl);
|
||||
}
|
||||
|
||||
unsigned long tos_system_ctrl()
|
||||
{
|
||||
return config.system_ctrl;
|
||||
@@ -603,7 +617,7 @@ void tos_config_load(int slot)
|
||||
name[7] = '0' + new_slot;
|
||||
int len = FileLoadConfig(name, 0, 0);
|
||||
tos_debugf("Configuration file size: %d (should be %d)", len, sizeof(tos_config_t));
|
||||
if (len == sizeof(tos_config_t)) FileLoadConfig(name, &config, sizeof(tos_config_t));
|
||||
FileLoadConfig(name, &config, sizeof(tos_config_t));
|
||||
|
||||
// ethernet is auto detected later
|
||||
config.system_ctrl &= ~TOS_CONTROL_ETHERNET;
|
||||
@@ -636,7 +650,7 @@ const char* tos_get_cfg_string(int num)
|
||||
memset(&tmp, 0, sizeof(tmp));
|
||||
|
||||
int len = FileLoadConfig(name, 0, 0);
|
||||
if (len == sizeof(tos_config_t))
|
||||
if (len)
|
||||
{
|
||||
FileLoadConfig(name, &tmp, sizeof(tos_config_t));
|
||||
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
|
||||
// USB redirection modes
|
||||
// (NONE=0, RS232=1, PARALLEL=2, MIDI=3)
|
||||
#define TOS_CONTROL_REDIR0 0x04000000
|
||||
#define TOS_CONTROL_REDIR1 0x08000000
|
||||
#define TOS_CONTROL_REDIR0 0x04000000 // unused
|
||||
#define TOS_CONTROL_REDIR1 0x08000000 // unused
|
||||
|
||||
#define TOS_CONTROL_VIKING 0x10000000 // Viking graphics card
|
||||
|
||||
@@ -100,4 +100,7 @@ void tos_uart_mode(int enable);
|
||||
int tos_get_ar();
|
||||
void tos_set_ar(int ar);
|
||||
|
||||
uint32_t tos_get_extctrl();
|
||||
void tos_set_extctrl(uint32_t ext_ctrl);
|
||||
|
||||
#endif
|
||||
|
||||
15
user_io.cpp
15
user_io.cpp
@@ -992,16 +992,22 @@ void user_io_init(const char *path, const char *xml)
|
||||
OsdCoreNameSet(user_io_get_core_name());
|
||||
|
||||
uint32_t status[2] = { 0, 0 };
|
||||
if (!is_st())
|
||||
if (!is_st() && !is_minimig())
|
||||
{
|
||||
printf("Loading config %s\n", name);
|
||||
if (FileLoadConfig(name, status, 8))
|
||||
{
|
||||
printf("Found config: %08X-%08X\n", status[0], status[1]);
|
||||
status[0] &= ~UIO_STATUS_RESET;
|
||||
user_io_8bit_set_status(status[0], ~UIO_STATUS_RESET, 0);
|
||||
user_io_8bit_set_status(status[1], 0xffffffff, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
status[0] = 0;
|
||||
status[1] = 0;
|
||||
}
|
||||
|
||||
status[0] &= ~UIO_STATUS_RESET;
|
||||
user_io_8bit_set_status(status[0], ~UIO_STATUS_RESET, 0);
|
||||
user_io_8bit_set_status(status[1], 0xffffffff, 1);
|
||||
parse_config();
|
||||
}
|
||||
|
||||
@@ -1025,6 +1031,7 @@ void user_io_init(const char *path, const char *xml)
|
||||
}
|
||||
else if (is_minimig())
|
||||
{
|
||||
parse_config();
|
||||
puts("Identified Minimig V2 core");
|
||||
BootInit();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user