From 48a432d79c3375cafb7d84d71596afffa171c162 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Wed, 12 Aug 2026 01:43:35 +0200 Subject: [PATCH] feat: collect the game genie rom in both loader forms --- bios/Other/mastergear/Controls.png | Bin 0 -> 22587 bytes bios/Other/mednafen/gg.rom | Bin 0 -> 4352 bytes bios/Other/punes/gamegenie.rom | Bin 0 -> 4096 bytes database.json | 61 ++++++++- emulators/mastergear.yml | 195 +++++++++++++++++++++++++++++ emulators/mednafen.yml | 2 +- 6 files changed, 254 insertions(+), 4 deletions(-) create mode 100644 bios/Other/mastergear/Controls.png create mode 100644 bios/Other/mednafen/gg.rom create mode 100644 bios/Other/punes/gamegenie.rom create mode 100644 emulators/mastergear.yml diff --git a/bios/Other/mastergear/Controls.png b/bios/Other/mastergear/Controls.png new file mode 100644 index 0000000000000000000000000000000000000000..54f9b988ca02cc09d247796195a681d4afa0f0f7 GIT binary patch literal 22587 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 literal 0 HcmV?d00001 diff --git a/bios/Other/punes/gamegenie.rom b/bios/Other/punes/gamegenie.rom new file mode 100644 index 0000000000000000000000000000000000000000..d0908fbcf6f733c0b01d2f19d45c5fa11bffd170 GIT binary patch literal 4096 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 VGdHt2r|b48=rgVLq=TGH=6~b0s-6G< literal 0 HcmV?d00001 diff --git a/database.json b/database.json index 8c7c0efe..cfd43cb6 100644 --- a/database.json +++ b/database.json @@ -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", diff --git a/emulators/mastergear.yml b/emulators/mastergear.yml new file mode 100644 index 00000000..ea9b7dda --- /dev/null +++ b/emulators/mastergear.yml @@ -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 + /, 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 /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 /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 /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 /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: ".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: ".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: ".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: .sav holding cartridge SRAM, + which LoadROM writes out before loading the next cartridge and reads back + after it, .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 .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 diff --git a/emulators/mednafen.yml b/emulators/mednafen.yml index 19a552ed..36ba5de9 100644 --- a/emulators/mednafen.yml +++ b/emulators/mednafen.yml @@ -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 ---