1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-04-25 20:11:42 +00:00

Minimig features menu

This commit is contained in:
Gerald Schnabel
2021-07-06 20:04:51 +02:00
parent c1d117d67f
commit 86d823c471
6 changed files with 127 additions and 31 deletions

View File

@@ -32,27 +32,29 @@ static const ini_section_t config_ini_sections[] = {
};
static const ini_var_t config_ini_vars[] = {
{"KICKSTART", (void*)tmpconf.kickstart, STRING, 1, 79, 1},
{"FILTER_LO", (void*)&tmpconf.filter.lores, UINT8, 0, 3, 1},
{"FILTER_HI", (void*)&tmpconf.filter.hires, UINT8, 0, 3, 1},
{"MEMORY", (void*)&tmpconf.memory, UINT8, 0, 127, 1},
{"CHIPSET", (void*)&tmpconf.chipset, UINT8, 0, 127, 1},
{"FLOPPY_SPD", (void*)&tmpconf.floppy.speed, UINT8, 0, 1, 1},
{"FLOPPY_CNT", (void*)&tmpconf.floppy.drives, UINT8, 0, 4, 1},
{"AR3_DISABLE", (void*)&tmpconf.disable_ar3, UINT8, 0, 1, 1},
{"IDE0_ENABLE", (void*)&tmpconf.enable_ide[0], UINT8, 0, 1, 1},
{"IDE1_ENABLE", (void*)&tmpconf.enable_ide[1], UINT8, 0, 1, 1},
{"SCANLINES", (void*)&tmpconf.scanlines, UINT8, 0, 2, 1},
{"HDD0_ENABLE", (void*)&tmpconf.hardfile[0].enabled, UINT8, 0, 255, 1},
{"HDD0", (void*)tmpconf.hardfile[0].name, STRING, 1, 63, 1},
{"HDD1_ENABLE", (void*)&tmpconf.hardfile[1].enabled, UINT8, 0, 255, 1},
{"HDD1", (void*)tmpconf.hardfile[1].name, STRING, 1, 63, 1},
{"HDD2_ENABLE", (void*)&tmpconf.hardfile[2].enabled, UINT8, 0, 255, 1},
{"HDD2", (void*)tmpconf.hardfile[2].name, STRING, 1, 63, 1},
{"HDD3_ENABLE", (void*)&tmpconf.hardfile[3].enabled, UINT8, 0, 255, 1},
{"HDD3", (void*)tmpconf.hardfile[3].name, STRING, 1, 63, 1},
{"CPU", (void*)&tmpconf.cpu, UINT8, 0, 15, 1},
{"AUTOFIRE", (void*)&tmpconf.autofire, UINT8, 0, 7, 1}
{"KICKSTART", (void*)tmpconf.kickstart, STRING, 1, 79, 1},
{"FILTER_LO", (void*)&tmpconf.filter.lores, UINT8, 0, 3, 1},
{"FILTER_HI", (void*)&tmpconf.filter.hires, UINT8, 0, 3, 1},
{"MEMORY", (void*)&tmpconf.memory, UINT8, 0, 127, 1},
{"CHIPSET", (void*)&tmpconf.chipset, UINT8, 0, 127, 1},
{"FLOPPY_SPD", (void*)&tmpconf.floppy.speed, UINT8, 0, 1, 1},
{"FLOPPY_CNT", (void*)&tmpconf.floppy.drives, UINT8, 0, 4, 1},
{"AR3_DISABLE", (void*)&tmpconf.disable_ar3, UINT8, 0, 1, 1},
{"IDE0_ENABLE", (void*)&tmpconf.enable_ide[0], UINT8, 0, 1, 1},
{"IDE1_ENABLE", (void*)&tmpconf.enable_ide[1], UINT8, 0, 1, 1},
{"SCANLINES", (void*)&tmpconf.scanlines, UINT8, 0, 2, 1},
{"HDD0_ENABLE", (void*)&tmpconf.hardfile[0].enabled, UINT8, 0, 255, 1},
{"HDD0", (void*)tmpconf.hardfile[0].name, STRING, 1, 63, 1},
{"HDD1_ENABLE", (void*)&tmpconf.hardfile[1].enabled, UINT8, 0, 255, 1},
{"HDD1", (void*)tmpconf.hardfile[1].name, STRING, 1, 63, 1},
{"HDD2_ENABLE", (void*)&tmpconf.hardfile[2].enabled, UINT8, 0, 255, 1},
{"HDD2", (void*)tmpconf.hardfile[2].name, STRING, 1, 63, 1},
{"HDD3_ENABLE", (void*)&tmpconf.hardfile[3].enabled, UINT8, 0, 255, 1},
{"HDD3", (void*)tmpconf.hardfile[3].name, STRING, 1, 63, 1},
{"CPU", (void*)&tmpconf.cpu, UINT8, 0, 15, 1},
{"AUTOFIRE", (void*)&tmpconf.autofire, UINT8, 0, 7, 1},
{"AUDIOFILTERMODE", (void*)&tmpconf.features.audiofiltermode, UINT8, 0, 2, 1},
{"POWERLEDOFFSTATE", (void*)&tmpconf.features.powerledoffstate, UINT8, 0, 1, 1}
};
// TODO fix SPIN macros all over the place!
@@ -377,6 +379,8 @@ unsigned char LoadConfiguration(char *filename, int printconfig)
strncpy(config.hardfile[0].name, "HARDFILE", sizeof(config.hardfile[0].name));
strncpy(config.hardfile[1].name, "HARDFILE", sizeof(config.hardfile[1].name));
config.hardfile[1].enabled = 2; // Default is access to entire SD card
config.features.audiofiltermode = 0;
config.features.powerledoffstate = 0;
updatekickstart=true;
BootPrint("Defaults set\n");
}
@@ -558,6 +562,7 @@ static void ApplyConfiguration(char reloadkickstart)
ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines);
ConfigChipset(config.chipset);
ConfigFloppy(config.floppy.drives, config.floppy.speed);
ConfigFeatures(config.features.audiofiltermode, config.features.powerledoffstate);
if(reloadkickstart) {
iprintf("Reloading kickstart ...\r");

View File

@@ -13,6 +13,12 @@ typedef struct
unsigned char drives;
} floppyTYPE;
typedef struct
{
unsigned char audiofiltermode;
unsigned char powerledoffstate;
} featuresTYPE;
typedef struct
{
char kickstart[80];
@@ -27,6 +33,7 @@ typedef struct
hardfileTYPE hardfile[HARDFILES];
unsigned char cpu;
unsigned char autofire;
featuresTYPE features;
} configTYPE;
extern configTYPE config;

