From a7669b1057de1d9634aef2e093de3e068fbf46e4 Mon Sep 17 00:00:00 2001 From: Robin Jones Date: Wed, 4 Dec 2024 12:30:38 +0000 Subject: [PATCH] Add Fairchild Channel F emulator support (#166) ## Description Adds the required changes for supporting the Fairchild Channel F emulator. ## Motivation and Context Support more emulators. ## How Has This Been Tested? Still required. ## Screenshots ## Types of changes - [x] Improvement (non-breaking change that adds a new feature) - [ ] Bug fix (fixes an issue) - [ ] Breaking change (breaking change) - [ ] Documentation Improvement - [ ] Config and build (change in the configuration and build system, has no impact on code or features) ## Checklist: - [x] My code follows the code style of this project. - [ ] My change requires a change to the documentation. - [x] I have updated the documentation accordingly. - [ ] I have added tests to cover my changes. - [ ] All new and existing tests passed. Signed-off-by: GITHUB_USER --- README.md | 2 +- docs/00_getting_started_sd.md | 4 +++- src/menu/cart_load.c | 4 ++++ src/menu/cart_load.h | 2 ++ src/menu/views/browser.c | 2 +- src/menu/views/file_info.c | 2 +- src/menu/views/load_emulator.c | 5 +++++ 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a3beb078..30dfa22b 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ An open source menu for N64 flashcarts. * Fully Open Source. * Loads all known N64 games (including iQue and Aleck64 ROMs (even if they are byteswapped)). * Fully emulates the 64DD and loads 64DD disks (SummerCart64 only). -* Emulator support (NES, SNES, GB, GBC, SMS, GG) ROMs. +* Emulator support (NES, SNES, GB, GBC, SMS, GG, CHF) ROMs. * N64 ROM box image support. * Background image (PNG) support. * Comprehensive ROM save database (including HomeBrew headers). diff --git a/docs/00_getting_started_sd.md b/docs/00_getting_started_sd.md index 650e4cd9..ab6ef78d 100644 --- a/docs/00_getting_started_sd.md +++ b/docs/00_getting_started_sd.md @@ -23,6 +23,7 @@ Menu currently supports the following emulators and associated ROM file names: - **SNES**: [sodium64](https://github.com/Hydr8gon/sodium64/releases) by *Hydr8gon* - `sodium64.z64` - **Game Boy** / **GB Color**: [gb64](https://lambertjamesd.github.io/gb64/romwrapper/romwrapper.html) by *lambertjamesd* - `gb.v64` / `gbc.v64` ("Download Emulator" button) - **SMS** / **GG**: [smsPlus64](https://github.com/fhoedemakers/smsplus64/releases) by *fhoedmakers* - `smsPlus64.z64` +- **Fairchild Channel F**: [Press-F-Ultra](https://github.com/celerizer/Press-F-Ultra/releases) by *celerizer* - `Press-F.z64` ### 64DD disk support @@ -50,7 +51,8 @@ SD:\ │ ├── sodium64.z64 │ ├── gb.v64 │ ├── gbc.v64 -│ └── smsPlus64.z64 +│ ├── smsPlus64.z64 +│ └── Press-F.z64 │ ├── (a rom).z64 ├── (a rom).n64 diff --git a/src/menu/cart_load.c b/src/menu/cart_load.c index 003c4045..054102ed 100644 --- a/src/menu/cart_load.c +++ b/src/menu/cart_load.c @@ -180,6 +180,10 @@ cart_load_err_t cart_load_emulator (menu_t *menu, cart_load_emu_type_t emu_type, path_push(path, "smsPlus64.z64"); save_type = FLASHCART_SAVE_TYPE_NONE; break; + case CART_LOAD_EMU_TYPE_FAIRCHILD_CHANNELF: + path_push(path, "Press-F.z64"); + save_type = FLASHCART_SAVE_TYPE_NONE; + break; } if (!file_exists(path_get(path))) { diff --git a/src/menu/cart_load.h b/src/menu/cart_load.h index 04c2c679..ad4d34a1 100644 --- a/src/menu/cart_load.h +++ b/src/menu/cart_load.h @@ -54,6 +54,8 @@ typedef enum { CART_LOAD_EMU_TYPE_GAMEBOY_COLOR, /** @brief The ROM is designed for a Sega 8Bit system (Game Gear or Master System). */ CART_LOAD_EMU_TYPE_SEGA_GENERIC_8BIT, + /** @brief The ROM is designed for a Fairchild Channel F system. */ + CART_LOAD_EMU_TYPE_FAIRCHILD_CHANNELF, } cart_load_emu_type_t; diff --git a/src/menu/views/browser.c b/src/menu/views/browser.c index abe86b59..53d445f4 100644 --- a/src/menu/views/browser.c +++ b/src/menu/views/browser.c @@ -11,7 +11,7 @@ static const char *rom_extensions[] = { "z64", "n64", "v64", "rom", NULL }; static const char *disk_extensions[] = { "ndd", NULL }; -static const char *emulator_extensions[] = { "nes", "sfc", "smc", "gb", "gbc", "sms", "gg", "sg", NULL }; +static const char *emulator_extensions[] = { "nes", "sfc", "smc", "gb", "gbc", "sms", "gg", "sg", "chf", NULL }; // TODO: "eep", "sra", "srm", "fla" could be used if transfered from different flashcarts. static const char *save_extensions[] = { "sav", NULL }; static const char *image_extensions[] = { "png", NULL }; diff --git a/src/menu/views/file_info.c b/src/menu/views/file_info.c index be204e5f..1a979426 100644 --- a/src/menu/views/file_info.c +++ b/src/menu/views/file_info.c @@ -14,7 +14,7 @@ static const char *archive_extensions[] = { "zip", "rar", "7z", "tar", "gz", NUL static const char *image_extensions[] = { "png", "jpg", "gif", NULL }; static const char *music_extensions[] = { "mp3", "wav", "ogg", "wma", "flac", NULL }; static const char *controller_pak_extensions[] = { "mpk", "pak", NULL }; -static const char *emulator_extensions[] = { "nes", "smc", "gb", "gbc", "sms", "gg", NULL }; +static const char *emulator_extensions[] = { "nes", "smc", "gb", "gbc", "sms", "gg", "chf", NULL }; static struct stat st; diff --git a/src/menu/views/load_emulator.c b/src/menu/views/load_emulator.c index ad923145..b4e2c1b3 100644 --- a/src/menu/views/load_emulator.c +++ b/src/menu/views/load_emulator.c @@ -10,6 +10,7 @@ static const char *emu_snes_rom_extensions[] = { "sfc", "smc", NULL }; static const char *emu_gameboy_rom_extensions[] = { "gb", NULL }; static const char *emu_gameboy_color_rom_extensions[] = { "gbc", NULL }; static const char *emu_sega_8bit_rom_extensions[] = { "sms", "gg", "sg", NULL }; +static const char *emu_fairchild_channelf_rom_extensions[] = { "chf", NULL }; static cart_load_emu_type_t emu_type; @@ -25,6 +26,8 @@ static char *format_emulator_name (cart_load_emu_type_t emulator_info) { return "Nintendo GAMEBOY Color"; case CART_LOAD_EMU_TYPE_SEGA_GENERIC_8BIT: return "SEGA 8bit system"; + case CART_LOAD_EMU_TYPE_FAIRCHILD_CHANNELF: + return "Fairchild Channel F"; default: return "Unknown"; } @@ -120,6 +123,8 @@ void view_load_emulator_init (menu_t *menu) { emu_type = CART_LOAD_EMU_TYPE_GAMEBOY_COLOR; } else if (file_has_extensions(path_get(path), emu_sega_8bit_rom_extensions)) { emu_type = CART_LOAD_EMU_TYPE_SEGA_GENERIC_8BIT; + } else if (file_has_extensions(path_get(path), emu_fairchild_channelf_rom_extensions)) { + emu_type = CART_LOAD_EMU_TYPE_FAIRCHILD_CHANNELF; } else { menu_show_error(menu, "Unsupported ROM"); }