MSX: Check for missing bios files on startup

This slows down boot a little but I think it's worth it to avoid user frustration!
This commit is contained in:
Alex Duchesne 2024-03-12 17:55:08 -04:00
parent 15139cbf85
commit 6e8052cb21
3 changed files with 37 additions and 15 deletions

View File

@ -74,7 +74,8 @@ Some emulators support loading a BIOS. The files should be placed as follows:
- GB: `/retro-go/bios/gb_bios.bin`
- GBC: `/retro-go/bios/gbc_bios.bin`
- FDS: `/retro-go/bios/fds_bios.bin`
- MSX: `/retro-go/bios/MSX.ROM` `/retro-go/bios/MSX2.ROM` `/retro-go/bios/MSX2EXT.ROM`
- MSX: In folder `/retro-go/bios/msx/` put: `MSX.ROM` `MSX2.ROM` `MSX2EXT.ROM` `MSX2P.ROM` `MSX2PEXT.ROM` `FMPAC.ROM` `DISK.ROM` `MSXDOS2.ROM` `PAINTER.ROM` `KANJI.ROM`
## Game & Watch
The roms must be packed with [LCD-Game-Shrinker](https://github.com/bzhxx/LCD-Game-Shrinker) and a tutorial can be [found here](https://gist.github.com/DNA64/16fed499d6bd4664b78b4c0a9638e4ef).

View File

@ -1390,16 +1390,16 @@ void rg_gui_sysinfo_menu(void)
void rg_gui_about_menu(const rg_gui_option_t *extra_options)
{
char build_ver[40], build_date[40], build_user[40], title[40];
const rg_app_t *app = rg_system_get_app();
size_t extra_options_count = get_dialog_items_count(extra_options);
rg_gui_option_t options[16 + extra_options_count];
rg_gui_option_t *opt = &options[0];
*opt++ = (rg_gui_option_t){0, "Version", build_ver, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "Date ", build_date, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "By ", build_user, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "Version", app->version, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "Date ", app->buildDate, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "By ", app->buildUser, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t){0, "App ", app->name, RG_DIALOG_FLAG_MESSAGE, NULL};
*opt++ = (rg_gui_option_t)RG_DIALOG_SEPARATOR;
*opt++ = (rg_gui_option_t){1000, "System information", NULL, RG_DIALOG_FLAG_NORMAL, NULL};
for (size_t i = 0; i < extra_options_count; i++)
@ -1408,16 +1408,9 @@ void rg_gui_about_menu(const rg_gui_option_t *extra_options)
*opt++ = (rg_gui_option_t){3000, "Debug", NULL, RG_DIALOG_FLAG_NORMAL, NULL};
*opt++ = (rg_gui_option_t)RG_DIALOG_END;
const rg_app_t *app = rg_system_get_app();
snprintf(build_ver, sizeof(build_ver), "%s", app->version);
snprintf(build_date, sizeof(build_date), "%s", app->buildDate);
snprintf(build_user, sizeof(build_user), "%s", app->buildUser);
snprintf(title, sizeof(title), "About Retro-Go"); // , app->name
while (true)
{
switch (rg_gui_dialog(title, options, 4))
switch (rg_gui_dialog("About Retro-Go", options, 4))
{
case 1000:
rg_gui_sysinfo_menu();

View File

@ -54,6 +54,21 @@ static const unsigned char KBDKeys[YKEYS][XKEYS] = {
{'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 0, 0},
{'[', ']', ' ', ' ', ' ', ' ', ' ', '\\', '\'', 0, 0, 0}};
static const char *BiosFolder = RG_BASE_PATH_BIOS "/msx";
// We only check for absolutely essential files to avoid slowing down boot too much!
static const char *BiosFiles[] = {
"MSX.ROM",
"MSX2.ROM",
"MSX2EXT.ROM",
// "MSX2P.ROM",
// "MSX2PEXT.ROM",
// "FMPAC.ROM",
"DISK.ROM",
"MSXDOS2.ROM",
// "PAINTER.ROM",
// "KANJI.ROM",
};
static inline void SubmitFrame(void)
{
int crop_v = CropPicture ? (ScanLines212 ? 8 : 18) : 0;
@ -409,12 +424,25 @@ void app_main(void)
KeyboardEmulation = rg_settings_get_number(NS_APP, "Input", 1);
CropPicture = rg_settings_get_number(NS_APP, "Crop", 0);
for (size_t i = 0; i < RG_COUNT(BiosFiles); ++i)
{
char pathbuf[RG_PATH_MAX + 1];
snprintf(pathbuf, RG_PATH_MAX, "%s/%s", BiosFolder, BiosFiles[i]);
if (!rg_storage_exists(pathbuf))
{
char message[512];
snprintf(message, 512, "File: %s\nYou can find it at:\n%s",
pathbuf, "https://fms.komkon.org/fMSX/");
rg_gui_alert("BIOS file missing!", message);
}
}
if (app->bootFlags & RG_BOOT_RESUME)
{
PendingLoadSTA = rg_emu_get_path(RG_PATH_SAVE_STATE + app->saveSlot, app->romPath);
}
char *argv[] = {"fmsx", "-skip", "50", "-home", RG_BASE_PATH_BIOS, "-joy", "1", NULL, NULL, NULL,};
char *argv[] = {"fmsx", "-skip", "50", "-home", BiosFolder, "-joy", "1", NULL, NULL, NULL,};
int argc = RG_COUNT(argv) - 3;
if (strcasecmp(rg_extension(app->romPath), "dsk") == 0)