From 68453592312a454ef39d59d2ee3b81fa9931190f Mon Sep 17 00:00:00 2001 From: sorgelig Date: Wed, 4 Sep 2019 00:07:21 +0800 Subject: [PATCH] minimig: use detected SDRAM size to adjust selected FastRAM config if required. --- menu.cpp | 4 ++-- support/minimig/minimig_config.cpp | 22 ++++++++++++++++++---- user_io.cpp | 2 +- user_io.h | 2 ++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/menu.cpp b/menu.cpp index 04da49b..f0e2550 100644 --- a/menu.cpp +++ b/menu.cpp @@ -177,7 +177,7 @@ const char *config_tos_usb[] = { "none", "control", "debug", "serial", "parallel 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", "25M", "58M", "293M", "327M" }; +const char *config_memory_fast_msg[] = { "none", "2M", "4M", "24M", "56M", "280M", "312M" }; const char *config_scanlines_msg[] = { "off", "dim", "black" }; const char *config_ar_msg[] = { "4:3", "16:9" }; @@ -3499,7 +3499,7 @@ void HandleUI(void) OsdWrite(6, s, menusub == 4, 0); OsdWrite(7, "", 0, 0); - OsdWrite(8, ((minimig_config.memory & 0x80) && !(minimig_config.memory & 0x10)) ? " ** 64MB SDRAM REQUIRED **" : "", 0, 0); + OsdWrite(8, ((minimig_config.memory & 0x80) && !(minimig_config.memory & 0x10) && !(sdram_sz() & 2)) ? " ** 64MB SDRAM REQUIRED **" : "", 0, 0); for (int i = 9; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0); OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 5, 0); diff --git a/support/minimig/minimig_config.cpp b/support/minimig/minimig_config.cpp index cbe58d2..8155d94 100644 --- a/support/minimig/minimig_config.cpp +++ b/support/minimig/minimig_config.cpp @@ -299,9 +299,23 @@ static void ApplyConfiguration(char reloadkickstart) } 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) | ((minimig_config.memory & 0x80) >> 5)]); + uint8_t memcfg = minimig_config.memory; + if (!(sdram_sz() & 2)) + { + uint8_t fastram_sz = ((memcfg >> 4) & 0x03) | ((memcfg & 0x80) >> 5); + switch (fastram_sz) + { + case 4: + case 6: + printf("Warning: config requires >=64MB but <=32MB is installed. Lowering down memory config.\n"); + fastram_sz--; + memcfg = ((fastram_sz << 4) & 0x30) | ((fastram_sz << 5) & 0x80) | (memcfg & ~0xB0); + } + } + + printf("Chip RAM size : %s\n", config_memory_chip_msg[memcfg & 0x03]); + printf("Slow RAM size : %s\n", config_memory_slow_msg[memcfg >> 2 & 0x03]); + printf("Fast RAM size : %s\n", config_memory_fast_msg[((memcfg >> 4) & 0x03) | ((memcfg & 0x80) >> 5)]); printf("Floppy drives : %u\n", minimig_config.floppy.drives + 1); printf("Floppy speed : %s\n", minimig_config.floppy.speed ? "fast" : "normal"); @@ -321,7 +335,7 @@ static void ApplyConfiguration(char reloadkickstart) spi_osd_cmd8(OSD_CMD_RST, rstval); 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(minimig_config.memory); + ConfigMemory(memcfg); ConfigCPU(minimig_config.cpu); ConfigChipset(minimig_config.chipset); diff --git a/user_io.cpp b/user_io.cpp index 482a885..2c2aa15 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -565,7 +565,7 @@ void SetMidiLinkMode(int mode) } } -static uint16_t sdram_sz(int sz) +uint16_t sdram_sz(int sz) { int res = 0; diff --git a/user_io.h b/user_io.h index ba93b8b..f87cbec 100644 --- a/user_io.h +++ b/user_io.h @@ -235,6 +235,8 @@ const char* get_rbf_dir(); const char* get_rbf_name(); const char* get_rbf_path(); +uint16_t sdram_sz(int sz = -1); + int GetUARTMode(); int GetMidiLinkMode(); void SetMidiLinkMode(int mode);