94
menu.c
View File

@@ -120,9 +120,11 @@ char *config_autofire_msg[] = {" AUTOFIRE OFF", " AUTOFIRE FAST",
const char *config_cd32pad_msg[] = {"OFF", "ON"};
char *config_button_turbo_msg[] = {"OFF", "FAST", "MEDIUM", "SLOW"};
char *config_button_turbo_choice_msg[] = {"A only", "B only", "A & B"};
const char *config_audio_filter_msg[] = {"switchable", "always off", "always on"};
const char *config_power_led_off_msg[] = {"dim", "off"};
enum HelpText_Message {HELPTEXT_NONE,HELPTEXT_MAIN,HELPTEXT_HARDFILE,HELPTEXT_CHIPSET,HELPTEXT_MEMORY,HELPTEXT_VIDEO};
enum HelpText_Message {HELPTEXT_NONE,HELPTEXT_MAIN,HELPTEXT_HARDFILE,HELPTEXT_CHIPSET,HELPTEXT_MEMORY,HELPTEXT_VIDEO,HELPTEXT_FEATURES};
const char *helptexts[]={
0,
" Welcome to MiST! Use the cursor keys to navigate the menus. Use space bar or enter to select an item. Press Esc or F12 to exit the menus. Joystick emulation on the numeric keypad can be toggled with the numlock key, while pressing Ctrl-Alt-0 (numeric keypad) toggles autofire mode.",
@@ -130,6 +132,7 @@ const char *helptexts[]={
" Minimig's processor core can emulate a 68000 or 68020 processor (though the 68020 mode is still experimental.) If you're running software built for 68000, there's no advantage to using the 68020 mode, since the 68000 emulation runs just as fast.",
" Minimig can make use of up to 2 megabytes of Chip RAM, up to 1.5 megabytes of Slow RAM (A500 Trapdoor RAM), and up to 8 megabytes (68000/68010) / 24 megabytes (68020) of true Fast RAM. To use the HRTmon feature you will need a file on the SD card named hrtmon.rom.",
" Minimig's video features include a blur filter, to simulate the poorer picture quality on older monitors, and also scanline generation to simulate the appearance of a screen with low vertical resolution.",
" Minimig can set the audio filter to switchable with power LED (A500r5+), always off or always on (A1000, A500r3). The power LED off-state can be configured to dim (A500r6+) or off (A1000, A500r3/5).",
0
};
@@ -2240,7 +2243,7 @@ void HandleUI(void)
/******************************************************************/
case MENU_MAIN2_1 :
helptext=helptexts[HELPTEXT_MAIN];
menumask=0x3f;
menumask=0x7f;
OsdSetTitle("Settings",OSD_ARROW_LEFT|OSD_ARROW_RIGHT);
OsdWrite(0, " load configuration", menusub == 0,0);
OsdWrite(1, " save configuration", menusub == 1,0);
@@ -2248,8 +2251,8 @@ void HandleUI(void)
OsdWrite(3, " chipset settings \x16", menusub == 2,0);
OsdWrite(4, " memory settings \x16", menusub == 3,0);
OsdWrite(5, " video settings \x16", menusub == 4,0);
OsdWrite(6, "", 0,0);
OsdWrite(7, STD_EXIT, menusub == 5,0);
OsdWrite(6, " features settings \x16", menusub == 5,0);
OsdWrite(7, STD_EXIT, menusub == 6,0);
parentstate = menustate;
menustate = MENU_MAIN2_2;
break;
@@ -2286,6 +2289,11 @@ void HandleUI(void)
menusub = 0;
}
else if (menusub == 5)
{
menustate = MENU_SETTINGS_FEATURES1;
menusub = 0;
}
else if (menusub == 6)
menustate = MENU_NONE1;
}
else if (left)
@@ -2745,7 +2753,7 @@ void HandleUI(void)
}
else if (left)
{
menustate = MENU_SETTINGS_VIDEO1;
menustate = MENU_SETTINGS_FEATURES1;
menusub = 0;
}
break;
@@ -3251,7 +3259,7 @@ void HandleUI(void)
}
else if (right)
{
menustate = MENU_SETTINGS_CHIPSET1;
menustate = MENU_SETTINGS_FEATURES1;
menusub = 0;
}
else if (left)
@@ -3261,10 +3269,76 @@ void HandleUI(void)
}
break;
/******************************************************************/
/* rom file selected menu */
/******************************************************************/
case MENU_ROMFILE_SELECTED :
/******************************************************************/
/* features settings menu */
/******************************************************************/
case MENU_SETTINGS_FEATURES1 :
menumask=0x07;
parentstate=menustate;
helptext=helptexts[HELPTEXT_FEATURES];
OsdSetTitle("Features",OSD_ARROW_LEFT|OSD_ARROW_RIGHT);
OsdWrite(0, "", 0,0);
strcpy(s, " Audio Filter : ");
strcat(s, config_audio_filter_msg[(config.features.audiofiltermode & 0x03) % 3]);
OsdWrite(1, s, menusub == 0,0);
strcpy(s, " Power LED off : ");
strcat(s, config_power_led_off_msg[config.features.powerledoffstate & 0x01]);
OsdWrite(2, s, menusub == 1,0);
OsdWrite(3, "", 0,0);
OsdWrite(4, "", 0,0);
OsdWrite(5, "", 0,0);
OsdWrite(6, "", 0,0);
OsdWrite(7, STD_EXIT, menusub == 2,0);
menustate = MENU_SETTINGS_FEATURES2;
break;
case MENU_SETTINGS_FEATURES2 :
if (select)
{
if (menusub == 0)
{
config.features.audiofiltermode++;
if (config.features.audiofiltermode > 2)
config.features.audiofiltermode = 0;
menustate = MENU_SETTINGS_FEATURES1;
ConfigFeatures(config.features.audiofiltermode, config.features.powerledoffstate);
}
else if (menusub == 1)
{
config.features.powerledoffstate ^= 1;
menustate = MENU_SETTINGS_FEATURES1;
ConfigFeatures(config.features.audiofiltermode, config.features.powerledoffstate);
}
else if (menusub == 2)
{
menustate = MENU_MAIN2_1;
menusub = 5;
}
}
if (menu)
{
menustate = MENU_MAIN2_1;
menusub = 5;
}
else if (right)
{
menustate = MENU_SETTINGS_CHIPSET1;
menusub = 0;
}
else if (left)
{
menustate = MENU_SETTINGS_VIDEO1;
menusub = 0;
}
break;
/******************************************************************/
/* rom file selected menu */
/******************************************************************/
case MENU_ROMFILE_SELECTED :
menusub = 1;
menustate=MENU_ROMFILE_SELECTED1;
// no break intended

