feat: collect the game genie rom in both loader forms

This commit is contained in:
Abdessamad Derraz committed 2026-08-12 01:43:35 +02:00
1 parent ef449ed12f
commit 48a432d79c
6 files changed
+254 -4

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.
Binary file not shown.
+58 -3
View File
@@ -1,8 +1,8 @@
{
"schema_version": 1,
"generated_at": "2026-08-11T23:38:25Z",
"total_files": 8795,
"total_size": 12036698851,
"generated_at": "2026-08-11T23:42:04Z",
"total_files": 8798,
"total_size": 12036729886,
"files": {
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
"path": "bios/3DO Company/3DO/3do_arcade_saot.bin",
@@ -53031,6 +53031,16 @@
"crc32": "d15052ad",
"adler32": "64011de4"
},
"14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc": {
"path": "bios/Other/mastergear/Controls.png",
"name": "Controls.png",
"size": 22587,
"sha1": "14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc",
"md5": "d10635cb6f101ed733f3d1133bc78f61",
"sha256": "aa6d2236eaeb23bde1f1d99178ddefe9420251597a4096edb8d2153b84e818ad",
"crc32": "dc9da322",
"adler32": "4690d043"
},
"b2fc3bb96c0c4d315926eb7bd705441c75d84ec2": {
"path": "bios/Other/mastergear/MasterGear-Cheats.zip",
"name": "MasterGear-Cheats.zip",
@@ -53061,6 +53071,16 @@
"crc32": "e47045f4",
"adler32": "bf1f64bf"
},
"e7d3caf9691a6c82859903f54232d17474d7b0e7": {
"path": "bios/Other/mednafen/gg.rom",
"name": "gg.rom",
"size": 4352,
"sha1": "e7d3caf9691a6c82859903f54232d17474d7b0e7",
"md5": "1179939a20ffa397b9c45b9e7eb9ae3a",
"sha256": "c8bfbb36b2bd14b9fcd6de180f9b240c1e219f7970262c162adcc2d0510fa47c",
"crc32": "2561948a",
"adler32": "02a42a2d"
},
"16e3c6698a10547c228b8ab474b817ff1d64c216": {
"path": "bios/Other/mfme/DefaultMasks/ReelGradientMask.bmp",
"name": "ReelGradientMask.bmp",
@@ -54271,6 +54291,23 @@
"crc32": "84f47dc9",
"adler32": "8626217c"
},
"aaa9833c3de2213f2b0326769b715651fd13fd84": {
"path": "bios/Other/punes/gamegenie.rom",
"name": "gamegenie.rom",
"size": 4096,
"sha1": "aaa9833c3de2213f2b0326769b715651fd13fd84",
"md5": "8d699c97d164d406c2912aece164cd32",
"sha256": "503ed886914c5ae1ec0b256515a6b0248f4b27cf78cb7b86fc438410420cdb87",
"crc32": "1a3a22a1",
"adler32": "e3b5aa9e",
"provenance": {
"no-intro": {
"dat": "Nintendo - Nintendo Entertainment System (Headerless)",
"name": "[BIOS] Game Genie (USA, Europe) (Unl).unh",
"description": "[BIOS] Game Genie (USA, Europe) (Unl)"
}
}
},
"8ed9fb83d8e4d73217d347e3b7965cb640cb8395": {
"path": "bios/Other/punes/nes20db.xml",
"name": "nes20db.xml",
@@ -98047,9 +98084,11 @@
"46a02fc4775b3d959f3f949a70eaa616": "52d1bbeed17f2a2240cb38249dba3663ad0b8a1f",
"90644bd658fd0922d28eccb7cfb7cb76": "17c354249ddbfaf20b570d3c5e33b693e36646aa",
"6a32c39d8ac24bd56a03d79299b0a8f1": "dbda9a9fd882af929b17cd2de1a975e7f1b93361",
"d10635cb6f101ed733f3d1133bc78f61": "14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc",
"8ae8c9470f399d125360a47e9968335e": "b2fc3bb96c0c4d315926eb7bd705441c75d84ec2",
"b956c537e7b6b85ffa5c3493b1490d8a": "8e14e85c645187504ec9d162b3ea614a0c421d32",
"4431aea380185e3f509285540d7cb418": "12a2e718f5f4acd69b6c33a45a4a940b1440a481",
"1179939a20ffa397b9c45b9e7eb9ae3a": "e7d3caf9691a6c82859903f54232d17474d7b0e7",
"f29d49006080c3080baab7b851e1cf68": "16e3c6698a10547c228b8ab474b817ff1d64c216",
"7786f30131c98baca83ec313281cfa6a": "e3df9d90adb0d44c43cb70b4fd3887c7ddbef1cf",
"b4c8c434df1f038c76e5221cc6adca0c": "f92d854f017d154c9ae0a2351629876515ba48d7",
@@ -98171,6 +98210,7 @@
"3dff921882350953a32fee6af5611668": "1727e16cb9a6a59c01e18f6694ef70dee87e3a7b",
"1164ae723c9181698cc41dde6a341132": "8a799c6615702aac72016b784e30ea1abd3e197b",
"05e1d1a0c8ecd45537a1d52ab925d110": "0f25848f73705328ca03b02905e95e3a5d087d8c",
"8d699c97d164d406c2912aece164cd32": "aaa9833c3de2213f2b0326769b715651fd13fd84",
"18207ca5b15ba7d05742dca8399d30c6": "8ed9fb83d8e4d73217d347e3b7965cb640cb8395",
"76a2309db9eef5b633c6ebc0243c6a23": "321262242e15dff4bc1f843011ac370e6943d6e3",
"2f1bdc689878416c12190513ef4ff64f": "6393396eaa10a84b9e9f0cf5930aba73defc5c52",
@@ -116052,6 +116092,9 @@
"quit.system.bin": [
"dbda9a9fd882af929b17cd2de1a975e7f1b93361"
],
"Controls.png": [
"14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc"
],
"MasterGear-Cheats.zip": [
"b2fc3bb96c0c4d315926eb7bd705441c75d84ec2"
],
@@ -116061,6 +116104,9 @@
"apple2e-kb.rom": [
"12a2e718f5f4acd69b6c33a45a4a940b1440a481"
],
"gg.rom": [
"e7d3caf9691a6c82859903f54232d17474d7b0e7"
],
"ReelGradientMask.bmp": [
"16e3c6698a10547c228b8ab474b817ff1d64c216"
],
@@ -116395,6 +116441,9 @@
"dip.cfg": [
"0f25848f73705328ca03b02905e95e3a5d087d8c"
],
"gamegenie.rom": [
"aaa9833c3de2213f2b0326769b715651fd13fd84"
],
"nes20db.xml": [
"8ed9fb83d8e4d73217d347e3b7965cb640cb8395"
],
@@ -135124,9 +135173,11 @@
"00bac1b9": "52d1bbeed17f2a2240cb38249dba3663ad0b8a1f",
"e0219738": "17c354249ddbfaf20b570d3c5e33b693e36646aa",
"d15052ad": "dbda9a9fd882af929b17cd2de1a975e7f1b93361",
"dc9da322": "14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc",
"23f6d752": "b2fc3bb96c0c4d315926eb7bd705441c75d84ec2",
"c506efb9": "8e14e85c645187504ec9d162b3ea614a0c421d32",
"e47045f4": "12a2e718f5f4acd69b6c33a45a4a940b1440a481",
"2561948a": "e7d3caf9691a6c82859903f54232d17474d7b0e7",
"094ecf8e": "16e3c6698a10547c228b8ab474b817ff1d64c216",
"752ae60e": "e3df9d90adb0d44c43cb70b4fd3887c7ddbef1cf",
"96c57522": "f92d854f017d154c9ae0a2351629876515ba48d7",
@@ -135248,6 +135299,7 @@
"d08a4694": "1727e16cb9a6a59c01e18f6694ef70dee87e3a7b",
"a4626dfa": "8a799c6615702aac72016b784e30ea1abd3e197b",
"84f47dc9": "0f25848f73705328ca03b02905e95e3a5d087d8c",
"1a3a22a1": "aaa9833c3de2213f2b0326769b715651fd13fd84",
"79b7fdc4": "8ed9fb83d8e4d73217d347e3b7965cb640cb8395",
"df8ab696": "321262242e15dff4bc1f843011ac370e6943d6e3",
"3a738aa9": "6393396eaa10a84b9e9f0cf5930aba73defc5c52",
@@ -143921,9 +143973,11 @@
"331f64cf5d1bd1bafd28aa527f753bd20bb42c0d7692c335ac5498c296aeb4c2": "52d1bbeed17f2a2240cb38249dba3663ad0b8a1f",
"df45f0e82a2a96a8bddb6af408284f6d38160aaa100895e722e9f4bbe32f9e5b": "17c354249ddbfaf20b570d3c5e33b693e36646aa",
"2010e843a290cd70d0936baa2e647d93a455f2c016dfa49d3a806b1d450b71cb": "dbda9a9fd882af929b17cd2de1a975e7f1b93361",
"aa6d2236eaeb23bde1f1d99178ddefe9420251597a4096edb8d2153b84e818ad": "14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc",
"7abf93ecf0fc325865e6564c9795b6d1effb8d5814b09739b81820ca771477f9": "b2fc3bb96c0c4d315926eb7bd705441c75d84ec2",
"a1989da84ea4381d309e7e08783771f884e913236b9bcc71c3d649aacf76537a": "8e14e85c645187504ec9d162b3ea614a0c421d32",
"fbb9620e01f4f728e5a8ba86544900978d7803f6a7d577d384e288dfed9a4907": "12a2e718f5f4acd69b6c33a45a4a940b1440a481",
"c8bfbb36b2bd14b9fcd6de180f9b240c1e219f7970262c162adcc2d0510fa47c": "e7d3caf9691a6c82859903f54232d17474d7b0e7",
"68db230ab6261f452de8d59fb48110d5d012f5a448cbc77afc1ed487c9b039ce": "16e3c6698a10547c228b8ab474b817ff1d64c216",
"ba0cd5ef1ceddcab1498a62935106e59a9682b4aea996106b2f3295fbd6fd1cd": "e3df9d90adb0d44c43cb70b4fd3887c7ddbef1cf",
"a2b5477bddbdf966c5c72f46a0ad2d54ac27147a4c47acfdf18b6941332e385a": "f92d854f017d154c9ae0a2351629876515ba48d7",
@@ -144045,6 +144099,7 @@
"f9a37b36655f23e167c66ec91bef6097c8e99be29286219a54062919eb41aeae": "1727e16cb9a6a59c01e18f6694ef70dee87e3a7b",
"29e6e18023cf39319f9984107f5f0f796b2593b1c3a55fc79adf3ae12498a6ce": "8a799c6615702aac72016b784e30ea1abd3e197b",
"0406c436e54064b938ffe855e1ad0abb362d67f009781a5dce79b044bcd68115": "0f25848f73705328ca03b02905e95e3a5d087d8c",
"503ed886914c5ae1ec0b256515a6b0248f4b27cf78cb7b86fc438410420cdb87": "aaa9833c3de2213f2b0326769b715651fd13fd84",
"a60757b92f2f3df9447aa50e004aabe9f4cb0845bb037afca118ff89b5913ae3": "8ed9fb83d8e4d73217d347e3b7965cb640cb8395",
"010fd04e1a7b48583685a5554f12ecff8db681c926caa1814f148d552ca53708": "321262242e15dff4bc1f843011ac370e6943d6e3",
"6c1e5d5ccd280ee01d9f852b60ddec07e719a45699a6220eabd50df9999632c6": "6393396eaa10a84b9e9f0cf5930aba73defc5c52",
+195
View File
@@ -0,0 +1,195 @@
emulator: MasterGear
type: standalone
core_classification: other
source: "https://fms.komkon.org/MG/"
upstream: closed-source
author: "Marat Fayzullin (Garage Research)"
profiled_date: "2026-08-12"
core_version: "4.9"
display_name: "Sega - Master System / Game Gear (MasterGear)"
cores:
- mastergear
- MASTERGEAR
- com.fms.mg
systems:
- sega-mastersystem
- sega-gamegear
- sega-sg1000
- sega-sc3000
- sega-sf7000
mode: standalone
notes: |
Sega 8bit emulator by Marat Fayzullin, covering Mark3, MasterSystem,
MasterSystem 2, GameGear, SG1000, the keyboard-equipped SC3000 and the
disk-based SF7000. Two builds of version 4.9 were read. The Android package
com.fms.mg is sold on Google Play and not carried on the author's site, so it
came from a mirror; that copy has versionName 4.9, versionCode 4900, sha256
11c3f3331d6774739c11dfd604f74f545a17ceba3feb7fb294f02bd80943af35, md5
2cb4df11254f8525e0a2253677450555, and is accepted because its v1 certificate
is the author's own key, CN=Marat Fayzullin O=Garage Research issued 2011,
fingerprint d09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848,
beside a Play distribution source stamp in the signing block. The free MG 4.9
builds for Windows and Ubuntu, published by the author, were read next to it
and open the same files. The native libraries keep their symbol tables, so
the Android readings below cite libmain.so offsets in the x86_64 slice; the
arm64-v8a, armeabi-v7a, armeabi and x86 slices carry the same filename set.
No source has ever been published: the site states the code is not available
to the general public and the documentation repeats it, while ColEm and fMSX
on the same site ship source archives.
ref: MG-Android-4900.apk META-INF/CERT.RSA, https://fms.komkon.org/MG/,
MG.html "There is no version of MG for my Unix!",
MG49-Windows-bin.zip, MG49-Ubuntu-x86-bin.tgz
SF7000.ROM is the only system ROM either binary names, and it is read through
the cartridge loader. ResetSMS loads it whenever the requested hardware
becomes SF7000; LoadROM returning zero makes ResetSMS clear the SF7000 bits
and restore the previous hardware, so LoadDSK finds the machine still is not
an SF7000, ejects the image and fails, logging "Failed switching into SF7000
mode." when verbose output is on. Nothing about the file is checked: the size
comes from a seek to the end, is rounded up to the first power of two of at
least 16kB, and the buffer is filled with FFh before the read, so a short
image is padded rather than refused. When bit 15 of the mode word is set, a
successful load is followed by patching the image at eight fixed addresses,
0008h, 0010h, 0018h, 0020h, 0028h, 0030h, 107Ch and 10F8h, with an EDh FEh
C9h trap and a checksum byte.
ref: libmain.so ResetSMS 0x435a0-0x43b0d (LoadROM 0x43604, revert 0x4367d,
patch loop 0x43619-0x4367b), LoadROM 0x43c80-0x4451a (open 0x43db3,
size 0x43dfa-0x43f1a, read 0x43f4f), LoadDSK 0x46db0-0x46ecb,
MG49-Ubuntu-x86-bin mg 0x3d0fd-0x3d124, 0x3c330 (0x3ca58)
The other machines need no file. SEGA consoles boot from a small ROM that
switches itself off and hands the hardware to the cartridge, which MG does
not emulate, so MasterSystem, GameGear, SG1000 and SC3000 start straight into
the cartridge. SC3000 mode adds the keyboard and 32kB of RAM, and its BASIC
arrives as a cartridge like any other program: the packaged title database
keys Basic 2.10 and Basic 3.10 by cartridge CRC32 under the SC3000 heading.
ref: MG.html "What are MasterSystem and GameGear?", "How do I use SC3000
keyboard?", assets/names.dat
On Android one directory holds everything. MainActivity hands EMULib.k() to
jniStart, which copies it into the buffer GetHomeDir returns and passes that
same buffer to SetPrivateDir. Every open goes through mopen, then
OpenRealFile, which tries the name as given and again as
<PrivateDir>/<basename>, keeping the larger of the two when both open. That
directory is external storage joined with the application label up to its
first space, so /sdcard/MasterGear, falling back to getExternalFilesDirs(null)
when it is not a writable directory; the author's own cheat file writes the
same path out in full. The desktop builds have no such directory and open
every name where they stand, which the documentation states as the current
directory. Every one of these opens ends in zlib, mopen handing the
descriptor OpenRealFile returned to gzdopen while the disk loader and the
desktop builds call gzopen straight, so each file also opens gzipped, and on
Android a content:// name is routed to the Android storage framework instead.
ref: MainActivity.java:2265-2276, EMULib.java:456, 494-553, 688-698,
libmain.so jniStart 0x18bb0-0x193e1 (0x1921c, 0x1926c),
SetPrivateDir 0x38f80, OpenRealFile 0x39190-0x393c3,
mopen 0x393d0-0x3959d, LoadFDI 0x558f7,
MG.html "How do I use SF7000 disk images?",
EmuAndroid "System ROMs", MasterGear-Cheats.zip ROOT.chts
files:
- name: SF7000.ROM
system: sega-sf7000
required: true
size: 8192
description: "SF7000 IPL, read into the cartridge window before the machine starts"
note: "Loaded whenever the hardware becomes SF7000, and the only fixed ROM name in the binary. A failed open drops the emulator back to the previous hardware, which makes every disk image refuse to mount. The loader checks neither length nor contents, so the documented 8kB image is padded to 16kB with FFh and no hash is compared. Opened by bare name, so it resolves against the working directory and, on Android, against the home directory as well, and a gzipped copy answers too."
source_ref: "libmain.so ResetSMS 0x435a0-0x43b0d (LoadROM 0x43604), LoadROM 0x43c80-0x4451a, LoadDSK 0x46db0-0x46ecb, MG49-Ubuntu-x86-bin mg 0x3d0fd-0x3d124, MG.html \"How do I use SF7000 disk images?\""
- name: MasterGear-Cheats.zip
required: false
category: game_data
description: "cheat database read by the Cheatopedia browser"
note: "The Android build ships no cheat set. Cheatopedia looks for ROOT.chts in the package assets, then in the home directory and its subdirectories, and takes it from this archive in the Downloads directory, unpacking it into <HomeDir>/Cheats when it is newer. The author publishes it at fms.komkon.org/EmuAndroid/ and the copy read here carries ROOT.chts plus crystal-warriors-gg, dragon-crystal, gamegear, phantasy-star and ultima. No hash is recorded because the archive is refreshed in place at that address."
source_ref: "Cheatopedia.java:340-391, 414, 565-584"
- name: custom.chts
required: false
category: game_data
unsourceable: "cheat codes the user writes, in the format the documentation prints"
description: "user cheat sets added to the Cheatopedia menu"
note: "Pulled in by the File= directive that ROOT.chts carries, written out as /sdcard/MasterGear/custom.chts, and reached through the same lookup as any other set: package assets, then an absolute path, then the cheat directory."
source_ref: "Cheatopedia.java:504-508, 565-584, MasterGear-Cheats.zip ROOT.chts, EmuAndroid \"I want to add my own cheats to the Cheatopedia\""
- name: names.dat
required: false
bundled: true
unsourceable: "ships inside the paid application package"
category: game_data
size: 21161
description: "title database keyed by system and CRC32"
note: "Parsed from the package assets as lines of key colon title, keys reading SMS-0274179A. The copy at <HomeDir>/names.dat is read straight afterwards into the same map, so user entries extend and override the packaged ones."
source_ref: "FileInfo.java:260-308"
- name: changelog.html
required: false
bundled: true
unsourceable: "ships inside the paid application package"
category: game_data
size: 68201
description: "release history shown from the Android menu"
note: "Read whole from the package assets, and shown again through file:///android_asset/. No copy outside the package is consulted."
source_ref: "EMULib.java:1075, 1104"
- name: Controls.png
required: false
category: game_data
description: "virtual joystick skin"
note: "Read as <HomeDir>/Controls.png when the joystick shape is set to Custom Skin, and by the layout editor. The author publishes a 320x276 template at fms.komkon.org/EmuAndroid/Controls.png to draw over."
source_ref: "MainActivity.java:1809, LayoutEditor.java:99, EmuAndroid \"Can I set my own virtual joystick images?\""
- name: Backdrop.png
required: false
category: game_data
unsourceable: "any picture the user places behind the emulated screen"
description: "backdrop drawn around the emulated screen"
note: "Read as <HomeDir>/Backdrop.png while the decorum option is on. A built-in drawable stands in when the file is absent."
source_ref: "MainActivity.java:1047-1051"
- name: "<game>.back.png"
required: false
category: game_data
unsourceable: "any picture the user places behind one title"
description: "backdrop for one title"
note: "Named from the loaded ROM path and preferred over the shared backdrop for that game."
source_ref: "MainActivity.java:1047-1049"
- name: "<game>.ips"
required: false
category: game_data
unsourceable: "a patch the user supplies for one title"
description: "IPS patch applied to the loaded cartridge"
note: "Named from the ROM path by MakeFileName and applied by LoadIPS when present. A patch opened by hand reaches the same loader through LoadFile."
source_ref: "libmain.so LoadROM 0x444bf-0x444e1, LoadFile 0x43b10-0x43b9f, LoadIPS 0x467e0, ApplyIPS 0x5b1e0"
- name: "<name>.cht"
required: false
category: game_data
unsourceable: "cheat codes the user writes or collects"
description: "cheat codes loaded from the file selector"
note: "LoadFile compares the tail of the name against .CHT through a case folding compare and sends a match to LoadCHT, so the name is the one the user picked rather than one derived from the ROM path. The built-in menu writes edited cheats back under the same extension."
source_ref: "libmain.so LoadFile 0x43b10-0x43b2f, suffix compare 0x46a40-0x46b8f, LoadCHT 0x46b90-0x46c9b, MenuSMS 0x48bf1"
exclusion_note: >
Left out are the files MG writes and reads back itself, which are emulator
state rather than anything a user obtains: <game>.sav holding cartridge SRAM,
which LoadROM writes out before loading the next cartridge and reads back
after it, <game>.sta and the desktop DEFAULT.STA fallback holding saved
emulation state, the replay files of the instant replay recorder, LOG.MID
holding the recorded MIDI soundtrack, the printer stream appended to by the
Z80 output port, and the <game>.png screenshots the Android build saves for
State Exchange. Cartridges and disk images are the user's own game content:
.sms, .gg, .sg, .sc and .sf images reach LoadROM, .dsk, .SF and .FDI images
reach LoadDSK and LoadFDI, and CART.SMS on Android and CART.ROM on the desktop
are only the names used when the emulator is started with no game at all.
SF7000.DSK is left out as a compiled-in default disk name that no code path in
either shipped build opens. assets/memfs.mp3 is left out as well: the in-memory
filesystem jniStart mounts carries one entry, dummy.txt, holding the text
"This is a dummy file.", and no name in the binary reaches it. The Android
audio and graphics libraries the loader opens by name are provided by the
system.
ref: libmain.so LoadROM 0x43cec, 0x44417, MIDILogging 0x2e4f0 (0x2e7f5),
OutZ80 0x44eb0 (0x450a8), LoadRPL 0x58b40-0x58d57,
SaveRPL 0x58920-0x58b3b, Application 0x41b70 (0x41da7), DSKName,
MG49-Ubuntu-x86-bin mg 0x4046f, 0x40497, MainActivity.java:1585
+1 -1
View File
@@ -226,7 +226,7 @@ files:
required: false
min_size: 4352
source_ref: "nes/cart.cpp:570-597, nes/nes.cpp:298-299, nes/nes.cpp:454-455"
note: "Loaded only when nes.gg is enabled; that setting defaults to 0. Path comes from nes.ggrom. A raw image is read as 4352 contiguous bytes. An iNES image takes 4096 bytes of PRG after the 16-byte header, then 256 bytes of CHR at offset 16400, so it needs at least 16656 bytes."
note: "Loaded only when nes.gg is enabled; that setting defaults to 0. Path comes from nes.ggrom. A raw image is read as 4352 contiguous bytes. An iNES image takes 4096 bytes of PRG after the 16-byte header, then 256 bytes of CHR at offset 16400, so it needs at least 16656 bytes. The image here is the raw form: the 4096 byte Game Genie PRG, crc 1a3a22a1, followed by the first 256 bytes of its CHR, both from the MAME ggenie set."
# --- pce and pce_fast ---