Skip to content

Commit 33923f5

Browse files
committed
Set default emulator tabs and update docs
1 parent 0e35394 commit 33923f5

5 files changed

Lines changed: 82 additions & 28 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ https://wiki.ds-homebrew.com/ds-index/rtcom?tab=forwarders
8484

8585
Per‑ROM RetroArch options (press **Y** on a ROM in emulator tabs) are stored in `sd:/3ds/emulators/rom_options.json`.
8686

87+
Default enabled emulator tabs are: NES, SNES, GB/GBC, GBA, Genesis, Master System, Game Gear, TG16/PCE, CPS1, CPS2, Neo Geo, Lynx, Virtual Boy, Neo Geo Pocket, WonderSwan.
88+
Other supported systems can be enabled from Settings -> Emulators.
89+
8790
## Known Issue
8891

8992
- NDS cheats are currently work in progress. Cheat selection UI and usrcheat flag writes are implemented, but in-game cheat activation is not yet reliable across all titles.

SD/3ds/emulators/emulators.json

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,47 @@
11
{
22
"version": 1,
33
"systems": {
4-
"a26": {"displayName":"Atari 2600","enabled":true,"romFolder":"sd:/roms/a26"},
5-
"a52": {"displayName":"Atari 5200","enabled":true,"romFolder":"sd:/roms/a52"},
6-
"a78": {"displayName":"Atari 7800","enabled":true,"romFolder":"sd:/roms/a78"},
7-
"col": {"displayName":"ColecoVision","enabled":true,"romFolder":"sd:/roms/col"},
8-
"cpc": {"displayName":"Amstrad CPC","enabled":true,"romFolder":"sd:/roms/cpc"},
4+
"a26": {"displayName":"Atari 2600","enabled":false,"romFolder":"sd:/roms/a26"},
5+
"a52": {"displayName":"Atari 5200","enabled":false,"romFolder":"sd:/roms/a52"},
6+
"a78": {"displayName":"Atari 7800","enabled":false,"romFolder":"sd:/roms/a78"},
7+
"col": {"displayName":"ColecoVision","enabled":false,"romFolder":"sd:/roms/col"},
8+
"cpc": {"displayName":"Amstrad CPC","enabled":false,"romFolder":"sd:/roms/cpc"},
99
"gb": {"displayName":"GB/GBC","enabled":true,"romFolder":"sd:/roms/gb"},
1010
"gba": {"displayName":"Game Boy Advance","enabled":true,"romFolder":"sd:/roms/gba"},
1111
"gen": {"displayName":"Genesis","enabled":true,"romFolder":"sd:/roms/gen"},
1212
"gg": {"displayName":"Game Gear","enabled":true,"romFolder":"sd:/roms/gg"},
13-
"intv": {"displayName":"Intellivision","enabled":true,"romFolder":"sd:/roms/intv"},
14-
"m5": {"displayName":"Sord M5","enabled":true,"romFolder":"sd:/roms/m5"},
13+
"intv": {"displayName":"Intellivision","enabled":false,"romFolder":"sd:/roms/intv"},
14+
"m5": {"displayName":"Sord M5","enabled":false,"romFolder":"sd:/roms/m5"},
1515
"nes": {"displayName":"NES","enabled":true,"romFolder":"sd:/roms/nes"},
1616
"ngp": {"displayName":"Neo Geo Pocket","enabled":true,"romFolder":"sd:/roms/ngp"},
17-
"pkmni": {"displayName":"PokeMini","enabled":true,"romFolder":"sd:/roms/pkmni"},
18-
"sg": {"displayName":"SG-1000","enabled":true,"romFolder":"sd:/roms/sg"},
17+
"pkmni": {"displayName":"PokeMini","enabled":false,"romFolder":"sd:/roms/pkmni"},
18+
"sg": {"displayName":"SG-1000","enabled":false,"romFolder":"sd:/roms/sg"},
1919
"sms": {"displayName":"Master System","enabled":true,"romFolder":"sd:/roms/sms"},
2020
"snes": {"displayName":"SNES","enabled":true,"romFolder":"sd:/roms/snes"},
2121
"tg16": {"displayName":"TurboGrafx-16","enabled":true,"romFolder":"sd:/roms/tg16"},
2222
"ws": {"displayName":"WonderSwan","enabled":true,"romFolder":"sd:/roms/ws"},
23-
"arcade": {"displayName":"Arcade","enabled":true,"romFolder":"sd:/roms/arcade"},
23+
"arcade": {"displayName":"Arcade","enabled":false,"romFolder":"sd:/roms/arcade"},
2424
"cps1": {"displayName":"Capcom Play System 1","enabled":true,"romFolder":"sd:/roms/cps1"},
2525
"cps2": {"displayName":"Capcom Play System 2","enabled":true,"romFolder":"sd:/roms/cps2"},
26-
"cps3": {"displayName":"Capcom Play System 3","enabled":true,"romFolder":"sd:/roms/cps3"},
26+
"cps3": {"displayName":"Capcom Play System 3","enabled":false,"romFolder":"sd:/roms/cps3"},
2727
"neogeo": {"displayName":"Neo Geo","enabled":true,"romFolder":"sd:/roms/neogeo"},
28-
"neogeocd": {"displayName":"Neo Geo CD","enabled":true,"romFolder":"sd:/roms/neogeocd"},
29-
"c64": {"displayName":"Commodore 64","enabled":true,"romFolder":"sd:/roms/c64"},
30-
"c128": {"displayName":"Commodore 128","enabled":true,"romFolder":"sd:/roms/c128"},
31-
"vic20": {"displayName":"Commodore VIC-20","enabled":true,"romFolder":"sd:/roms/vic20"},
32-
"plus4": {"displayName":"Commodore Plus/4","enabled":true,"romFolder":"sd:/roms/plus4"},
33-
"pet": {"displayName":"Commodore PET","enabled":true,"romFolder":"sd:/roms/pet"},
34-
"psx": {"displayName":"Sony PlayStation 1","enabled":true,"romFolder":"sd:/roms/psx"},
28+
"neogeocd": {"displayName":"Neo Geo CD","enabled":false,"romFolder":"sd:/roms/neogeocd"},
29+
"c64": {"displayName":"Commodore 64","enabled":false,"romFolder":"sd:/roms/c64"},
30+
"c128": {"displayName":"Commodore 128","enabled":false,"romFolder":"sd:/roms/c128"},
31+
"vic20": {"displayName":"Commodore VIC-20","enabled":false,"romFolder":"sd:/roms/vic20"},
32+
"plus4": {"displayName":"Commodore Plus/4","enabled":false,"romFolder":"sd:/roms/plus4"},
33+
"pet": {"displayName":"Commodore PET","enabled":false,"romFolder":"sd:/roms/pet"},
34+
"psx": {"displayName":"Sony PlayStation 1","enabled":false,"romFolder":"sd:/roms/psx"},
3535
"vb": {"displayName":"Virtual Boy","enabled":true,"romFolder":"sd:/roms/vb"},
3636
"lynx": {"displayName":"Atari Lynx","enabled":true,"romFolder":"sd:/roms/lynx"},
37-
"jaguar": {"displayName":"Atari Jaguar","enabled":true,"romFolder":"sd:/roms/jaguar"},
38-
"dos": {"displayName":"DOS","enabled":true,"romFolder":"sd:/roms/dos"},
39-
"pc98": {"displayName":"NEC PC-98","enabled":true,"romFolder":"sd:/roms/pc98"},
40-
"scummvm": {"displayName":"ScummVM","enabled":true,"romFolder":"sd:/roms/scummvm"},
41-
"quake": {"displayName":"Quake","enabled":true,"romFolder":"sd:/roms/quake"},
42-
"uzebox": {"displayName":"Uzebox","enabled":true,"romFolder":"sd:/roms/uzebox"},
43-
"tic80": {"displayName":"TIC-80","enabled":true,"romFolder":"sd:/roms/tic80"},
44-
"wasm": {"displayName":"WASM-4","enabled":true,"romFolder":"sd:/roms/wasm"},
45-
"lowresnx": {"displayName":"LowRes NX","enabled":true,"romFolder":"sd:/roms/lowresnx"}
37+
"jaguar": {"displayName":"Atari Jaguar","enabled":false,"romFolder":"sd:/roms/jaguar"},
38+
"dos": {"displayName":"DOS","enabled":false,"romFolder":"sd:/roms/dos"},
39+
"pc98": {"displayName":"NEC PC-98","enabled":false,"romFolder":"sd:/roms/pc98"},
40+
"scummvm": {"displayName":"ScummVM","enabled":false,"romFolder":"sd:/roms/scummvm"},
41+
"quake": {"displayName":"Quake","enabled":false,"romFolder":"sd:/roms/quake"},
42+
"uzebox": {"displayName":"Uzebox","enabled":false,"romFolder":"sd:/roms/uzebox"},
43+
"tic80": {"displayName":"TIC-80","enabled":false,"romFolder":"sd:/roms/tic80"},
44+
"wasm": {"displayName":"WASM-4","enabled":false,"romFolder":"sd:/roms/wasm"},
45+
"lowresnx": {"displayName":"LowRes NX","enabled":false,"romFolder":"sd:/roms/lowresnx"}
4646
}
4747
}