2
menu.h
View File

@@ -28,6 +28,8 @@ enum MENU
MENU_SETTINGS_MEMORY2,
MENU_SETTINGS_CHIPSET1,
MENU_SETTINGS_CHIPSET2,
MENU_SETTINGS_FEATURES1,
MENU_SETTINGS_FEATURES2,
MENU_SETTINGS_DRIVES1,
MENU_SETTINGS_DRIVES2,
MENU_SETTINGS_HARDFILE1,

6
osd.c
View File

@@ -580,6 +580,12 @@ void ConfigAutofire(unsigned char autofire)
spi_osd_cmd8(OSD_CMD_JOY, autofire & 0x07);
}
void ConfigFeatures(unsigned char audiofiltermode, unsigned char powerledoffstate)
{
if(!minimig_v1())
spi_osd_cmd8(OSD_CMD_FEATURES, ((powerledoffstate & 0x01) << 2) | (audiofiltermode & 0x03));
}
static unsigned char disable_menu = 0;
// get key status

2
osd.h
View File

@@ -41,6 +41,7 @@
#define OSD_CMD_HDD0 0x54
#define OSD_CMD_HDD1 0x58
#define OSD_CMD_JOY 0x64
#define OSD_CMD_FEATURES 0x74
#define OSD_CMD_OSD_WR 0x0c
#define OSD_CMD_WR 0x1c
#define OSD_CMD_VERSION 0x88
@@ -121,6 +122,7 @@ void ConfigChipset(unsigned char chipset);
void ConfigFloppy(unsigned char drives, unsigned char speed);
void ConfigIDE(unsigned char gayle, unsigned char master, unsigned char slave);
void ConfigAutofire(unsigned char autofire);
void ConfigFeatures(unsigned char audiofiltermode, unsigned char powerledoffstate);
unsigned char OsdGetCtrl(void);
void OsdDisableMenuButton(unsigned char disable);
unsigned char GetASCIIKey(unsigned char c);