diff --git a/menu.cpp b/menu.cpp index 7061db5..5843adf 100644 --- a/menu.cpp +++ b/menu.cpp @@ -152,9 +152,9 @@ const char *config_tos_mem[] = { "512 kB", "1 MB", "2 MB", "4 MB", "8 MB", "14 M const char *config_tos_wrprot[] = { "none", "A:", "B:", "A: and B:" }; const char *config_tos_usb[] = { "none", "control", "debug", "serial", "parallel", "midi" }; -const char *config_memory_chip_msg[] = { "512kb", "1mb", "1.5mb", "2mb" }; -const char *config_memory_slow_msg[] = { "none", "512kb", "1mb", "1.5mb" }; -const char *config_memory_fast_msg[] = { "none", "2mb", "4mb","24mb","24mb" }; +const char *config_memory_chip_msg[] = { "512K", "1M", "1.5M", "2M" }; +const char *config_memory_slow_msg[] = { "none", "512K", "1M", "1.5M" }; +const char *config_memory_fast_msg[] = { "none", "2M", "4M", "24M" }; const char *config_scanlines_msg[] = { "off", "dim", "black" }; const char *config_ar_msg[] = { "4:3", "16:9" }; @@ -2301,7 +2301,7 @@ void HandleUI(void) // We also print a help text in place of the last drive if it's inactive. for (int i = 0; i < 4; i++) { - if (i == config.floppy.drives + 1) + if (i == minimig_config.floppy.drives + 1) OsdWrite(i+1, " KP +/- to add/remove drives", 0, 1); else { @@ -2336,16 +2336,16 @@ void HandleUI(void) strcat(s, "* no disk *"); } } - else if (i <= config.floppy.drives) + else if (i <= minimig_config.floppy.drives) { strcat(s, "* active after reset *"); } else strcpy(s, ""); - OsdWrite(i+1, s, menusub == (uint32_t)i, (i>drives) || (i>config.floppy.drives)); + OsdWrite(i+1, s, menusub == (uint32_t)i, (i>drives) || (i>minimig_config.floppy.drives)); } } - sprintf(s, " Floppy disk turbo : %s", config.floppy.speed ? "on" : "off"); + sprintf(s, " Floppy disk turbo : %s", minimig_config.floppy.speed ? "on" : "off"); OsdWrite(5, s, menusub == 4, 0); OsdWrite(6, "", 0, 0); @@ -2368,16 +2368,16 @@ void HandleUI(void) case MENU_MAIN2: if (menu) menustate = MENU_NONE1; - else if (plus && (config.floppy.drives<3)) + else if (plus && (minimig_config.floppy.drives<3)) { - config.floppy.drives++; - ConfigFloppy(config.floppy.drives, config.floppy.speed); + minimig_config.floppy.drives++; + ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed); menustate = MENU_MAIN1; } - else if (minus && (config.floppy.drives>0)) + else if (minus && (minimig_config.floppy.drives>0)) { - config.floppy.drives--; - ConfigFloppy(config.floppy.drives, config.floppy.speed); + minimig_config.floppy.drives--; + ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed); menustate = MENU_MAIN1; } else if (select) @@ -2398,8 +2398,8 @@ void HandleUI(void) } else if (menusub == 4) // Toggle floppy turbo { - config.floppy.speed ^= 1; - ConfigFloppy(config.floppy.drives, config.floppy.speed); + minimig_config.floppy.speed ^= 1; + ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed); menustate = MENU_MAIN1; } else if (menusub == 5) // Go to harddrives page. @@ -2463,27 +2463,42 @@ void HandleUI(void) case MENU_LOADCONFIG_1: helptext = helptexts[HELPTEXT_NONE]; - if (parentstate != menustate) - { - menumask = 0x400; - for (int i = 0; i < 10; i++) if (GetConfigDisplayName(i)) menumask |= 1<", menusub == i); + } + + if (!i) + { + OsdWrite(m++, "", 0, 0); + m = 4; + OsdWrite(m++, " Other configs:"); + } } - for (int i = 13; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0); + while (m < OsdGetSize() - 1) OsdWrite(m++); OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 10, 0); menustate = MENU_SAVECONFIG_2; @@ -2719,7 +2753,29 @@ void HandleUI(void) case MENU_SAVECONFIG_2: if (select) { - if (menusub<10) SaveConfiguration(menusub); + sprintf(minimig_config.info, "%s/%s/%s%s %s+%s%s%s%s\n", + config_cpu_msg[minimig_config.cpu & 0x03] + 2, + config_chipset_msg[(minimig_config.chipset >> 2) & 7], + minimig_config.chipset & CONFIG_NTSC ? "N" : "P", + (minimig_config.enable_ide && (minimig_config.hardfile[0].enabled || + minimig_config.hardfile[1].enabled || + minimig_config.hardfile[2].enabled || + minimig_config.hardfile[3].enabled)) ? "/HD" : "", + config_memory_chip_msg[minimig_config.memory & 0x03], + config_memory_fast_msg[(minimig_config.memory >> 4) & 0x03], + ((minimig_config.memory >> 2) & 0x03) ? "+" : "", + ((minimig_config.memory >> 2) & 0x03) ? config_memory_slow_msg[(minimig_config.memory >> 2) & 0x03] : "", + (minimig_config.memory & 0x40) ? " HRT" : "" + ); + + char *p = strrchr(minimig_config.kickstart, '/'); + if (!p) p = minimig_config.kickstart; + else p++; + + strncat(minimig_config.info, p, sizeof(minimig_config.info) - strlen(minimig_config.info) - 1); + minimig_config.info[sizeof(minimig_config.info) - 1] = 0; + + if (menusub<10) minimig_SaveCfg(menusub); menustate = MENU_MAIN1; menusub = 9; } @@ -2741,24 +2797,24 @@ void HandleUI(void) OsdWrite(0, "", 0, 0); strcpy(s, " CPU : "); - strcat(s, config_cpu_msg[config.cpu & 0x03]); + strcat(s, config_cpu_msg[minimig_config.cpu & 0x03]); OsdWrite(1, s, menusub == 0, 0); strcpy(s, " Turbo : "); - strcat(s, config_turbo_msg[(config.cpu >> 2) & 0x03]); + strcat(s, config_turbo_msg[(minimig_config.cpu >> 2) & 0x03]); OsdWrite(2, s, menusub == 1, 0); OsdWrite(3, "", 0, 0); strcpy(s, " Video : "); - strcat(s, config.chipset & CONFIG_NTSC ? "NTSC" : "PAL"); + strcat(s, minimig_config.chipset & CONFIG_NTSC ? "NTSC" : "PAL"); OsdWrite(4, s, menusub == 2, 0); strcpy(s, " Chipset : "); - strcat(s, config_chipset_msg[(config.chipset >> 2) & 7]); + strcat(s, config_chipset_msg[(minimig_config.chipset >> 2) & 7]); OsdWrite(5, s, menusub == 3, 0); OsdWrite(6, "", 0, 0); strcpy(s, " CD32Pad : "); - strcat(s, config_cd32pad_msg[(config.autofire >> 2) & 1]); + strcat(s, config_cd32pad_msg[(minimig_config.autofire >> 2) & 1]); OsdWrite(7, s, menusub == 4, 0); strcpy(s, " Joy Swap : "); - strcat(s, (config.autofire & 0x8)? "ON" : "OFF"); + strcat(s, (minimig_config.autofire & 0x8)? "ON" : "OFF"); OsdWrite(8, s, menusub == 5, 0); for (int i = 9; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0); OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 6, 0); @@ -2785,57 +2841,57 @@ void HandleUI(void) if (menusub == 0) { menustate = MENU_SETTINGS_CHIPSET1; - int _config_cpu = config.cpu & 0x3; + int _config_cpu = minimig_config.cpu & 0x3; _config_cpu += 1; if (_config_cpu == 0x02) _config_cpu += 1; - config.cpu = (config.cpu & 0xfc) | (_config_cpu & 0x3); - ConfigCPU(config.cpu); + minimig_config.cpu = (minimig_config.cpu & 0xfc) | (_config_cpu & 0x3); + ConfigCPU(minimig_config.cpu); } else if (menusub == 1) { menustate = MENU_SETTINGS_CHIPSET1; - int _config_turbo = (config.cpu >> 2) & 0x3; + int _config_turbo = (minimig_config.cpu >> 2) & 0x3; _config_turbo += 1; - config.cpu = (config.cpu & 0x3) | ((_config_turbo & 0x3) << 2); - ConfigCPU(config.cpu); + minimig_config.cpu = (minimig_config.cpu & 0x3) | ((_config_turbo & 0x3) << 2); + ConfigCPU(minimig_config.cpu); } else if (menusub == 2) { - config.chipset ^= CONFIG_NTSC; + minimig_config.chipset ^= CONFIG_NTSC; menustate = MENU_SETTINGS_CHIPSET1; - ConfigChipset(config.chipset); + ConfigChipset(minimig_config.chipset); } else if (menusub == 3) { - switch (config.chipset & 0x1c) { + switch (minimig_config.chipset & 0x1c) { case 0: - config.chipset = (config.chipset & 3) | CONFIG_A1000; + minimig_config.chipset = (minimig_config.chipset & 3) | CONFIG_A1000; break; case CONFIG_A1000: - config.chipset = (config.chipset & 3) | CONFIG_ECS; + minimig_config.chipset = (minimig_config.chipset & 3) | CONFIG_ECS; break; case CONFIG_ECS: - config.chipset = (config.chipset & 3) | CONFIG_AGA | CONFIG_ECS; + minimig_config.chipset = (minimig_config.chipset & 3) | CONFIG_AGA | CONFIG_ECS; break; case (CONFIG_AGA | CONFIG_ECS) : - config.chipset = (config.chipset & 3) | 0; + minimig_config.chipset = (minimig_config.chipset & 3) | 0; break; } menustate = MENU_SETTINGS_CHIPSET1; - ConfigChipset(config.chipset); + ConfigChipset(minimig_config.chipset); } else if (menusub == 4) { - config.autofire ^= 0x4; + minimig_config.autofire ^= 0x4; menustate = MENU_SETTINGS_CHIPSET1; - ConfigAutofire(config.autofire, 0x4); + ConfigAutofire(minimig_config.autofire, 0x4); } else if (menusub == 5) { - config.autofire ^= 0x8; + minimig_config.autofire ^= 0x8; menustate = MENU_SETTINGS_CHIPSET1; - ConfigAutofire(config.autofire, 0x8); + ConfigAutofire(minimig_config.autofire, 0x8); } else if (menusub == 6) { @@ -2873,23 +2929,23 @@ void HandleUI(void) OsdWrite(0, "", 0, 0); strcpy(s, " CHIP : "); - strcat(s, config_memory_chip_msg[config.memory & 0x03]); + strcat(s, config_memory_chip_msg[minimig_config.memory & 0x03]); OsdWrite(1, s, menusub == 0, 0); - strcpy(s, " SLOW : "); - strcat(s, config_memory_slow_msg[config.memory >> 2 & 0x03]); - OsdWrite(2, s, menusub == 1, 0); strcpy(s, " FAST : "); - strcat(s, config_memory_fast_msg[config.memory >> 4 & 0x03]); + strcat(s, config_memory_fast_msg[(minimig_config.memory >> 4) & 0x03]); + OsdWrite(2, s, menusub == 1, 0); + strcpy(s, " SLOW : "); + strcat(s, config_memory_slow_msg[(minimig_config.memory >> 2) & 0x03]); OsdWrite(3, s, menusub == 2, 0); OsdWrite(4, "", 0, 0); strcpy(s, " ROM : "); - strncat(s, config.kickstart, 24); + strncat(s, minimig_config.kickstart, 24); OsdWrite(5, s, menusub == 3, 0); strcpy(s, " HRTmon : "); - strcat(s, (config.memory & 0x40) ? "enabled " : "disabled"); + strcat(s, (minimig_config.memory & 0x40) ? "enabled " : "disabled"); OsdWrite(6, s, menusub == 4, 0); for (int i = 7; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0); @@ -2903,17 +2959,17 @@ void HandleUI(void) { if (menusub == 0) { - config.memory = ((config.memory + 1) & 0x03) | (config.memory & ~0x03); + minimig_config.memory = ((minimig_config.memory + 1) & 0x03) | (minimig_config.memory & ~0x03); menustate = MENU_SETTINGS_MEMORY1; } else if (menusub == 1) { - config.memory = ((config.memory + 4) & 0x0C) | (config.memory & ~0x0C); + minimig_config.memory = ((minimig_config.memory + 0x10) & 0x30) | (minimig_config.memory & ~0x30); menustate = MENU_SETTINGS_MEMORY1; } else if (menusub == 2) { - config.memory = ((config.memory + 0x10) & 0x30) | (config.memory & ~0x30); + minimig_config.memory = ((minimig_config.memory + 4) & 0x0C) | (minimig_config.memory & ~0x0C); menustate = MENU_SETTINGS_MEMORY1; } else if (menusub == 3) @@ -2922,7 +2978,7 @@ void HandleUI(void) } else if (menusub == 4) { - config.memory ^= 0x40; + minimig_config.memory ^= 0x40; menustate = MENU_SETTINGS_MEMORY1; } else if (menusub == 5) @@ -2968,10 +3024,10 @@ void HandleUI(void) parentstate = menustate; menumask = 0x201; // b001000000001 - On/off & exit enabled by default... - if (config.enable_ide) menumask |= 0xAA; // b010101010 - HD0/1/2/3 type + if (minimig_config.enable_ide) menumask |= 0xAA; // b010101010 - HD0/1/2/3 type OsdWrite(0, "", 0, 0); strcpy(s, " A600/A1200 IDE : "); - strcat(s, config.enable_ide ? "On " : "Off"); + strcat(s, minimig_config.enable_ide ? "On " : "Off"); OsdWrite(1, s, menusub == 0, 0); OsdWrite(2, "", 0, 0); @@ -2981,18 +3037,18 @@ void HandleUI(void) { strcpy(s, (i & 2) ? " Secondary " : " Primary "); strcat(s, (i & 1) ? "Slave: " : "Master: "); - strcat(s, config.hardfile[i].enabled ? "Enabled" : "Disabled"); - OsdWrite(n++, s, config.enable_ide ? (menusub == m++) : 0, config.enable_ide == 0); - if (config.hardfile[i].filename[0]) + strcat(s, minimig_config.hardfile[i].enabled ? "Enabled" : "Disabled"); + OsdWrite(n++, s, minimig_config.enable_ide ? (menusub == m++) : 0, minimig_config.enable_ide == 0); + if (minimig_config.hardfile[i].filename[0]) { strcpy(s, " "); - strncpy(&s[7], config.hardfile[i].filename, 21); + strncpy(&s[7], minimig_config.hardfile[i].filename, 21); } else { strcpy(s, " ** not selected **"); } - enable = config.enable_ide && config.hardfile[i].enabled; + enable = minimig_config.enable_ide && minimig_config.hardfile[i].enabled; if (enable) menumask |= t; // Make hardfile selectable OsdWrite(n++, s, menusub == m++, enable == 0); t <<= 2; @@ -3009,7 +3065,7 @@ void HandleUI(void) { if (menusub == 0) { - config.enable_ide = (config.enable_ide == 0); + minimig_config.enable_ide = (minimig_config.enable_ide == 0); menustate = MENU_SETTINGS_HARDFILE1; } else if (menusub < 9) @@ -3017,7 +3073,7 @@ void HandleUI(void) if(menusub&1) { int num = (menusub - 1) / 2; - config.hardfile[num].enabled = config.hardfile[num].enabled ? 0 : 1; + minimig_config.hardfile[num].enabled = minimig_config.hardfile[num].enabled ? 0 : 1; menustate = MENU_SETTINGS_HARDFILE1; } else @@ -3056,10 +3112,10 @@ void HandleUI(void) { int num = (menusub - 2) / 2; uint len = strlen(SelectedPath); - if (len > sizeof(config.hardfile[num].filename) - 1) len = sizeof(config.hardfile[num].filename) - 1; - if(len) memcpy(config.hardfile[num].filename, SelectedPath, len); - config.hardfile[num].filename[len] = 0; - menustate = checkHDF(config.hardfile[num].filename, &rdb) ? MENU_SETTINGS_HARDFILE1 : MENU_HARDFILE_SELECTED2; + if (len > sizeof(minimig_config.hardfile[num].filename) - 1) len = sizeof(minimig_config.hardfile[num].filename) - 1; + if(len) memcpy(minimig_config.hardfile[num].filename, SelectedPath, len); + minimig_config.hardfile[num].filename[len] = 0; + menustate = checkHDF(minimig_config.hardfile[num].filename, &rdb) ? MENU_SETTINGS_HARDFILE1 : MENU_HARDFILE_SELECTED2; } break; @@ -3124,17 +3180,17 @@ void HandleUI(void) OsdSetTitle("Video", OSD_ARROW_LEFT | OSD_ARROW_RIGHT); OsdWrite(0, "", 0, 0); strcpy(s, " Scanlines : "); - strcat(s, config_scanlines_msg[config.scanlines & 0x3]); + strcat(s, config_scanlines_msg[minimig_config.scanlines & 0x3]); OsdWrite(1, s, menusub == 0, 0); strcpy(s, " Video area by : "); - strcat(s, config_blank_msg[(config.scanlines >> 6) & 3]); + strcat(s, config_blank_msg[(minimig_config.scanlines >> 6) & 3]); OsdWrite(2, s, menusub == 1, 0); strcpy(s, " Aspect Ratio : "); - strcat(s, config_ar_msg[(config.scanlines >> 4) & 1]); + strcat(s, config_ar_msg[(minimig_config.scanlines >> 4) & 1]); OsdWrite(3, s, menusub == 2, 0); OsdWrite(4, "", 0, 0); strcpy(s, " Stereo mix : "); - strcat(s, config_stereo_msg[config.audio & 3]); + strcat(s, config_stereo_msg[minimig_config.audio & 3]); OsdWrite(5, s, menusub == 3, 0); OsdWrite(6, "", 0, 0); OsdWrite(7, "", 0, 0); @@ -3155,30 +3211,30 @@ void HandleUI(void) { if (menusub == 0) { - config.scanlines = ((config.scanlines + 1) & 0x03) | (config.scanlines & 0xfc); - if ((config.scanlines & 0x03) > 2) config.scanlines = config.scanlines & 0xfc; + minimig_config.scanlines = ((minimig_config.scanlines + 1) & 0x03) | (minimig_config.scanlines & 0xfc); + if ((minimig_config.scanlines & 0x03) > 2) minimig_config.scanlines = minimig_config.scanlines & 0xfc; menustate = MENU_SETTINGS_VIDEO1; - ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); + ConfigVideo(minimig_config.filter.hires, minimig_config.filter.lores, minimig_config.scanlines); } else if (menusub == 1) { - config.scanlines &= ~0x80; - config.scanlines ^= 0x40; + minimig_config.scanlines &= ~0x80; + minimig_config.scanlines ^= 0x40; menustate = MENU_SETTINGS_VIDEO1; - ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); + ConfigVideo(minimig_config.filter.hires, minimig_config.filter.lores, minimig_config.scanlines); } else if (menusub == 2) { - config.scanlines &= ~0x20; // reserved for auto-ar - config.scanlines ^= 0x10; + minimig_config.scanlines &= ~0x20; // reserved for auto-ar + minimig_config.scanlines ^= 0x10; menustate = MENU_SETTINGS_VIDEO1; - ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); + ConfigVideo(minimig_config.filter.hires, minimig_config.filter.lores, minimig_config.scanlines); } else if (menusub == 3) { - config.audio = (config.audio + 1) & 3; + minimig_config.audio = (minimig_config.audio + 1) & 3; menustate = MENU_SETTINGS_VIDEO1; - ConfigAudio(config.audio); + ConfigAudio(minimig_config.audio); } else if (menusub == 4) { diff --git a/support/minimig/minimig_boot.cpp b/support/minimig/minimig_boot.cpp index 4ef3d01..7245d33 100644 --- a/support/minimig/minimig_boot.cpp +++ b/support/minimig/minimig_boot.cpp @@ -444,8 +444,8 @@ void BootInit() BootPrintEx(" "); } - config.kickstart[0] = 0; - LoadConfiguration(0); + minimig_config.kickstart[0] = 0; + minimig_LoadCfg(0); } void BootPrintEx(const char * str) diff --git a/support/minimig/minimig_config.cpp b/support/minimig/minimig_config.cpp index af8c11d..d572879 100644 --- a/support/minimig/minimig_config.cpp +++ b/support/minimig/minimig_config.cpp @@ -7,36 +7,36 @@ #include #include "../../hardware.h" -#include "minimig_boot.h" #include "../../file_io.h" #include "../../osd.h" -#include "minimig_fdd.h" -#include "minimig_hdd.h" #include "../../menu.h" -#include "minimig_config.h" #include "../../user_io.h" #include "../../input.h" +#include "minimig_boot.h" +#include "minimig_fdd.h" +#include "minimig_hdd.h" +#include "minimig_config.h" typedef struct { - char id[8]; - unsigned long version; - char kickstart[1024]; - filterTYPE filter; - unsigned char memory; - unsigned char chipset; - floppyTYPE floppy; - unsigned char disable_ar3; - unsigned char enable_ide; - unsigned char scanlines; - unsigned char audio; - hardfileTYPE hardfile[2]; - unsigned char cpu; - unsigned char autofire; + char id[8]; + unsigned long version; + char kickstart[1024]; + mm_filterTYPE filter; + unsigned char memory; + unsigned char chipset; + mm_floppyTYPE floppy; + unsigned char disable_ar3; + unsigned char enable_ide; + unsigned char scanlines; + unsigned char audio; + mm_hardfileTYPE hardfile[2]; + unsigned char cpu; + unsigned char autofire; } configTYPE_old; -configTYPE config = { }; -unsigned char romkey[3072]; +mm_configTYPE minimig_config = { }; +static unsigned char romkey[3072]; static void SendFileV2(fileTYPE* file, unsigned char* key, int keysize, int address, int size) { @@ -194,11 +194,11 @@ static char UploadActionReplay() spi8((data >> 0) & 0xff); data = 0x01; // key, 1 byte spi8((data >> 0) & 0xff); - data = config.enable_ide ? 1 : 0; // ide, 1 byte + data = minimig_config.enable_ide ? 1 : 0; // ide, 1 byte spi8((data >> 0) & 0xff); data = 0x01; // a1200, 1 byte spi8((data >> 0) & 0xff); - data = config.chipset&CONFIG_AGA ? 1 : 0; // aga, 1 byte + data = minimig_config.chipset&CONFIG_AGA ? 1 : 0; // aga, 1 byte spi8((data >> 0) & 0xff); data = 0x01; // insert, 1 byte spi8((data >> 0) & 0xff); @@ -208,7 +208,7 @@ static char UploadActionReplay() spi8((data >> 0) & 0xff); data = 0x00; // cd32, 1 byte spi8((data >> 0) & 0xff); - data = config.chipset&CONFIG_NTSC ? 1 : 0; // screenmode, 1 byte + data = minimig_config.chipset&CONFIG_NTSC ? 1 : 0; // screenmode, 1 byte spi8((data >> 0) & 0xff); data = 1; // novbr, 1 byte spi8((data >> 0) & 0xff); @@ -219,7 +219,7 @@ static char UploadActionReplay() DisableOsd(); adr = 0xa10000 + 68; spi_osd_cmd32le_cont(OSD_CMD_WR, adr); - data = ((config.memory & 0x3) + 1) * 512 * 1024; // maxchip, 4 bytes TODO is this correct? + data = ((minimig_config.memory & 0x3) + 1) * 512 * 1024; // maxchip, 4 bytes TODO is this correct? spi8((data >> 24) & 0xff); spi8((data >> 16) & 0xff); spi8((data >> 8) & 0xff); spi8((data >> 0) & 0xff); DisableOsd(); @@ -234,60 +234,30 @@ static char UploadActionReplay() return(0); } -static char* GetConfigurationName(int num) +static char* GetConfigurationName(int num, int chk) { - static char path[128]; - sprintf(path, "%s/%s", getRootDir(), CONFIG_DIR); + static char name[128]; + if (num) sprintf(name, CONFIG_DIR "/minimig%d.cfg", num); + else sprintf(name, CONFIG_DIR "/minimig.cfg"); - DIR *d; - struct dirent *dir; - d = opendir(path); - if (d) - { - if(num) sprintf(path, "minimig%d", num); - else sprintf(path, "minimig.cfg"); - - while ((dir = readdir(d)) != NULL) - { - int len = strlen(dir->d_name); - if (len>10 && !strncasecmp(dir->d_name, path, strlen(path)) && !strcasecmp(dir->d_name+len-4, ".cfg")) - { - closedir(d); - strcpy(path, dir->d_name); - return path; - } - } - closedir(d); - } - - return NULL; + if (chk && !S_ISREG(getFileType(name))) return 0; + return name+strlen(CONFIG_DIR)+1; } -unsigned char SaveConfiguration(int num) +int minimig_SaveCfg(int num) { - const char *filename = GetConfigurationName(num); - if (!filename) - { - static char name[32]; - if (num) sprintf(name, "minimig%d.cfg", num); - else sprintf(name, "minimig.cfg"); - - filename = name; - } - - return FileSaveConfig(filename, &config, sizeof(config)); + return FileSaveConfig(GetConfigurationName(num, 0), &minimig_config, sizeof(minimig_config)); } -const char* GetConfigDisplayName(int num) +const char* minimig_GetCfgInfo(int num) { - char *filename = GetConfigurationName(num); + char *filename = GetConfigurationName(num, 1); if (!filename) return NULL; - filename[strlen(filename) - 4] = 0; - char *p = strchr(filename, '_'); - - if (p) return p+1; + static mm_configTYPE tmpconf; + memset(&tmpconf, 0, sizeof(tmpconf)); + if (FileLoadConfig(filename, &tmpconf, sizeof(tmpconf))) return tmpconf.info; return ""; } @@ -297,57 +267,57 @@ static void ApplyConfiguration(char reloadkickstart) if (force_reload_kickstart) reloadkickstart = 1; force_reload_kickstart = 0; - ConfigCPU(config.cpu); + ConfigCPU(minimig_config.cpu); if (!reloadkickstart) { - ConfigChipset(config.chipset); - ConfigFloppy(config.floppy.drives, config.floppy.speed); + ConfigChipset(minimig_config.chipset); + ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed); } - printf("CPU clock : %s\n", config.chipset & 0x01 ? "turbo" : "normal"); - printf("Chip RAM size : %s\n", config_memory_chip_msg[config.memory & 0x03]); - printf("Slow RAM size : %s\n", config_memory_slow_msg[config.memory >> 2 & 0x03]); - printf("Fast RAM size : %s\n", config_memory_fast_msg[config.memory >> 4 & 0x03]); + printf("CPU clock : %s\n", minimig_config.chipset & 0x01 ? "turbo" : "normal"); + printf("Chip RAM size : %s\n", config_memory_chip_msg[minimig_config.memory & 0x03]); + printf("Slow RAM size : %s\n", config_memory_slow_msg[minimig_config.memory >> 2 & 0x03]); + printf("Fast RAM size : %s\n", config_memory_fast_msg[minimig_config.memory >> 4 & 0x03]); - printf("Floppy drives : %u\n", config.floppy.drives + 1); - printf("Floppy speed : %s\n", config.floppy.speed ? "fast" : "normal"); + printf("Floppy drives : %u\n", minimig_config.floppy.drives + 1); + printf("Floppy speed : %s\n", minimig_config.floppy.speed ? "fast" : "normal"); printf("\n"); - printf("\nIDE state: %s.\n", config.enable_ide ? "enabled" : "disabled"); - if (config.enable_ide) + printf("\nIDE state: %s.\n", minimig_config.enable_ide ? "enabled" : "disabled"); + if (minimig_config.enable_ide) { - printf("Primary Master HDD is %s.\n", config.hardfile[0].enabled ? "enabled" : "disabled"); - printf("Primary Slave HDD is %s.\n", config.hardfile[1].enabled ? "enabled" : "disabled"); - printf("Secondary Master HDD is %s.\n", config.hardfile[2].enabled ? "enabled" : "disabled"); - printf("Secondary Slave HDD is %s.\n", config.hardfile[3].enabled ? "enabled" : "disabled"); + printf("Primary Master HDD is %s.\n", minimig_config.hardfile[0].enabled ? "enabled" : "disabled"); + printf("Primary Slave HDD is %s.\n", minimig_config.hardfile[1].enabled ? "enabled" : "disabled"); + printf("Secondary Master HDD is %s.\n", minimig_config.hardfile[2].enabled ? "enabled" : "disabled"); + printf("Secondary Slave HDD is %s.\n", minimig_config.hardfile[3].enabled ? "enabled" : "disabled"); } rstval = SPI_CPU_HLT; spi_osd_cmd8(OSD_CMD_RST, rstval); - spi_osd_cmd8(OSD_CMD_HDD, (config.enable_ide ? 1 : 0) | (OpenHardfile(0) ? 2 : 0) | (OpenHardfile(1) ? 4 : 0) | (OpenHardfile(2) ? 8 : 0) | (OpenHardfile(3) ? 16 : 0)); + spi_osd_cmd8(OSD_CMD_HDD, (minimig_config.enable_ide ? 1 : 0) | (OpenHardfile(0) ? 2 : 0) | (OpenHardfile(1) ? 4 : 0) | (OpenHardfile(2) ? 8 : 0) | (OpenHardfile(3) ? 16 : 0)); - ConfigMemory(config.memory); - ConfigCPU(config.cpu); + ConfigMemory(minimig_config.memory); + ConfigCPU(minimig_config.cpu); - ConfigChipset(config.chipset); - ConfigFloppy(config.floppy.drives, config.floppy.speed); + ConfigChipset(minimig_config.chipset); + ConfigFloppy(minimig_config.floppy.drives, minimig_config.floppy.speed); - if (config.memory & 0x40) UploadActionReplay(); + if (minimig_config.memory & 0x40) UploadActionReplay(); if (reloadkickstart) { printf("Reloading kickstart ...\n"); rstval |= (SPI_RST_CPU | SPI_CPU_HLT); spi_osd_cmd8(OSD_CMD_RST, rstval); - if (!UploadKickstart(config.kickstart)) + if (!UploadKickstart(minimig_config.kickstart)) { - strcpy(config.kickstart, "Amiga/KICK.ROM"); - if (!UploadKickstart(config.kickstart)) + strcpy(minimig_config.kickstart, "Amiga/KICK.ROM"); + if (!UploadKickstart(minimig_config.kickstart)) { - strcpy(config.kickstart, "KICK.ROM"); - if (!UploadKickstart(config.kickstart)) + strcpy(minimig_config.kickstart, "KICK.ROM"); + if (!UploadKickstart(minimig_config.kickstart)) { BootPrintEx("No Kickstart loaded. Press F12 for settings."); BootPrintEx("** Halted! **"); @@ -368,18 +338,18 @@ static void ApplyConfiguration(char reloadkickstart) rstval = 0; spi_osd_cmd8(OSD_CMD_RST, rstval); - ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); - ConfigAudio(config.audio); - ConfigAutofire(config.autofire, 0xC); + ConfigVideo(minimig_config.filter.hires, minimig_config.filter.lores, minimig_config.scanlines); + ConfigAudio(minimig_config.audio); + ConfigAutofire(minimig_config.autofire, 0xC); } -unsigned char LoadConfiguration(int num) +int minimig_LoadCfg(int num) { static const char config_id[] = "MNMGCFG0"; char updatekickstart = 0; - char result = 0; + int result = 0; - const char *filename = GetConfigurationName(num); + const char *filename = GetConfigurationName(num, 1); // load configuration data int size; @@ -387,21 +357,21 @@ unsigned char LoadConfiguration(int num) { BootPrint("Opened configuration file\n"); printf("Configuration file size: %s, %d\n", filename, size); - if (size == sizeof(config)) + if (size == sizeof(minimig_config) || size == 5152) { - static configTYPE tmpconf; + static mm_configTYPE tmpconf = {}; if (FileLoadConfig(filename, &tmpconf, sizeof(tmpconf))) { // check file id and version - if (strncmp(tmpconf.id, config_id, sizeof(config.id)) == 0) { + if (strncmp(tmpconf.id, config_id, sizeof(minimig_config.id)) == 0) { // A few more sanity checks... if (tmpconf.floppy.drives <= 4) { // If either the old config and new config have a different kickstart file, // or this is the first boot, we need to upload a kickstart image. - if (strcmp(tmpconf.kickstart, config.kickstart) != 0) { + if (strcmp(tmpconf.kickstart, minimig_config.kickstart) != 0) { updatekickstart = true; } - memcpy((void*)&config, (void*)&tmpconf, sizeof(config)); + memcpy((void*)&minimig_config, (void*)&tmpconf, sizeof(minimig_config)); result = 1; // We successfully loaded the config. } else BootPrint("Config file sanity check failed!\n"); @@ -417,19 +387,19 @@ unsigned char LoadConfiguration(int num) if (FileLoadConfig(filename, &tmpconf, sizeof(tmpconf))) { // check file id and version - if (strncmp(tmpconf.id, config_id, sizeof(config.id)) == 0) { + if (strncmp(tmpconf.id, config_id, sizeof(minimig_config.id)) == 0) { // A few more sanity checks... if (tmpconf.floppy.drives <= 4) { // If either the old config and new config have a different kickstart file, // or this is the first boot, we need to upload a kickstart image. - if (strcmp(tmpconf.kickstart, config.kickstart) != 0) { + if (strcmp(tmpconf.kickstart, minimig_config.kickstart) != 0) { updatekickstart = true; } - memcpy((void*)&config, (void*)&tmpconf, sizeof(config)); - config.cpu = tmpconf.cpu; - config.autofire = tmpconf.autofire; - memset(&config.hardfile[2], 0, sizeof(config.hardfile[2])); - memset(&config.hardfile[3], 0, sizeof(config.hardfile[3])); + memcpy((void*)&minimig_config, (void*)&tmpconf, sizeof(minimig_config)); + minimig_config.cpu = tmpconf.cpu; + minimig_config.autofire = tmpconf.autofire; + memset(&minimig_config.hardfile[2], 0, sizeof(minimig_config.hardfile[2])); + memset(&minimig_config.hardfile[3], 0, sizeof(minimig_config.hardfile[3])); result = 1; // We successfully loaded the config. } else BootPrint("Config file sanity check failed!\n"); @@ -438,25 +408,25 @@ unsigned char LoadConfiguration(int num) } else printf("Cannot load configuration file\n"); } - else printf("Wrong configuration file size: %d (expected: %u)\n", size, sizeof(config)); + else printf("Wrong configuration file size: %d (expected: %u)\n", size, sizeof(minimig_config)); } if (!result) { BootPrint("Can not open configuration file!\n"); BootPrint("Setting config defaults\n"); // set default configuration - memset((void*)&config, 0, sizeof(config)); // Finally found default config bug - params were reversed! - strncpy(config.id, config_id, sizeof(config.id)); - strcpy(config.kickstart, "Amiga/KICK.ROM"); - config.memory = 0x11; - config.cpu = 0; - config.chipset = 0; - config.floppy.speed = CONFIG_FLOPPY2X; - config.floppy.drives = 1; - config.enable_ide = 0; - config.hardfile[0].enabled = 1; - config.hardfile[0].filename[0] = 0; - config.hardfile[1].enabled = 1; - config.hardfile[1].filename[0] = 0; + memset((void*)&minimig_config, 0, sizeof(minimig_config)); // Finally found default config bug - params were reversed! + strncpy(minimig_config.id, config_id, sizeof(minimig_config.id)); + strcpy(minimig_config.kickstart, "Amiga/KICK.ROM"); + minimig_config.memory = 0x11; + minimig_config.cpu = 0; + minimig_config.chipset = 0; + minimig_config.floppy.speed = CONFIG_FLOPPY2X; + minimig_config.floppy.drives = 1; + minimig_config.enable_ide = 0; + minimig_config.hardfile[0].enabled = 1; + minimig_config.hardfile[0].filename[0] = 0; + minimig_config.hardfile[1].enabled = 1; + minimig_config.hardfile[1].filename[0] = 0; updatekickstart = true; BootPrintEx(">>> No config found. Using defaults. <<<"); } @@ -470,8 +440,8 @@ unsigned char LoadConfiguration(int num) // print config to boot screen char cfg_str[256]; sprintf(cfg_str, "CPU: %s, Chipset: %s, ChipRAM: %s, FastRAM: %s, SlowRAM: %s", - config_cpu_msg[config.cpu & 0x03], config_chipset_msg[(config.chipset >> 2) & 7], - config_memory_chip_msg[(config.memory >> 0) & 0x03], config_memory_fast_msg[(config.memory >> 4) & 0x03], config_memory_slow_msg[(config.memory >> 2) & 0x03] + config_cpu_msg[minimig_config.cpu & 0x03], config_chipset_msg[(minimig_config.chipset >> 2) & 7], + config_memory_chip_msg[(minimig_config.memory >> 0) & 0x03], config_memory_fast_msg[(minimig_config.memory >> 4) & 0x03], config_memory_slow_msg[(minimig_config.memory >> 2) & 0x03] ); BootPrintEx(cfg_str); @@ -480,13 +450,13 @@ unsigned char LoadConfiguration(int num) { BootPrintEx("Forcing NTSC video ..."); //force NTSC mode if F1 pressed - config.chipset |= CONFIG_NTSC; + minimig_config.chipset |= CONFIG_NTSC; } else if (is_key_pressed(60)) { BootPrintEx("Forcing PAL video ..."); // force PAL mode if F2 pressed - config.chipset &= ~CONFIG_NTSC; + minimig_config.chipset &= ~CONFIG_NTSC; } ApplyConfiguration(updatekickstart); @@ -502,8 +472,8 @@ void MinimigReset() void SetKickstart(char *name) { uint len = strlen(name); - if (len > (sizeof(config.kickstart) - 1)) len = sizeof(config.kickstart) - 1; - memcpy(config.kickstart, name, len); - config.kickstart[len] = 0; + if (len > (sizeof(minimig_config.kickstart) - 1)) len = sizeof(minimig_config.kickstart) - 1; + memcpy(minimig_config.kickstart, name, len); + minimig_config.kickstart[len] = 0; force_reload_kickstart = 1; } diff --git a/support/minimig/minimig_config.h b/support/minimig/minimig_config.h index d71d504..1a16c9b 100644 --- a/support/minimig/minimig_config.h +++ b/support/minimig/minimig_config.h @@ -8,44 +8,45 @@ typedef struct { unsigned char lores; unsigned char hires; -} filterTYPE; +} mm_filterTYPE; typedef struct { unsigned char speed; unsigned char drives; -} floppyTYPE; +} mm_floppyTYPE; typedef struct { unsigned char enabled; unsigned char reserved; char filename[1024]; -} hardfileTYPE; +} mm_hardfileTYPE; typedef struct { - char id[8]; - unsigned long version; - char kickstart[1024]; - filterTYPE filter; - unsigned char memory; - unsigned char chipset; - floppyTYPE floppy; - unsigned char disable_ar3; - unsigned char enable_ide; - unsigned char scanlines; - unsigned char audio; - hardfileTYPE hardfile[4]; - unsigned char cpu; - unsigned char autofire; -} configTYPE; + char id[8]; + unsigned long version; + char kickstart[1024]; + mm_filterTYPE filter; + unsigned char memory; + unsigned char chipset; + mm_floppyTYPE floppy; + unsigned char disable_ar3; + unsigned char enable_ide; + unsigned char scanlines; + unsigned char audio; + mm_hardfileTYPE hardfile[4]; + unsigned char cpu; + unsigned char autofire; + char info[64]; +} mm_configTYPE; -extern configTYPE config; +extern mm_configTYPE minimig_config; -unsigned char LoadConfiguration(int num); -unsigned char SaveConfiguration(int num); -const char* GetConfigDisplayName(int num); +int minimig_LoadCfg(int num); +int minimig_SaveCfg(int num); +const char* minimig_GetCfgInfo(int num); void MinimigReset(); void SetKickstart(char *name); diff --git a/support/minimig/minimig_hdd.cpp b/support/minimig/minimig_hdd.cpp index 27a1105..149a6db 100644 --- a/support/minimig/minimig_hdd.cpp +++ b/support/minimig/minimig_hdd.cpp @@ -309,9 +309,9 @@ static void IdentifyDevice(uint16_t *pBuffer, hdfTYPE *hdf) memcpy((char*)&pBuffer[23], ".100 ", 8); // firmware version - byte swapped memcpy(p, "MiSTer ", 40); // model name - byte swapped p += 8; - char *s = strrchr(config.hardfile[hdf->unit].filename, '/'); + char *s = strrchr(minimig_config.hardfile[hdf->unit].filename, '/'); if (s) s++; - else s = config.hardfile[hdf->unit].filename; + else s = minimig_config.hardfile[hdf->unit].filename; i = strlen(s); if (i > 32) s += i - 32; @@ -720,16 +720,16 @@ uint8_t OpenHardfile(uint8_t unit) hdfTYPE *hdf = &HDF[unit]; hdf->unit = unit; hdf->enabled = 0; - if (config.enable_ide && config.hardfile[unit].enabled) + if (minimig_config.enable_ide && minimig_config.hardfile[unit].enabled) { printf("\nChecking HDD %d\n", unit); - if (config.hardfile[unit].filename[0]) + if (minimig_config.hardfile[unit].filename[0]) { - if (FileOpenEx(&hdf->file, config.hardfile[unit].filename, FileCanWrite(config.hardfile[unit].filename) ? O_RDWR : O_RDONLY)) + if (FileOpenEx(&hdf->file, minimig_config.hardfile[unit].filename, FileCanWrite(minimig_config.hardfile[unit].filename) ? O_RDWR : O_RDONLY)) { hdf->enabled = 1; printf("file: \"%s\": ", hdf->file.name); - SetHardfileGeometry(hdf, !strcasecmp(".hdf", config.hardfile[unit].filename + strlen(config.hardfile[unit].filename) - 4)); + SetHardfileGeometry(hdf, !strcasecmp(".hdf", minimig_config.hardfile[unit].filename + strlen(minimig_config.hardfile[unit].filename) - 4)); printf("size: %llu (%llu MB)\n", hdf->file.size, hdf->file.size >> 20); printf("CHS: %u/%u/%u", hdf->cylinders, hdf->heads, hdf->sectors); printf(" (%llu MB), ", ((((uint64_t)hdf->cylinders) * hdf->heads * hdf->sectors) >> 11)); diff --git a/user_io.cpp b/user_io.cpp index d02865f..8dc3190 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -2373,8 +2373,6 @@ LCTRL LSHIFT LALT LGUI RCTRL RSHIFT RALT RGUI #define EMU_BTN3 (2+(keyrah*4)) // left alt #define EMU_BTN4 (3+(keyrah*4)) // left gui (usually windows key) -extern configTYPE config; - void user_io_check_reset(unsigned short modifiers, char useKeys) { unsigned short combo[] =