docs/RetroArch Emulators.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,30 @@ FirmMux maps these folders under `sd:/roms/`:
6060
- WASM-4 (`wasm`)
6161
- LowRes NX (`lowresnx`)
6262

63+
## Default Enabled Systems
64+
65+
By default, FirmMux enables these tabs:
66+
67+
- NES
68+
- SNES
69+
- Game Boy / Game Boy Color
70+
- Game Boy Advance
71+
- Genesis / Mega Drive
72+
- Master System
73+
- Game Gear
74+
- TurboGrafx-16 / PC Engine
75+
- Capcom Play System 1
76+
- Capcom Play System 2
77+
- Neo Geo
78+
- Atari Lynx
79+
- Virtual Boy
80+
- Neo Geo Pocket
81+
- WonderSwan
82+
83+
All other supported systems are disabled by default and can be enabled in Settings -> Emulators.
84+
85+
Note: if `sd:/3ds/emulators/emulators.json` already exists, FirmMux keeps the user's current enabled/disabled choices.
86+
6387
## Backend Files (auto‑created)
6488

6589
FirmMux uses:

docs/SD Layout.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ sd:/
5050
## Notes
5151

5252
- `sd:/3ds/emulators/` is only used for RetroArch handoff/config/log files.
53+
- `sd:/3ds/emulators/emulators.json` controls which emulator tabs are enabled; existing files are preserved and not overwritten.
5354
- `sd:/retroarch/` must come from the RetroArch 3DSX release (not CIA). It provides cores and system files.
5455
- `sd:/_nds/firmmux/nds_widescreen/` stores per-game widescreen `.bin` files.
5556
- `sd:/_nds/ntr-forwarder/usrcheat.dat` is the cheat database.

source/emulators.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,32 @@ static const KnownSystem g_known_systems[] = {
5757

5858
static const int g_known_system_count = (int)(sizeof(g_known_systems) / sizeof(g_known_systems[0]));
5959

60+
static bool default_enabled_for_key(const char* key) {
61+
if (!key || !key[0]) return false;
62+
static const char* enabled_keys[] = {
63+
"nes",
64+
"snes",
65+
"gb",
66+
"gba",
67+
"gen",
68+
"sms",
69+
"gg",
70+
"tg16",
71+
"cps1",
72+
"cps2",
73+
"neogeo",
74+
"lynx",
75+
"vb",
76+
"ngp",
77+
"ws"
78+
};
79+
const int count = (int)(sizeof(enabled_keys) / sizeof(enabled_keys[0]));
80+
for (int i = 0; i < count; i++) {
81+
if (!strcasecmp(key, enabled_keys[i])) return true;
82+
}
83+
return false;
84+
}
85+
6086
static void lower_copy(char* out, size_t out_size, const char* in) {
6187
if (!out || out_size == 0) return;
6288
out[0] = 0;
@@ -109,7 +135,7 @@ static void set_system_defaults(EmuSystem* sys, const char* key, const char* dis
109135
memset(sys, 0, sizeof(*sys));
110136
lower_copy(sys->key, sizeof(sys->key), key);
111137
copy_str(sys->display_name, sizeof(sys->display_name), display);
112-
sys->enabled = true;
138+
sys->enabled = default_enabled_for_key(key);
113139
snprintf(sys->rom_folder, sizeof(sys->rom_folder), "sd:/roms/%s", key);
114140
}
115141

0 commit comments

Comments
 (0)