diff --git a/emulators/mame4droid-current.yml b/emulators/mame4droid-current.yml new file mode 100644 index 00000000..1a3d5b22 --- /dev/null +++ b/emulators/mame4droid-current.yml @@ -0,0 +1,35 @@ +emulator: MAME4droid (Current) +type: alias +alias_of: mame4droid-2024 +core_classification: alias +source: "https://github.com/seleuco/MAME4droid-Current" +upstream: "https://github.com/mamedev/mame/tree/mame0289" +profiled_date: "2026-08-11" +source_commit: "32d781923fc0fb7621f3d78903f1b37fd4a5694a" +upstream_commit: "f34f02505e32c1993c6a782b6814232cbfc74e36" +core_version: "1.38.1" +display_name: "Arcade (MAME4droid Current)" + +cores: + - mame4droid-current + +note: | + Android port of MAME by David Valdeita (Seleuco), application id + com.seleuco.mame4d2024, release 1.38.1 + (android-MAME4droid/app/build.gradle:20,24) on MAME 0.289 (README.md:4). + + The app shipped as MAME4droid 2024 from its first release on 2023-12-17 to + 1.19 on MAME 0.272. Release 1.20 moved to MAME 0.273 and renamed it + MAME4droid (Current) + (android-MAME4droid/app/src/main/assets/changelog.htm:74,55,54), the name + android-MAME4droid/app/src/main/res/values/strings.xml:4 carries. The + repository was renamed with it: seleuco/MAME4droid-2024 resolves to + seleuco/MAME4droid-Current. + + build.gradle declares no product flavor and the repository has a single + branch, so both names are the same package. The tree holds the Android OSD + and the patches applied over a stock MAME source tree (howtobuild.txt), so + the ROM sets are those of MAME 0.289. Files are mame4droid-2024's, pinned + to the same commit. + +files: [] diff --git a/emulators/mariani.yml b/emulators/mariani.yml new file mode 100644 index 00000000..478af242 --- /dev/null +++ b/emulators/mariani.yml @@ -0,0 +1,586 @@ +emulator: Mariani +type: standalone +core_classification: community_fork +source: "https://github.com/sh95014/AppleWin" +upstream: "https://github.com/AppleWin/AppleWin" +profiled_date: "2026-08-12" +source_commit: "492b017709fd67d3aff6b1d88d9971254e7214fa" +upstream_commit: "75bd90d16a2e4eb16026bf615685ee2a02dfc0d6" +core_version: "1.7" +display_name: "Apple - Apple II (Mariani)" +cores: + - mariani +systems: + - apple-ii +mode: standalone + +notes: | + Cocoa frontend for AppleWin, macOS only, shipped as Mariani.app and carrying + AppleWin 1.31.0.5 (resource/version.h). ES-DE launches it with --d1 for the + floppy in slot 6 drive 1. + + Resources are files inside the application bundle instead of Win32 resources + linked into the binary. MarianiFrame::GetResourceData maps each AppleWin + resource id to a file name, NSBundle resolves it against Contents/Resources, + and the file is read with open() then kept in a map for later requests + (MarianiFrame.cpp:156-232, AppDelegate.mm:1465-1469). LinuxFrame::GetResource + throws when the file it gets back does not have the size the call site asked + for (linuxframe.cpp:133-145), so each entry below carries the size the code + demands. A name that resolves to nothing raises a "Resource not found" alert + and returns a null pointer. + + Machine types offered in preferences: Apple II, II Plus, II J-Plus, //e, + enhanced //e, Pravets 82, Pravets 8M, Pravets 8A, TK3000 //e and Base64A + (PreferencesViewController.mm:191-193, 741-751). MemInitializeROM picks the + system ROM from that setting (Memory.cpp:2052-2069). Default slots are the + printer card in 1, Super Serial Card in 2, Mockingboard in 4 and Disk II in 6 + (CardManager.cpp:325-334); the hard disk and mouse cards are chosen by the + user. + + Two names in the resource map have no file in the bundle: the Resources build + phase lists 49 items and neither appears (Mariani.xcodeproj/project.pbxproj). + Hddrvr-v2.bin is requested when a save state written with hard disk card + version 4 is loaded (Harddisk.cpp:228, 1439-1443), and + Freezes_Non-autostart_F8_Rom.rom when the configuration value "The Freeze's + F8 Rom" is set on an Apple II (Memory.cpp:2163-2168, Utilities.cpp:188-189, + Common.h:94). Contents/Resources is the only directory searched, so that is + where the two belong. + + The debugger comes up with the emulator, not with its window + (context.cpp:116). CmdDebugStartup preloads four symbol tables + (Debug.cpp:9492-9520), each read first from + ~/Library/Application Support// and then from the bundle + (Debugger_Symbols.cpp:774, 814-817, MarianiFrame.cpp:36-37, + AppDelegate.mm:1471-1491). + + --rom and --f8rom install a 12k/16k and a 2k image from any path over the ROM + already loaded (argparser.cpp:197-198, programoptions.cpp:81-101, + Memory.cpp:2120-2213). AppleWin's -videorom and its hard disk firmware + switches are unreachable here: ParseCmdLine has no caller in this tree, and + UseHdcFirmwareV1/V2 are called only from Windows/AppleWin.cpp:783-785, which + the Xcode project does not compile. + +files: + - name: Apple2.rom + description: "Apple II system ROM, $D000 to $FFFF" + required: true + bundled: true + size: 12288 + md5: 3c406514b9806a7c57ee65fb0b0c39b4 + sha1: 09288be705464b608ff190519ab008d3dfcd1b05 + validation: [size] + source_ref: "source/Memory.cpp:2054, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:177" + note: "Loaded when the machine type is Apple II (original)." + + - name: Apple2_Plus.rom + description: "Apple II Plus system ROM, $D000 to $FFFF" + required: true + bundled: true + size: 12288 + md5: 572b3005a4fa49bc54917b069b82c1ab + sha1: 33a24f5489ba9195b44be77d9afb2252594cb5c7 + validation: [size] + source_ref: "source/Memory.cpp:2055, 2065-2069, 2126-2137, source/frontends/mariani/MarianiFrame.cpp:178" + note: > + Also read on an original Apple II with a language card in slot 0, where + MemInitializeCustomF8ROM copies its last 2 KB over the autostart F8 area. + + - name: Apple2_JPlus.rom + description: "Apple II J-Plus system ROM, $D000 to $FFFF" + required: true + bundled: true + size: 12288 + md5: f3e8237eca3809bec2a42b984a1332a8 + sha1: ad200b3263d08e7235d0871c8595963a07adc905 + validation: [size] + source_ref: "source/Memory.cpp:2056, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:179" + note: "Loaded when the machine type is Apple II J-Plus." + + - name: Apple2e.rom + description: "Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF" + required: true + bundled: true + size: 16384 + md5: 346bc782c6a08a531c460e33bc03daf4 + sha1: 61fa9254628e5bb7236fb474006116d67684d747 + validation: [size] + source_ref: "source/Memory.cpp:2057, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:180" + note: "Loaded when the machine type is Apple //e (original)." + + - name: Apple2e_Enhanced.rom + description: "Enhanced Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF" + required: true + bundled: true + size: 16384 + md5: 38063e08c778503fc03ecebb979769e9 + sha1: b8ea90abe135a0031065e01697c4a3a20d51198b + validation: [size] + source_ref: "source/Memory.cpp:2058, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:181" + note: "Default machine type." + + - name: PRAVETS82.ROM + description: "Pravets 82 system ROM, $D000 to $FFFF" + required: true + bundled: true + size: 12288 + md5: c619b7edfcf021f3b8fd20d9386676ba + sha1: 8bd7ced83e209a15e9b19a05a5ef4b8e996dc1a5 + validation: [size] + source_ref: "source/Memory.cpp:2059, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:182" + note: "Loaded when the machine type is Pravets 82." + + - name: PRAVETS8M.ROM + description: "Pravets 8M system ROM, $D000 to $FFFF" + required: true + bundled: true + size: 12288 + md5: 76c79535f7cf77973e2c711aa977a124 + sha1: f1b4ff018acf95f3355f0d575b66a188d728b687 + validation: [size] + source_ref: "source/Memory.cpp:2060, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:183" + note: "Loaded when the machine type is Pravets 8M." + + - name: PRAVETS8C.ROM + description: "Pravets 8A system ROM, 4 KB internal Cx ROM then $D000 to $FFFF" + required: true + bundled: true + size: 16384 + md5: 1896d7b98dd940c89f7c8ea899b71006 + sha1: c976fe56e57706c161f513a82ba3e0d8cda83904 + validation: [size] + source_ref: "source/Memory.cpp:2061, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:184" + note: "Loaded when the machine type is Pravets 8A." + + - name: TK3000e.rom + description: "TK3000 //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF" + required: true + bundled: true + size: 16384 + md5: 8d84b614b545d4eec8799d3f325332cb + sha1: f163e5753c18ff0e812a448e8da406f102600edf + validation: [size] + source_ref: "source/Memory.cpp:2062, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:185" + note: "Loaded when the machine type is TK3000 //e." + + - name: Base64A.rom + description: "Base64A system ROM, four 12 KB pages" + required: true + bundled: true + size: 49152 + md5: 352fdbcae14c6a8c0398822c7a273309 + sha1: f1c779af480b5bda2bdd03950c1201a5c5143bea + validation: [size] + source_ref: "source/Memory.cpp:2063, source/Memory.cpp:2065-2069, source/Memory.cpp:2114-2117, source/frontends/mariani/MarianiFrame.cpp:186" + note: "Loaded when the machine type is Base64A. Copied into memrom as MaxRomPages pages of 12 KB." + + - name: Freezes_Non-autostart_F8_Rom.rom + description: "Non-autostart F8 monitor ROM" + required: false + size: 2048 + md5: d0a61e95ed1e1dc37c8e4801326aa79e + sha1: 3180be6b555ee9ef1f59c4fc3f25c5aab8c39c81 + validation: [size] + source_ref: "source/Memory.cpp:2163-2168, source/Utilities.cpp:188-189, source/Common.h:94, source/frontends/mariani/MarianiFrame.cpp:187" + note: > + MemInitializeCustomF8ROM copies it over $F800 to $FFFF when the + configuration value "The Freeze's F8 Rom" is set and the machine is an + Apple II. The application bundle does not ship it, so it has to be placed + in Contents/Resources, the only directory PathToResourceNamed searches. + + - name: Apple2_Video.rom + description: "Apple II and II Plus character generator" + required: true + bundled: true + size: 2048 + md5: 9ac0dc8c4d0002eb45b0b84be0bde5ec + sha1: f9d312f128c9557d9d6ac03bfad6c3ddf83e5659 + validation: [size] + source_ref: "source/NTSC_CharSet.cpp:249-256, 296, source/frontends/mariani/MarianiFrame.cpp:189" + note: "make_csbits reads it on every start, whatever the machine type." + + - name: Apple2_JPlus_Video.rom + description: "Apple II J-Plus character generator" + required: true + bundled: true + size: 2048 + md5: 271e2c9bf928b95e7baeff391db45495 + sha1: 0a382be58db5215c4a3de53b19a72fab660d5da2 + validation: [size] + source_ref: "source/NTSC_CharSet.cpp:258-266, 303, source/frontends/mariani/MarianiFrame.cpp:190" + note: "Read on every start. Fills the two J-Plus character sets selected by AN2." + + - name: Apple2e_Enhanced_Video.rom + description: "Apple //e character generator, US" + required: true + bundled: true + size: 4096 + md5: 9123fff3442c0e688cc6816be88dd4ab + sha1: b2b5d87f52693817fc747df087a4aa1ddcdb1f10 + validation: [size] + source_ref: "source/NTSC_CharSet.cpp:278-285, 297, 299-301, source/frontends/mariani/MarianiFrame.cpp:191" + note: > + Read on every start. The original //e set is derived from it by putting + the non-alt characters back over the 32 mousetext slots. + + - name: Base64A_German_Video.rom + description: "Base64A character generator" + required: true + bundled: true + size: 4096 + md5: 4b45852b369e2afd864a02d0d91f70dc + sha1: 87ca8135f7526ddf829f9c2c4f7dbe4d568818fc + validation: [size] + source_ref: "source/NTSC_CharSet.cpp:268-276, 304, source/frontends/mariani/MarianiFrame.cpp:192" + note: "Read on every start. Split in two 2 KB halves for the two character sets." + + - name: CHARSET82.bmp + description: "Pravets 82 character generator bitmap" + required: true + bundled: true + size: 8254 + md5: 5b4866713477fdb08bb2a78d2d86ceb0 + sha1: 34718c242ccc539c54b456eca84286421ad24166 + source_ref: "source/NTSC_CharSet.cpp:291, source/frontends/mariani/MarianiFrame.cpp:52-61" + note: > + Read through GetBitmap on every start, decoded with ImageIO and packed + eight pixels to the octet. No size check: the copy stops at the shorter of + the image and the requested buffer. + + - name: CHARSET8M.bmp + description: "Pravets 8M character generator bitmap" + required: true + bundled: true + size: 8254 + md5: f2720f70859026c76e07fc598fbe435f + sha1: cfbdbc1d76542f2a60dbbbdf9deb218ee197351e + source_ref: "source/NTSC_CharSet.cpp:292, source/frontends/mariani/MarianiFrame.cpp:52-61" + note: "Read through GetBitmap on every start." + + - name: CHARSET8C.bmp + description: "Pravets 8A character generator bitmap, both character sets" + required: true + bundled: true + size: 16446 + md5: 9248c1f19f3d3277a031f46a19b2e350 + sha1: 0ec9ebe6542ca8f89ed4a7c417716b287a75b48e + source_ref: "source/NTSC_CharSet.cpp:293-294, source/frontends/mariani/MarianiFrame.cpp:52-61" + note: "Read twice, at row 0 for the alt character set off and at row 16 for on." + + - name: DISK2.rom + description: "Disk II controller firmware, 16 sector" + required: true + bundled: true + size: 256 + md5: 2020aa1413ff77fe29353f3ee72dc295 + sha1: d4181c9f046aafc3fb326b381baac809d9e38d16 + validation: [size] + source_ref: "source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2108, source/frontends/mariani/MarianiFrame.cpp:166" + note: > + Read when the Disk II card initialises, which is slot 6 by default. Both + firmware images are read up front and the one installed at $C600 follows + the boot sector format of the inserted image. + + - name: DISK2-13sector.rom + description: "Disk II controller firmware, 13 sector" + required: true + bundled: true + size: 256 + md5: 4f80448507cf43ab40c17ac08d89e278 + sha1: afd060e6f35faf3bb0146fa889fc787adf56330a + validation: [size] + source_ref: "source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2106, source/frontends/mariani/MarianiFrame.cpp:165" + note: "Read alongside the 16 sector image when the Disk II card initialises." + + - name: SSC.rom + description: "Super Serial Card firmware" + required: true + bundled: true + size: 2048 + md5: 67c0d61ab0911183faf05270f881a97e + sha1: 6dab633470c6bc4cb3e81d09fda46597caf8ee57 + validation: [size] + source_ref: "source/SerialComms.cpp:957-970, source/frontends/mariani/MarianiFrame.cpp:167" + note: > + Read when the card initialises, slot 2 by default. The 256 bytes at + offset 0x700 go to the slot ROM and the whole 2 KB stays as expansion ROM. + + - name: Parallel.rom + description: "Parallel printer card firmware" + required: true + bundled: true + size: 256 + md5: 5902996f16dc78fc013f6e1db14805b3 + sha1: c75c751589cbcc1ad4ab4f63676af7abadd86f5b + validation: [size] + source_ref: "source/ParallelPrinter.cpp:43-52, source/frontends/mariani/MarianiFrame.cpp:171" + note: "Read when the printer card initialises, slot 1 by default." + + - name: MouseInterface.rom + description: "Mouse interface card firmware" + required: false + bundled: true + size: 2048 + md5: 22563ab338024dac7b03510371d49c57 + sha1: 3a9d881a8a8d30f55b9719aceebbcf717f829d6f + validation: [size] + source_ref: "source/MouseInterface.cpp:163-176, source/frontends/mariani/MarianiFrame.cpp:173" + note: "Read only when the user puts the mouse card in a slot. No default slot holds it." + + - name: HDC-SmartPort.bin + description: "Hard disk controller firmware, SmartPort" + required: false + bundled: true + size: 256 + md5: 2592efa1d34ade55d490a1b39911c9b2 + sha1: fd557998fd5823ad69a42ad1282e4fe47db02dca + validation: [size] + source_ref: "source/Harddisk.cpp:222-241, source/frontends/mariani/MarianiFrame.cpp:170" + note: > + Default firmware of the hard disk card, which no slot holds until the user + adds it. Block mode and drive count are patched into the copy afterwards. + + - name: Hddrvr.bin + description: "Hard disk controller firmware, version 1" + required: false + bundled: true + size: 256 + md5: e0a40e9166af27b16f60beb83c9233f0 + sha1: 69667800c54da1d4466e7b2168c0e418a4cf586c + validation: [size] + source_ref: "source/Harddisk.cpp:227, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1441, source/frontends/mariani/MarianiFrame.cpp:168" + note: "Selected over the SmartPort firmware when a save state carries a hard disk card older than version 4." + + - name: Hddrvr-v2.bin + description: "Hard disk controller firmware, version 2" + required: false + size: 256 + md5: a49e45e7a6d4de23e0845a59c7e31e0c + sha1: 06115eebb4d58221b5c062a42bf3e41e137447ed + validation: [size] + source_ref: "source/Harddisk.cpp:228, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1443, source/frontends/mariani/MarianiFrame.cpp:169" + note: > + Selected when a save state carries hard disk card version 4. The + application bundle does not ship it, so it has to be placed in + Contents/Resources for that state to restore. + + - name: bootsector.bin + description: "Boot sector written to a new DOS 3.3 disk image" + required: false + bundled: true + size: 256 + md5: 6ab4d0a20071dad38154a7c0278beee6 + sha1: 3b0d57ff9abb3302cc949f7e0cc71d38ea5a89ce + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:832-836, source/frontends/mariani/MarianiFrame.cpp:194" + note: "Read by the Disk Maker window when it formats an image without copying DOS 3.3." + + - name: bootsector_prodos243.bin + description: "Two boot sectors written to a new ProDOS disk image" + required: false + bundled: true + size: 1024 + md5: 2695dc5458076eb747b9f245dd1a7ed9 + sha1: e2f1b6342efff3a39fafd239f200707bc7494592 + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:792-796, source/frontends/mariani/MarianiFrame.cpp:195" + note: "Read by the Disk Maker window when it creates a ProDOS image." + + - name: dos33c.bin + description: "DOS 3.3 image copied to the first three tracks of a new disk" + required: false + bundled: true + size: 12288 + md5: 46a02fc4775b3d959f3f949a70eaa616 + sha1: 52d1bbeed17f2a2240cb38249dba3663ad0b8a1f + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:774-778, source/frontends/mariani/MarianiFrame.cpp:196" + note: "Read by the Disk Maker window when DOS 3.3 is copied onto the new image." + + - name: prodos243.bin + description: "ProDOS 2.4.3 kernel written as PRODOS on a new ProDOS disk" + required: false + bundled: true + size: 17128 + md5: 90644bd658fd0922d28eccb7cfb7cb76 + sha1: 17c354249ddbfaf20b570d3c5e33b693e36646aa + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:595-599, source/frontends/mariani/MarianiFrame.cpp:197" + note: "Read by the Disk Maker window when the ProDOS system file is copied." + + - name: bitsy.boot.bin + description: "Bitsy Boot system file for a new ProDOS disk" + required: false + bundled: true + size: 365 + md5: e6e8f7edc3ae48f827a97090cdca741c + sha1: 474c2b0c666239c76fce07e1c96471650431a2d6 + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:509-513, source/frontends/mariani/MarianiFrame.cpp:198" + note: "Read by the Disk Maker window when Bitsy Boot is copied." + + - name: quit.system.bin + description: "Bitsy Bye quit system file for a new ProDOS disk" + required: false + bundled: true + size: 56 + md5: 6a32c39d8ac24bd56a03d79299b0a8f1 + sha1: dbda9a9fd882af929b17cd2de1a975e7f1b93361 + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:552-556, source/frontends/mariani/MarianiFrame.cpp:199" + note: "Read by the Disk Maker window when Bitsy Bye is copied." + + - name: basic17.system.bin + description: "BASIC.SYSTEM 1.7 written to a new ProDOS disk" + required: false + bundled: true + size: 10240 + md5: a8d8c08f5cb4a9480389477c6c2f2834 + sha1: 6ba0571dee8da75f5c1736854e206eb9d2601fac + validation: [size] + source_ref: "source/ProDOS_Utils.cpp:467-471, source/frontends/mariani/MarianiFrame.cpp:200" + note: "Read by the Disk Maker window when BASIC.SYSTEM is copied." + + - name: APPLE2E.SYM + description: "Debugger symbol table for the main ROM" + required: false + bundled: true + size: 13444 + md5: 034527d42a96d0f39977cb85c6a8f2d8 + sha1: fcfbbb25e06f58d13e762b02bfd468c834d98fc8 + source_ref: "source/Debugger/Debugger_Symbols.cpp:46, 774, 814-817, source/Debugger/Debug.cpp:9499-9500" + note: > + Preloaded into the Main table when the emulator starts. Read from the + support directory first, then from the bundle. Parsed as lines of address + and name, with no size or hash check. + + - name: A2_BASIC.SYM + description: "Debugger symbol table for Applesoft BASIC" + required: false + bundled: true + size: 15378 + md5: 7253a9ba7d7ca807016f5adc0207dd7b + sha1: 496a0bd1af463fce81b362da9e4757a993e355d5 + source_ref: "source/Debugger/Debugger_Symbols.cpp:47, 774, 814-817, source/Debugger/Debug.cpp:9502-9503" + note: "Preloaded into the Basic table when the emulator starts." + + - name: A2_DOS33.SYM2 + description: "Debugger symbol script for DOS 3.3" + required: false + size: 2380 + md5: 88bd69906b4b3109b3f31472fb4b47f4 + sha1: 51cc84e2cbd9bd61d50a0931cdae0a2ef0a57d6c + source_ref: "source/Debugger/Debugger_Symbols.cpp:53, 774-806, source/Debugger/Debug.cpp:9506-9507" + note: > + Preloaded into the DOS33 table when the emulator starts. The .SYM2 + extension routes it through the debugger script reader instead of the + symbol parser, so it is only read from the support directory. The + application bundle does not ship it. + + - name: PrintChar21.ttf + description: "Print Char 21 font used by the debugger console and inspector" + required: false + bundled: true + size: 501992 + md5: 972ce55fa7b905a494de16a7e8ec1949 + sha1: c66c1955dac84a253a661720a7947150c109f315 + source_ref: "source/frontends/mariani/debugger/ConsoleViewController.mm:74, source/frontends/mariani/debugger/InspectorOutlineViewController.mm:356, source/frontends/mariani/debugger/CharacterMappings.mm:13-142, source/frontends/mariani/Mariani-Info.plist:5-6" + note: > + Registered from the resource folder by ATSApplicationFontsPath and asked + for by family name. CharacterMappings maps Apple II character values to + its codepoints. + +analysis: + bundle_layout: + resource_folder: "Mariani.app/Contents/Resources" + lookup: "NSBundle pathForResource, no fallback directory" + reader: "open() and read(), cached per resource id in MarianiFrame::roms" + size_check: "LinuxFrame::GetResource throws when the size differs from the one the call site expects" + missing_file: "modal alert titled Resource not found, then a null pointer" + source_ref: "source/frontends/mariani/MarianiFrame.cpp:156-232, source/frontends/mariani/AppDelegate.mm:1465-1469, source/linux/linuxframe.cpp:133-145" + + support_directory: + path: "~/Library/Application Support//" + holds: "debugger symbol tables, debugger scripts, printer output, g_sProgramDir" + source_ref: "source/frontends/mariani/AppDelegate.mm:1471-1485, source/frontends/mariani/MarianiFrame.cpp:36" + + unreachable_resources: + - filename: Mockingboard-D.rom + reason: "IDR_MOCKINGBOARD_D_FW appears only in the resource header and in the frontend's name table; nothing requests it" + source_ref: "resource/resource.h:38, source/frontends/mariani/MarianiFrame.cpp:172" + - filename: TKClock.rom + reason: "IDR_TKCLOCK_FW appears only in the resource header and in the frontend's name table; nothing requests it" + source_ref: "resource/resource.h:51, source/frontends/mariani/MarianiFrame.cpp:175" + - filename: ThunderClockPlus.rom + reason: > + Its only consumer, LoadRom_Clock_ThunderClockPlus, has no caller in the + tree, reads through the Win32 FindResource API and lives in a file the + Xcode project never compiles + source_ref: "source/Peripheral_Clock_ThunderClockPlus.cpp:200-215, resource/resource.h:40" + - filename: Debug_Font.bmp + reason: > + IDB_DEBUG_FONT_7_by_8 is fetched with Win32 LoadBitmap against the + Windows frame, and MarianiFrame::GetBitmap answers only the three + CHARSET ids. Mariani draws its debugger with AppKit + source_ref: "source/Debugger/Debugger_Display.cpp:595, source/frontends/mariani/MarianiFrame.cpp:52-65" + + symbol_tables: + lookup: "g_sProgramDir then g_sBuiltinSymbolsDir, which is the folder holding the bundled .SYM files" + source_ref: "source/Debugger/Debugger_Symbols.cpp:45-55, 774, 814-817, source/frontends/mariani/AppDelegate.mm:1487-1491" + preloaded_at_init: + - APPLE2E.SYM + - A2_BASIC.SYM + - A2_DOS33.SYM2 + - A2_USER1.SYM + loaded_on_command: + - A2_ASM.SYM + - A2_USER2.SYM + - A2_SRC1.SYM + - A2_SRC2.SYM + - A2_PRODOS.SYM + note: > + DebugInitialize runs from InitialiseEmulator, so the preload happens even + when the debugger window is never opened. Only APPLE2E.SYM and A2_BASIC.SYM + are in the bundle. The user slots and the source and assembler tables have + no distributed content and are written by whoever needs them; a missing + table leaves the debugger running without those names. + + debugger_scripts: + - filename: DebuggerAutoRun.txt + source_ref: "source/Debugger/Debug.cpp:365, source/Debugger/Debug.cpp:9440-9473" + note: > + Run once at the first DebugInitialize, from the current directory and + then from the support directory. Holds debugger commands written by the + user; the copy in the source tree is empty. + + user_supplied_roms: + options: + - option: "--rom" + accepts: "12 KB image at $D000 or 16 KB image at $C000, any path" + source_ref: "source/frontends/common2/argparser.cpp:197, source/frontends/common2/programoptions.cpp:81-91, source/Memory.cpp:2173-2213" + - option: "--f8rom" + accepts: "2 KB image at $F800, any path" + source_ref: "source/frontends/common2/argparser.cpp:198, source/frontends/common2/programoptions.cpp:92-101, source/Memory.cpp:2139-2161" + note: > + Both are installed over the ROM already loaded from the bundle and neither + has a fixed name. AppleWin's -videorom has no equivalent: ParseCmdLine is + never called in this tree. + + generated_files: + written_only: + - AppleWin.log + - Trace.txt + - "save states" + - "screen recordings and screenshots" + - "printer spool file" + written_and_read_back: + - applewin.yaml + - AppleWinDebugger.cfg + note: > + applewin.yaml is the configuration registry, created under the settings + root and overridable with --conf and --registry. All of these are produced + by the emulator, none is user-supplied. + + help_book: + filename: Mariani.help + reason: "Help bundle opened by AppKit through CFBundleHelpBookName, not by emulator code" + source_ref: "source/frontends/mariani/Mariani-Info.plist:42-45, source/frontends/mariani/Base.lproj/MainMenu.xib:264" diff --git a/emulators/md-emu.yml b/emulators/md-emu.yml new file mode 100644 index 00000000..a3033764 --- /dev/null +++ b/emulators/md-emu.yml @@ -0,0 +1,137 @@ +emulator: "MD.emu" +type: standalone +core_classification: community_fork +source: "https://github.com/Rakashazi/emu-ex-plus-alpha" +upstream: "https://github.com/ekeeke/Genesis-Plus-GX" +profiled_date: "2026-08-12" +source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" +upstream_commit: "27426f00aa68f9f358c86919e8a40985326fa05b" +core_version: "1.5.85" +display_name: "Sega - MS/MD/CD (MD.emu)" +mode: standalone +cores: + - "md-emu" + - "MD.emu" + - "MD-EMU" +systems: + - sega-megadrive + - sega-megacd + - sega-mastersystem + +notes: | + Android and Linux member of the EX Emulator series by Robert Broglia, published + as com.explusalpha.MdEmu (MD.emu/metadata/conf.mk:2,4,6,7, README.md:3-4) and + reached by ES-DE through its MD-EMU find rule. Genesis Plus GX is vendored under + MD.emu/src/genplus-gx and driven by the app's own system, input and audio layers + (MD.emu/src/CMakeLists.txt:6-55), while the Sega CD hardware comes from the Gens + code PicoDrive carried (MD.emu/src/scd/LC89510.cc:1-7) and disc images are read + through Mednafen's CD layer (MD.emu/CMakeLists.txt:12). The build defines + LSB_FIRST, NO_SYSTEM_PICO and MDFN_CD_NO_CCD (MD.emu/CMakeLists.txt:25), leaving + Pico out and CD support in. Content is read from .bin, .smd, .md, .gen and .sms + cartridge images and from .cue, .iso and .chd discs (MD.emu/metadata/conf.mk:5, + MD.emu/src/main/system.ccm:91-101). A .sms name switches the machine to Power + Base Converter mode (MD.emu/src/genplus-gx/loadrom.cc:383-387); Game Gear and + SG-1000 sit inside #if 0 blocks in the renderer with no SYSTEM_GG or SYSTEM_SG + defined anywhere in the tree (MD.emu/src/genplus-gx/vdp_render.cc:934-962,974-989, + MD.emu/src/genplus-gx/system.h:35-40). + + The CD boot ROM is the one file the user supplies and it carries no name of its + own. Three pickers store arbitrary URIs under USA CD BIOS, Japan CD BIOS and + Europe CD BIOS, filtered on the cartridge extensions + (MD.emu/src/main/EmuMenuViews.cc:289-346, MD.emu/src/main/system.ccm:84-86,136, + MD.emu/src/main/options.cc:57-61,86-90). Loading a disc picks one of the three by + region: the Game Region setting when it is not Auto, otherwise byte 0x20b of the + boot sector, 0x7a for USA, 0x64 for Europe, anything else Japan + (MD.emu/src/main/Main.cc:254-264,311-332, + MD.emu/src/main/EmuMenuViews.cc:132-144,167-170, MD.emu/src/main/options.cc:31). + An empty path ends the load with "Set a {} BIOS in the Options" and a failed read + with "Error loading BIOS" (MD.emu/src/main/Main.cc:333-339). The file goes into + the cartridge buffer, and a path ending in .zip, .7z or .rar is scanned instead, + the first entry with a cartridge extension being taken + (MD.emu/src/main/Main.cc:337, + imagine/src/base/common/ApplicationContext.cc:542-562, + imagine/src/fs/ArchiveFS.cc:75-78). init_rom accepts the image only at exactly + 131072 bytes with "BOOT" at 0x124 or 0x128 of the raw bytes, which is what raises + sCD.isActive; anything else ends the load with "Invalid BIOS" + (MD.emu/src/genplus-gx/loadrom.cc:426-432, MD.emu/src/main/Main.cc:340-344). + Cartridge content never reads it. + + No other boot ROM exists here. t_config has no bios field + (MD.emu/src/genplus-config.h:46-54), the Master System mapper table names BIOS + only in two game titles (MD.emu/src/genplus-gx/cart_hw/sms_cart.cc:119,126), and + the TMSS OS ROM is copied out of the loaded image rather than read + from a file, behind a config.tmss bit nothing turns on + (MD.emu/src/genplus-gx/genesis.cc:313-320, + MD.emu/src/genplus-gx/mem68k.cc:471-476). Upstream's load_bios and the + bios_CD_U.bin, bios_CD_E.bin and bios_CD_J.bin names it opens have no counterpart + in this tree (upstream core/loadrom.c:394-415, + upstream libretro/libretro.c:3416-3418). + + The lock-on ROMs read nothing. osd.h keeps upstream's ggenie.bin, areplay.bin, + sk.bin and sk2chip.bin paths and all three loaders are compiled + (MD.emu/src/osd.h:13-16, MD.emu/src/genplus-gx/cart_hw/ggenie.cc:43-49, + MD.emu/src/genplus-gx/cart_hw/areplay.cc:43-49, + MD.emu/src/genplus-gx/cart_hw/md_cart.cc:499-531), but every one of them hangs off + config.lock_on, which the value initialised config object leaves at zero and no + code in the tree ever writes (MD.emu/src/main/AppMeta.cc:26, + MD.emu/src/genplus-gx/cart_hw/md_cart.cc:499,702,850). There is no menu item and + no config key for it (MD.emu/src/main/system.ccm:81-89), where the libretro port + drives the same switch from a core option + (upstream libretro/libretro.c:1715-1721). + + Per content the app writes and reads files named after the ROM: .srm cartridge + backup memory, .brm CD backup memory it formats itself when absent + (MD.emu/src/main/Main.cc:93-101,124-233), .gp states + (MD.emu/src/main/system.ccm:162) and a .pat cheat list under the cheats path + (MD.emu/src/main/Cheats.cc:388-391,438-441). Settings live in MdEmu.config + (MD.emu/src/main/AppMeta.cc:34). Mednafen's image reader picks up an .sbi beside a + cue sheet when one is present + (EmuFramework/src/shared/mednafen/cdrom/CDAccess_Image.cpp:928-943), and + gpOverlay.png and the shader sources are drawn by the framework from the + application bundle (EmuFramework/include/emuframework/AssetManager.hh:61-66, + EmuFramework/src/AssetManager.cc:58-73, MD.emu/src/main/AppMeta.cc:188-199). + +files: + - name: bios_CD_U.bin + system: sega-megacd + region: [north-america] + required: true + agnostic: true + size: 131072 + validation: [size, signature] + config_key: "CFGKEY_MD_CD_BIOS_USA_PATH" + description: "Sega CD boot ROM read for the USA region" + note: >- + Picked by the user from any path, under any name ending in .bin, .smd, .md, + .gen or .sms, or inside a .zip, .7z or .rar holding one. The tests are the + length and the "BOOT" text at 0x124 or 0x128; a file failing either aborts + the load rather than falling back. + source_ref: "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)" + + - name: bios_CD_J.bin + system: sega-megacd + region: [japan] + required: true + agnostic: true + size: 131072 + validation: [size, signature] + config_key: "CFGKEY_MD_CD_BIOS_JPN_PATH" + description: "Mega CD boot ROM read for the Japan region" + note: >- + Taken by the default branch: USA and Europe go to the other two paths and + every other region code lands here, both Japanese ones included. + source_ref: "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)" + + - name: bios_CD_E.bin + system: sega-megacd + region: [europe] + required: true + agnostic: true + size: 131072 + validation: [size, signature] + config_key: "CFGKEY_MD_CD_BIOS_EUR_PATH" + description: "Mega CD boot ROM read for the Europe region" + note: >- + Reached when the boot sector byte at 0x20b is 0x64 or the Game Region + setting is Europe. + source_ref: "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)" diff --git a/emulators/melonds-nightly.yml b/emulators/melonds-nightly.yml new file mode 100644 index 00000000..bae9017c --- /dev/null +++ b/emulators/melonds-nightly.yml @@ -0,0 +1,201 @@ +emulator: melonDS Nightly +type: standalone +core_classification: community_fork +source: "https://github.com/rafaelvcaetano/melonDS-android" +upstream: "https://github.com/rafaelvcaetano/melonDS-android-lib" +source_commit: "ae8790bdb4bf01555c2f168ab9bc77fbeb5dceb6" +upstream_commit: "431ab4bd0003c4356e25fce89640ae1004579b9b" +profiled_date: "2026-08-12" +core_version: "2.0.1 (NIGHTLY)" +display_name: "Nintendo - DS (melonDS Nightly)" +cores: ["melonds-nightly"] +systems: [nintendo-ds, nintendo-dsi] +mode: standalone + +notes: | + Android port of melonDS. The emulation code is the melonDS-android-lib + submodule, a fork of melonDS-emu/melonDS pinned at 431ab4bd and declaring + version 1.1 (CMakeLists.txt:20); the app around it is Kotlin plus a JNI layer + under app/src/main/cpp. + + Nightly is a product flavor, not a separate tree: the build dimension "build" + has prod and nightly, and nightly sets applicationIdSuffix ".nightly" and the + version suffix " (NIGHTLY)" (app/build.gradle.kts:59-61,76-79), giving the package + id me.magnum.melonds.nightly. Its source set holds an app name and a launcher + icon (app/src/nightly/res), and the gitHubNightly set points the update check + at the nightly release instead of the tagged one + (app/src/gitHubNightly/java/me/magnum/melonds/github/repositories/GitHubNightlyUpdatesRepository.kt:31). + No load path differs from the prod flavor. + + Files live in two directories the user picks through the storage access + framework, stored in the preferences bios_dir and dsi_bios_dir + (app/src/main/res/xml/pref_custom_firmware.xml:29-39). Both are read by + basename, so bios7.bin, bios9.bin and firmware.bin each name a DS image in one + directory and a DSi image in the other; the accepted lengths are what tell them + apart. The app lists the expected names on screen when a directory is unset or + rejected (app/src/main/res/values/strings.xml:116,118). Entries below carry the + basename the app opens in the path, under the console identifier the picker + binds to each directory, ds and dsi + (app/src/main/res/xml/pref_custom_firmware.xml:33,39). + + use_custom_bios defaults off (app/src/main/res/xml/pref_custom_firmware.xml:11, + SharedPreferencesSettingsRepository.kt:258-260). With it off, launching a ROM + skips the directory check entirely and the core substitutes FreeBIOS and a + firmware built in memory, so DS games run with nothing supplied. Booting into + the firmware menu instead of a ROM always turns it on + (AndroidEmulatorManager.kt:247-253), as does any per-ROM console override + (AndroidEmulatorManager.kt:239). DSi needs both directories: the DSi check + runs the DS check after its own (ConfigurationDirectoryVerifier.kt:13-21). + + The generated firmware keeps its Wi-Fi access point block in wfcsettings.bin, + read at boot and written back by the emulator + (EmulatorArgsBuilder.cpp:189,200-226, MelonInstance.cpp:58-62). It resolves + against context.filesDir (PlatformAndroid.cpp:158-163, + SharedPreferencesSettingsRepository.kt:155), app-private internal storage the + user cannot write to, and holds settings this build produced. Not listed below: + there is nothing to obtain. + + Neither SD card is reachable in this build. getSDCardArgs returns nothing when + a card is disabled (SDCardArgsBuilder.cpp:19-20) and the JNI layer hardcodes + both the DSi card and the homebrew DLDI card to disabled + (MelonDSAndroidConfiguration.cpp:93-94), with no preference anywhere in the app + to turn either on; the README lists DSi SD card support under missing features. The Action Replay database the core can parse is likewise + never built: ARDatabaseDAT is reached only from src/frontend/qt_sdl, and the + Android build sets BUILD_QT_SDL OFF and links the core alone + (app/CMakeLists.txt:8,73). Cheats are entered in the app's own database. + +files: + # --- DS BIOS directory (preference bios_dir) --- + - name: bios9.bin + aliases: [NDS_Bios9.bin, nds9.bin] + path: "ds/bios9.bin" + system: nintendo-ds + config_key: "bios_dir" + description: "Nintendo DS ARM9 BIOS" + required: false + hle_fallback: true + size: 4096 + crc32: 2ab23573 + validation: [size, crc32] + note: >- + The picker rejects any length other than 4096. The core hashes what it + loads and keeps the result as a flag rather than refusing the image: a + CRC32 other than 2ab23573 marks the BIOS non-native, which forces direct + boot and makes SetupDirectBoot copy the Nintendo logo out of the ROM header + into the BIOS at 0x20 so DS-to-GBA communication still works. FreeBIOS is + substituted when custom BIOS is off. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:51-53,100-113, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:149, app/src/main/cpp/EmulatorArgsBuilder.cpp:19-40, src/MemConstants.h:30-36, src/NDS.cpp:807-811, src/NDS.cpp:277-296,303-310" + + - name: bios7.bin + aliases: [NDS_Bios7.bin, nds7.bin] + path: "ds/bios7.bin" + system: nintendo-ds + config_key: "bios_dir" + description: "Nintendo DS ARM7 BIOS" + required: false + hle_fallback: true + size: 16384 + crc32: 1280f0d5 + validation: [size, crc32] + note: >- + The picker rejects any length other than 16384. A CRC32 other than + 1280f0d5 marks the BIOS non-native, which forces direct boot and leaves + Key1_KeyBuf zeroed instead of seeding it from offset 0x0030, so cartridge + Key1 encryption is unavailable. FreeBIOS is substituted when custom BIOS is + off. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:47-49,100-113, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:148, app/src/main/cpp/EmulatorArgsBuilder.cpp:42-62, src/MemConstants.h:30-36, src/NDS.cpp:801-805, src/NDSCart.cpp:138-151" + + - name: firmware.bin + aliases: [dsfirmware.bin] + path: "ds/firmware.bin" + system: nintendo-ds + config_key: "bios_dir" + description: "Nintendo DS firmware image" + required: false + hle_fallback: true + size_options: [131072, 262144, 524288] + validation: [size] + note: >- + Three lengths are accepted and everything else is rejected. Loaded only in + DS mode; DSi mode reads the firmware from the DSi directory but still needs + this file present, because the DSi check re-runs the DS directory check. + Nickname, message, language, colour, birthday and MAC are written into the + image before it reaches the core. A firmware the core reports as + non-bootable forces direct boot. When custom BIOS is off the core builds a + firmware in memory instead. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:55-70,120, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:150, app/src/main/cpp/EmulatorArgsBuilder.cpp:93-185,289-337, src/NDS.cpp:286-288" + + # --- DSi BIOS directory (preference dsi_bios_dir) --- + - name: dsi_bios9.bin + aliases: [biosdsi9.bin] + path: "dsi/bios9.bin" + system: nintendo-dsi + config_key: "dsi_bios_dir" + description: "Nintendo DSi ARM9i BIOS" + required: true + size: 65536 + validation: [size] + note: >- + Opened as bios9.bin inside the DSi directory. The picker rejects any length + other than 65536, and no hash is computed on it. A load failure aborts the + launch. DSi boot copies four blocks out of it + into ITCM from 0x87F4, 0x9920, 0x99A0 and 0xA9E8, and cartridge Key1 in DSi + mode is seeded from 0x99A0. With the boot screen off, the reset vector is + overwritten in memory with 0xEAFFFFFE. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:76-78,100-113,124, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:152, app/src/main/cpp/EmulatorArgsBuilder.cpp:235-260,475-477, src/DSi.cpp:950-955, src/NDSCart.cpp:127-134" + + - name: dsi_bios7.bin + aliases: [biosdsi7.bin] + path: "dsi/bios7.bin" + system: nintendo-dsi + config_key: "dsi_bios_dir" + description: "Nintendo DSi ARM7i BIOS" + required: true + size: 65536 + validation: [size] + note: >- + Opened as bios7.bin inside the DSi directory. The picker rejects any length + other than 65536, and no hash is computed on it. A load failure aborts the + launch. Offset 0x8308 holds the ES key used + to derive the NAND AES keys, so the NAND cannot be opened without this + exact image. DSi boot copies four blocks out of it from 0x8188, 0xB5D8, + 0xC6D0 and 0xD718. With the boot screen off, the reset vector is + overwritten in memory with 0xEAFFFFFE. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:72-74,100-113,123, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:151, app/src/main/cpp/EmulatorArgsBuilder.cpp:262-287,347,471-473, src/DSi.cpp:959-962" + + - name: dsi_firmware.bin + aliases: [dsifirmware.bin] + path: "dsi/firmware.bin" + system: nintendo-dsi + config_key: "dsi_bios_dir" + description: "Nintendo DSi firmware image" + required: true + size: 131072 + validation: [size] + note: >- + Opened as firmware.bin inside the DSi directory, where only 131072 is + accepted against three accepted lengths in the DS directory. Read in DSi + mode in place of the DS firmware, and customised the same way. The core has + no generator for DSi firmware, so nothing stands in for it. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:80-93,125, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:153, app/src/main/cpp/EmulatorArgsBuilder.cpp:289-337" + + - name: dsi_nand.bin + path: "dsi/nand.bin" + agnostic: true + system: nintendo-dsi + config_key: "dsi_bios_dir" + description: "Nintendo DSi NAND dump" + required: true + storage: large_file + validation: [existence] + note: >- + Opened as nand.bin inside the DSi directory. The only test the app makes is + that the entry is a file: no length, no hash. It is opened for read and + write and must already exist. The core + wants the nocash footer "DSi eMMC CID/CPU" at 0x40 before the end, falling + back to 0x000FF800 for images cut short by external tools, and reads the + eMMC CID and console ID from there to derive the FAT and ES keys with the + key at 0x8308 of the ARM7i BIOS. Touchscreen calibration is rewritten in + the mounted user data on every launch. Any regional dump works. A DSiWare + title is refused unless it is already installed in this image. + source_ref: "app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:95-98,126, app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:154, app/src/main/cpp/EmulatorArgsBuilder.cpp:339-420,479-481, app/src/main/java/me/magnum/melonds/domain/services/EmulatorLaunchPreconditionChecker.kt:47-70, src/DSi_NAND.cpp:43-70" diff --git a/emulators/msx-emu.yml b/emulators/msx-emu.yml new file mode 100644 index 00000000..9e5d671d --- /dev/null +++ b/emulators/msx-emu.yml @@ -0,0 +1,811 @@ +emulator: "MSX.emu" +type: standalone +core_classification: community_fork +source: "https://github.com/Rakashazi/emu-ex-plus-alpha" +upstream: "http://bluemsx.msxblue.com/" +profiled_date: "2026-08-12" +source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" +core_version: "1.5.85" +display_name: "MSX/ColecoVision (MSX.emu)" +mode: standalone +cores: + - "msx-emu" + - "MSX.emu" + - "MSX-EMU" +systems: + - msx + - msx1 + - msx2 + - msx2plus + - msxturbor + - colecovision + +notes: | + Android and Linux member of the EX Emulator series by Robert Broglia, published as + com.explusalpha.MsxEmu (MSX.emu/metadata/conf.mk:2,4,6,7, README.md:3-4) and reached + by ES-DE through its MSX-EMU find rule. blueMSX is vendored under + MSX.emu/src/blueMSX and driven by the app's own board, ROM loader and archive + layers (MSX.emu/src/CMakeLists.txt:6-16). Content is read from .rom, .mx1, .mx2 + and .col cartridge images and from .dsk disk images, directly or as the first + matching entry of a .zip, .7z or .rar (MSX.emu/src/main/system.ccm:83-87, + MSX.emu/src/main/Main.cc:521-618). A disk image of 1 MB or more is mounted on a + Sunrise IDE controller instead of a floppy drive + (MSX.emu/src/main/Main.cc:549,556-561,588-603). + + Two of blueMSX's board types are built, every MSX variant and ColecoVision. + createBoard returns 0 for anything else, and SVI, ColecoAdam, SG-1000, SF-7000 and + SC-3000 have neither a board file in the build nor their mappers + (MSX.emu/src/main/Main.cc:171-200, MSX.emu/src/CMakeLists.txt:80-83, + MSX.emu/src/blueMSX/Common/MsxTypes.h:145,150). + + Everything the emulator loads comes from a machine definition. machineCreate opens + Machines//config.ini and reads its [Slots] section, where each line carries a + slot, a subslot, a start page, a page count, a numeric ROM type and the ROM's path + (MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468). machineInitialize then loads + each named path, and a file it cannot read sets success to 0 for every ROM type but + one, which fails msxCreate or colecoCreate and ends the load with "Error loading + machine files for" (MSX.emu/src/blueMSX/Board/Machine.c:1168-1181, + MSX.emu/src/blueMSX/Board/MSX.c:247,277-281, + MSX.emu/src/blueMSX/Board/Coleco.c:403,416-420, + MSX.emu/src/main/Main.cc:215-219,262-269). Every ROM a definition names is therefore + required for that machine, and only for it. + + Paths are resolved against the user's BIOS folder first and the application bundle + second (MSX.emu/src/main/RomLoader.cc:57-92,94-133,135-144). That folder may be a + directory or an archive and is refused unless it carries a Machines entry + (MSX.emu/src/main/options.cc:212-228); with none set the app falls back to the asset + path on Linux and to the storage path elsewhere + (MSX.emu/src/main/options.cc:230-243). The machine picker lists every subdirectory + holding a config.ini and appends the three bundled C-BIOS names on Android, where + the asset directory enumeration skips directories + (MSX.emu/src/main/EmuMenuViews.cc:32-97,548-608). + + The default machine is MSX2 and the default Coleco machine is COL - ColecoVision; a + .col name picks the second and a session setting overrides both + (MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/Main.cc:534,563-577). Neither + default is bundled. The application ships only the three C-BIOS machines in its + assets (MSX.emu/res/firmware/Machines, symlinked into MSX.emu/res/android/assets), + which run cartridge images; the definitions and ROMs behind every other name come + from MSX.emu.zip, the firmware set on the author's site, whose Machines folder holds + MSX, MSX2, MSX2+, MSXturboR, COL - ColecoVision and Shared Roms. Its MSXturboR + definition spells MSXTR, MSXTREXT, MSXTRMUS, MSXTROPT and MSXDOS23 with a lowercase + .rom extension where blueMSX's own set spells them .ROM, and the loader opens the + string verbatim. + + One ROM path is written in the code rather than in a definition, + Machines/Shared Roms/SUNRISEIDE.rom + (MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:302-311). The four others cannot be + reached. Beer IDE, Gouda SCSI and the two Nowind images hang off cart names the app + never passes and off mappers EXCLUDE_IDE_DEVICES and EXCLUDE_NOWIND compile out, and + the FMPAC branch needs ROM_FMPAC as the incoming type where boardChangeCartridge + only ever passes ROM_UNKNOWN, ROM_SCC, ROM_SCCPLUS and ROM_SUNRISEIDE + (MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:283-335, + MSX.emu/src/blueMSX/Common/MsxTypes.h:145-151, MSX.emu/src/main/Main.cc:56-70, + MSX.emu/src/main/EmuMenuViews.cc:385-413). Two of them are also spelled in lower + case there against the upper case of the set. + + No hash is checked anywhere, and the sizes below are the ones the shipped set + carries. The machine definitions still carry one, because config.ini is the name of + every definition there is and nothing else tells two of them apart; the values are + those of the emulator's own assets and of the author's firmware set. A single length + test exists, the Kanji mapper taking 131072 or 262144 bytes + and nothing else (MSX.emu/src/blueMSX/Memory/romMapperKanji.c:141-149). The other + mappers refuse only a ROM that does not fit the pages left in its slot, which is a + property of the definition rather than of the dump + (MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65, + MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68, + MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68, + MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99), and the Philips FDC, Panasonic + FDC and MoonSound mappers test nothing at all + (MSX.emu/src/blueMSX/Memory/romMapperPhilipsFdc.c:139-146, + MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262, + MSX.emu/src/blueMSX/Memory/romMapperMoonsound.c:129-158). + + The ROM database is compiled in. mediaDbGuessRom matches a cartridge's SHA-1 against + the table of EmbeddedRomDBData.h to pick its mapper, the TinyXML and MediaDb.cpp + sources that would read msxromdb.xml and msxsysromdb.xml are built only under + useXMLDB, and the two calls that loaded them are commented out + (MSX.emu/src/main/MediaDb.cc:50-59, MSX.emu/src/CMakeLists.txt:174-188, + MSX.emu/src/main/system.ccm:165-167). The floppy drive sounds read nothing either: + NO_EMBEDDED_SAMPLES turns fdcAudioCreate into a stub and takes the FdcRead.wav and + FdcMotor.wav reads with it (MSX.emu/CMakeLists.txt:33, + MSX.emu/src/blueMSX/IoDevice/FdcAudio.c:35-42,3456-3486). + + Per content the app writes and reads files under its save path, .cmos for a + battery backed clock, an SRAM image named after the cartridge, and .sta save states + in blueMSX's own zip format (MSX.emu/src/blueMSX/Board/MSX.c:232-233, + MSX.emu/src/blueMSX/Memory/sramLoader.c:36-74,81-99, + MSX.emu/src/main/Main.cc:45,380-383,385-429). Settings live in MsxEmu.config + (MSX.emu/src/main/AppMeta.cc:32). gpOverlay.png, kbOverlay.png, ui.png and the + shader sources are drawn by the framework from the application bundle. + +files: + - name: "config.ini" + path: "Machines/MSX - C-BIOS/config.ini" + system: msx + required: true + bundled: true + category: game_data + size: 395 + sha1: "5e36ed1fb6f148378de9f13e28013bd2d5d07ef4" + description: "C-BIOS MSX1 machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144" + + - name: "cbios_main_msx1.rom" + path: "Machines/MSX - C-BIOS/cbios_main_msx1.rom" + system: msx + required: true + bundled: true + size: 32768 + description: "C-BIOS MSX1 main ROM, slot 0-0 from page 0" + source_ref: "MSX.emu/res/firmware/Machines/MSX - C-BIOS/config.ini:27, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65" + + - name: "cbios_logo_msx1.rom" + path: "Machines/MSX - C-BIOS/cbios_logo_msx1.rom" + system: msx + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX1 boot logo, slot 0-0 from page 4" + source_ref: "MSX.emu/res/firmware/Machines/MSX - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65" + + - name: "config.ini" + path: "Machines/MSX2 - C-BIOS/config.ini" + system: msx2 + required: true + bundled: true + category: game_data + size: 472 + sha1: "3968cca6fb977936af849d611bc4ebd4910dd81a" + description: "C-BIOS MSX2 machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144" + + - name: "cbios_main_msx2.rom" + path: "Machines/MSX2 - C-BIOS/cbios_main_msx2.rom" + system: msx2 + required: true + bundled: true + size: 32768 + description: "C-BIOS MSX2 main ROM, slot 0-0 from page 0" + source_ref: "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "cbios_logo_msx2.rom" + path: "Machines/MSX2 - C-BIOS/cbios_logo_msx2.rom" + system: msx2 + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX2 boot logo, slot 0-0 from page 4" + source_ref: "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:29, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "cbios_sub.rom" + path: "Machines/MSX2 - C-BIOS/cbios_sub.rom" + system: msx2 + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX2 sub ROM, slot 3-0" + source_ref: "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:30, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "config.ini" + path: "Machines/MSX2+ - C-BIOS/config.ini" + system: msx2plus + required: true + bundled: true + category: game_data + size: 534 + sha1: "ac86b9962ac28326dbfcb1af71f3e9f9b2cc3649" + description: "C-BIOS MSX2+ machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144" + + - name: "cbios_main_msx2+.rom" + path: "Machines/MSX2+ - C-BIOS/cbios_main_msx2+.rom" + system: msx2plus + required: true + bundled: true + size: 32768 + description: "C-BIOS MSX2+ main ROM, slot 0-0 from page 0" + source_ref: "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "cbios_logo_msx2+.rom" + path: "Machines/MSX2+ - C-BIOS/cbios_logo_msx2+.rom" + system: msx2plus + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX2+ boot logo, slot 0-0 from page 4" + source_ref: "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:29, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "cbios_sub.rom" + path: "Machines/MSX2+ - C-BIOS/cbios_sub.rom" + system: msx2plus + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX2+ sub ROM, slot 3-0, same bytes as the MSX2 C-BIOS sub ROM" + source_ref: "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:30, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181" + + - name: "cbios_music.rom" + path: "Machines/MSX2+ - C-BIOS/cbios_music.rom" + system: msx2plus + required: true + bundled: true + size: 16384 + description: "C-BIOS MSX-MUSIC ROM, slot 3-1 from page 2" + source_ref: "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:31, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68" + + - name: "cbios.txt" + path: "cbios.txt" + system: msx + required: false + bundled: true + category: game_data + size: 10469 + description: "C-BIOS 0.29 release notes and licence, bundled beside the machine folders" + note: >- + Shipped in the application bundle. No code reads it. + source_ref: "MSX.emu/res/firmware/cbios.txt" + + - name: "config.ini" + path: "Machines/MSX/config.ini" + system: msx + required: true + category: game_data + size: 408 + sha1: "483b2c34fcb3ddcf650314e45104f358ef74c98b" + description: "MSX1 machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97" + + - name: "config.ini" + path: "Machines/MSX2/config.ini" + system: msx2 + required: true + category: game_data + size: 649 + sha1: "460ded0dbfc0285490da87a446b0321b6496aa5b" + description: "MSX2 machine definition, the default MSX machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97" + + - name: "config.ini" + path: "Machines/MSX2+/config.ini" + system: msx2plus + required: true + category: game_data + size: 773 + sha1: "cb7d14a17c4f4632f17ba5a64160cdd876dd6010" + description: "MSX2+ machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97" + + - name: "config.ini" + path: "Machines/MSXturboR/config.ini" + system: msxturbor + required: true + category: game_data + size: 941 + sha1: "9836d109ec7879374dcd044da149f1b5aafd4664" + description: "MSX turbo R machine definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97" + + - name: "config.ini" + path: "Machines/COL - ColecoVision/config.ini" + system: colecovision + required: true + category: game_data + size: 347 + sha1: "0f0b7b73ba6f8677dfc5c824bb3edf6df2ff653e" + description: "ColecoVision machine definition, the default Coleco machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97" + + - name: "MSX.rom" + path: "Machines/Shared Roms/MSX.rom" + system: msx + required: true + size: 32768 + description: "MSX1 main BIOS of the MSX machine, mapped through the cassette patch mapper" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68" + + - name: "PHILIPSDISK.rom" + path: "Machines/Shared Roms/PHILIPSDISK.rom" + system: msx + required: true + size: 16384 + description: "Philips floppy disk ROM, named by the MSX and MSX2 machine definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperPhilipsFdc.c:139-146" + + - name: "MSX2.rom" + path: "Machines/Shared Roms/MSX2.rom" + system: msx2 + required: true + size: 32768 + description: "MSX2 main BIOS of the MSX2 machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68" + + - name: "MSX2EXT.rom" + path: "Machines/Shared Roms/MSX2EXT.rom" + system: msx2 + required: true + size: 16384 + description: "MSX2 sub ROM of the MSX2 machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2PMUS.rom" + path: "Machines/Shared Roms/MSX2PMUS.rom" + system: msx2 + required: true + size: 16384 + description: "MSX-MUSIC ROM, named by the MSX2 and MSX2+ machine definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68" + + - name: "MOONSOUND.rom" + path: "Machines/Shared Roms/MOONSOUND.rom" + system: msx2 + required: true + size: 2097152 + description: "MoonSound wave ROM, named by the MSX2, MSX2+ and turbo R machine definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperMoonsound.c:129-158" + + - name: "XBASIC2.rom" + path: "Machines/Shared Roms/XBASIC2.rom" + system: msx2 + required: true + size: 16384 + description: "X-BASIC II ROM, named by the MSX2, MSX2+ and turbo R machine definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2P.rom" + path: "Machines/Shared Roms/MSX2P.rom" + system: msx2plus + required: true + size: 32768 + description: "MSX2+ main BIOS of the MSX2+ machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68" + + - name: "MSX2PEXT.rom" + path: "Machines/Shared Roms/MSX2PEXT.rom" + system: msx2plus + required: true + size: 16384 + description: "MSX2+ sub ROM of the MSX2+ machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "KANJI.rom" + path: "Machines/Shared Roms/KANJI.rom" + system: msx2plus + required: true + size_options: [131072, 262144] + validation: [size] + description: "Kanji character ROM, named by the MSX2+ and turbo R machine definitions" + note: >- + The one length test in the tree: the mapper returns 0 for any other size, which + fails the machine. + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperKanji.c:141-149" + + - name: "MSXKANJI.rom" + path: "Machines/Shared Roms/MSXKANJI.rom" + system: msx2plus + required: true + size: 32768 + description: "Kanji BASIC ROM, named by the MSX2+ and turbo R machine definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "PANASONICDISK.rom" + path: "Machines/Shared Roms/PANASONICDISK.rom" + system: msx2plus + required: true + size: 16384 + description: "Panasonic floppy disk ROM of the MSX2+ machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262" + + - name: "MSXTR.rom" + path: "Machines/Shared Roms/MSXTR.rom" + system: msxturbor + required: true + size: 32768 + description: "turbo R main BIOS, mapped through the Panasonic DRAM mapper" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99" + + - name: "MSXTREXT.rom" + path: "Machines/Shared Roms/MSXTREXT.rom" + system: msxturbor + required: true + size: 16384 + description: "turbo R sub ROM, mapped through the Panasonic DRAM mapper" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99" + + - name: "MSXTRMUS.rom" + path: "Machines/Shared Roms/MSXTRMUS.rom" + system: msxturbor + required: true + size: 16384 + description: "turbo R MSX-MUSIC ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXTROPT.rom" + path: "Machines/Shared Roms/MSXTROPT.rom" + system: msxturbor + required: true + size: 16384 + description: "turbo R firmware ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXDOS23.rom" + path: "Machines/Shared Roms/MSXDOS23.rom" + system: msxturbor + required: true + size: 65536 + description: "MSX-DOS 2.3 disk ROM of the turbo R machine" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262" + + - name: "coleco.rom" + path: "Machines/COL - ColecoVision/coleco.rom" + system: colecovision + required: true + size: 8192 + description: "ColecoVision BIOS, slot 0-0 page 0" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "SUNRISEIDE.rom" + path: "Machines/Shared Roms/SUNRISEIDE.rom" + system: msx + required: false + size: 65536 + description: "Sunrise IDE controller ROM" + note: >- + The one ROM path written in the code instead of a machine definition. Read when + the Sunrise IDE device is inserted from the ROM/Disk Control menu and when a disk + image of 1 MB or more is mounted as a hard drive. Without it the mapper maps a + blank 512 KB ROM and the device still answers. + source_ref: "MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:302-311, MSX.emu/src/main/EmuMenuViews.cc:403-413, MSX.emu/src/main/Main.cc:588-603, MSX.emu/src/blueMSX/Memory/romMapperSunriseIDE.c:194-211" + + - name: "MSXAR.ROM" + path: "Machines/Shared Roms/MSXAR.ROM" + system: msx + required: false + size: 32768 + description: "MSX1 Arabic BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "ARAB1.ROM" + path: "Machines/Shared Roms/ARAB1.ROM" + system: msx + required: false + size: 32768 + description: "MSX1 Arabic character ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXBR.rom" + path: "Machines/Shared Roms/MSXBR.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Brazilian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MICROSOLDISK.ROM" + path: "Machines/Shared Roms/MICROSOLDISK.ROM" + system: msx + required: false + size: 16384 + description: "Microsol floppy disk ROM of the Brazilian machines" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXFR.rom" + path: "Machines/Shared Roms/MSXFR.rom" + system: msx + required: false + size: 32768 + description: "MSX1 French BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXG.rom" + path: "Machines/Shared Roms/MSXG.rom" + system: msx + required: false + size: 32768 + description: "MSX1 German BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXJ.rom" + path: "Machines/Shared Roms/MSXJ.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Japanese BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXKR.rom" + path: "Machines/Shared Roms/MSXKR.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Korean BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXHAN.rom" + path: "Machines/Shared Roms/MSXHAN.rom" + system: msx + required: false + size: 8192 + description: "MSX1 Korean Hangul ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXR.rom" + path: "Machines/Shared Roms/MSXR.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Russian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXR2.rom" + path: "Machines/Shared Roms/MSXR2.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Estonian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXSE.ROM" + path: "Machines/Shared Roms/MSXSE.ROM" + system: msx + required: false + size: 32768 + description: "MSX1 Swedish BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSXSP.rom" + path: "Machines/Shared Roms/MSXSP.rom" + system: msx + required: false + size: 32768 + description: "MSX1 Spanish BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "NATIONALDISK.rom" + path: "Machines/Shared Roms/NATIONALDISK.rom" + system: msx + required: false + size: 16384 + description: "National floppy disk ROM, shared by eight MSX1 definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "GCVMX80.ROM" + path: "Machines/Shared Roms/GCVMX80.ROM" + system: msx + required: false + size: 8192 + description: "Microsol VMX-80 character ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "RS232.ROM" + path: "Machines/Shared Roms/RS232.ROM" + system: msx + required: false + size: 8192 + description: "RS-232 interface ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "FMPAC.rom" + path: "Machines/Shared Roms/FMPAC.rom" + system: msx + required: false + size: 65536 + description: "FM-PAC cartridge ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "BEERIDE.ROM" + path: "Machines/Shared Roms/BEERIDE.ROM" + system: msx + required: false + size: 16384 + description: "Beer IDE controller ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "NOVAXIS.rom" + path: "Machines/Shared Roms/NOVAXIS.rom" + system: msx + required: false + size: 16384 + description: "Gouda SCSI controller ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "nowindDos1.rom" + path: "Machines/Shared Roms/nowindDos1.rom" + system: msx + required: false + size: 524288 + description: "Nowind MSX-DOS 1 image" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "nowindDos2.rom" + path: "Machines/Shared Roms/nowindDos2.rom" + system: msx + required: false + size: 524288 + description: "Nowind MSX-DOS 2 image" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2AR.ROM" + path: "Machines/Shared Roms/MSX2AR.ROM" + system: msx2 + required: false + size: 32768 + description: "MSX2 Arabic BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2AREXT.ROM" + path: "Machines/Shared Roms/MSX2AREXT.ROM" + system: msx2 + required: false + size: 16384 + description: "MSX2 Arabic sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "ARABIC.rom" + path: "Machines/Shared Roms/ARABIC.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Arabic character ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "PAINT.rom" + path: "Machines/Shared Roms/PAINT.rom" + system: msx2 + required: false + size: 65536 + description: "Arabic Painter ROM of the MSX2 Arabic definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "SWP.rom" + path: "Machines/Shared Roms/SWP.rom" + system: msx2 + required: false + size: 32768 + description: "Arabic word processor ROM of the MSX2 Arabic definition" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2BR.rom" + path: "Machines/Shared Roms/MSX2BR.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Brazilian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2BREXT.rom" + path: "Machines/Shared Roms/MSX2BREXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 Brazilian sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2FR.rom" + path: "Machines/Shared Roms/MSX2FR.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 French BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2FREXT.rom" + path: "Machines/Shared Roms/MSX2FREXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 French sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2G.rom" + path: "Machines/Shared Roms/MSX2G.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 German BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2GEXT.rom" + path: "Machines/Shared Roms/MSX2GEXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 German sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2J.rom" + path: "Machines/Shared Roms/MSX2J.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Japanese BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2JEXT.rom" + path: "Machines/Shared Roms/MSX2JEXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 Japanese sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2KR.rom" + path: "Machines/Shared Roms/MSX2KR.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Korean BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2KREXT.rom" + path: "Machines/Shared Roms/MSX2KREXT.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Korean sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2HAN.rom" + path: "Machines/Shared Roms/MSX2HAN.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Korean Hangul ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "HANGUL.rom" + path: "Machines/Shared Roms/HANGUL.rom" + system: msx2 + required: false + size: 131072 + description: "Korean Hangul character ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2R.rom" + path: "Machines/Shared Roms/MSX2R.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Russian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2R2.ROM" + path: "Machines/Shared Roms/MSX2R2.ROM" + system: msx2 + required: false + size: 32768 + description: "MSX2 Estonian BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2REXT.rom" + path: "Machines/Shared Roms/MSX2REXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 sub ROM of the Russian and Estonian definitions" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2SE.rom" + path: "Machines/Shared Roms/MSX2SE.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Swedish BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2SP.rom" + path: "Machines/Shared Roms/MSX2SP.rom" + system: msx2 + required: false + size: 32768 + description: "MSX2 Spanish BIOS" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + + - name: "MSX2SPEXT.rom" + path: "Machines/Shared Roms/MSX2SPEXT.rom" + system: msx2 + required: false + size: 16384 + description: "MSX2 Spanish sub ROM" + source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133" + diff --git a/emulators/mupen64plus-ae.yml b/emulators/mupen64plus-ae.yml new file mode 100644 index 00000000..abeb60af --- /dev/null +++ b/emulators/mupen64plus-ae.yml @@ -0,0 +1,167 @@ +emulator: Mupen64Plus AE +type: standalone +core_classification: community_fork +source: "https://github.com/mupen64plus-ae/mupen64plus-ae" +upstream: "https://github.com/mupen64plus-ae/mupen64plus-ae" +profiled_date: "2026-08-12" +source_commit: "25cfb7a0cf27517f796fb2baf92606f3ae9417f3" +core_version: "3.0.249 (beta)" +display_name: "Nintendo - Nintendo 64 (Mupen64Plus AE)" +cores: + - mupen64plus-ae + - MUPEN64PLUS-AE + - org.mupen64plusae.v3.alpha +systems: + - nintendo-64 + - nintendo-64dd +mode: standalone + +notes: | + Android front end under the paulscode.android.mupen64plusae namespace, + published as org.mupen64plusae.v3.alpha (app/build.gradle:24). Everything it + runs is vendored in tree rather than pulled as a submodule: + mupen64plus-core, the hle, cxd4 and parallel RSP plugins, the GLideN64, + glide64mk2, gln64, rice, angrylion-plus and parallel video plugins, its own + audio, touchscreen and raphnet input plugins, and a miniupnp bridge for + netplay (settings.gradle:1). ES-DE launches it for both n64 and n64dd with an + ACTION_VIEW intent carrying a storage access uri, which the splash screen + forwards to the gallery (AndroidManifest.xml:80-101, SplashActivity.java:134). + + Cartridge boot needs no boot ROM. The PIF boot sequence is simulated + (device/pif/bootrom_hle.c:48, entered from device/r4300/interrupt.c:445,496 + and main/main.c:1875) and the CIC-NUS-6105 challenge is answered by an + algorithm rather than a stored table (device/pif/n64_cic_nus_6105.c:93). + Nothing fills the PIF ROM window from a file. + + Which 64DD IPL is used is not decided by the code. Two settings hold a path + and both end up as the same working file dd_rom.n64: the global one, titled + 64DD IPL (J), read when the launched file is itself a disk, and a per game + one, titled 64DD IPL, read when a cartridge is launched with a disk attached + and only while the support64dd toggle is on (CoreService.java:606-620, + GlobalPrefs.java:421,727, GamePrefs.java:579-599, + CoreInterface.java:144,231,459-488). The core offers a callback that would + name the image per disk region and the front end leaves it null + (CoreInterface.java:223, main/main.c:1082-1086), so whichever image sits in + the slot is the one loaded. A disk is recognised only when its system data + header matches and carries one of three region words, 0xe848d316 for Japan, + 0x2263ee56 for the United States and 0x00000000 for development + (RomHeader.java:180-220); the word sets a country code used for the ROM + database and cheat lookup, never for picking the IPL. Launching a bare disk + with the global slot empty stops before the core starts + (CoreService.java:638-639), and since disk only games still need a cartridge + image the application feeds the m64p_test_rom.v64 asset in its place + (CoreService.java:643-644). Disk content inside a .zip or .7z is unpacked to + the working directory first (CoreInterface.java:490-522). + + Transfer Pak carts come from four per player path settings copied into the + working directory as playerN_gb_rom.gb and playerN_gb_ram.gb + (CoreService.java:566-575, GamePrefs.java:933-960, + CoreInterface.java:142-143,175-189,235-236,420-457). The core rejects a cart + under 32 KiB and an unknown type byte at 0x147 (device/gb/gb_cart.c:996-1009) + and fixes no name, size or hash, so neither the cart nor its save carries an + entry here. + + Seven data files ship inside the package, each keyed to a version number and + unpacked on first start into the private files directory, which is also what + the core is told is SharedDataPath (ExtractAssetsOrCleanupTask.java:63-73, + SplashActivity.java:90,399-402, AppData.java:391-403, + NativeConfigFiles.java:111). mupen64plus.ini is the ROM database, read by the + core (main/rom.c:473-490 from api/frontend.c:106) and by the gallery + (SplashActivity.java:447). mupencheat.default is copied over + Profiles/customCheats.txt into mupencheat.txt and parsed in Java + (SplashActivity.java:443, CheatUtils.java:88-96, GamePrefsActivity.java:548); + the core's own cheat.c opens no file. font.ttf is reached by GLideN64 only + after /system/fonts/DroidSans.ttf fails, that name being what the front end + writes as the configured font (TextDrawer.cpp:209-210,222-228, + NativeConfigFiles.java:291); the core's OSD, the other upstream reader of + that name (osd/osd.c:40), is absent from the Android source list + (mupen64plus-core.mk:24-101). RiceVideoLinux.ini holds rice's per ROM + settings (rice Config.cpp:38,933-953), Glide64mk2.ini glide64mk2's + (glide64mk2 Main.cpp:1581-1586), and gln64.conf with gln64rom.conf gln64's + global and per ROM settings (gln64 Config.cpp:245-252,296-302). + + Two more assets are read straight out of the package and never unpacked: + m64p_test_rom.v64, and GLideN64.custom.ini, whose per ROM overrides the front + end reads itself and writes into mupen64plus.cfg (AppData.java:396-397, + ConfigFile.java:225-229, NativeConfigFiles.java:223,227). GLideN64 also asks + the core for GLideN64.custom.ini in SharedDataPath, where it was never + placed, so that native lookup finds nothing + (mupenplus/Config_mupenplus.cpp:332-344). The touchscreen skins, the shader + sources and the controller, touchscreen and emulation profile templates are + used from the package the same way (AppData.java:392,401-403, + GlobalPrefs.java:530, ShaderLoader.java:85). + + Optional content with no canonical artifact: hi-res texture packs under the + user data directory, imported from a user archive (GlobalPrefs.java:469, + ExtractTexturesFragment.java), the _HIRESTEXTURES.htc and .hts caches + the plugin builds from them, read back for their storage flag + (NativeConfigFiles.java:365-376), customCheats.txt, custom touchscreen skins + and cover art (GlobalPrefs.java:481,486-487), and alp_screen.vert with + alp_screen.frag, which angrylion-plus opens as working directory relative + paths before falling back to its embedded shaders + (angrylion-plus output/vdac.c:119-127,167-174,246-247). + + Written rather than obtained: mupen64plus.cfg and the plugin sections in it, + the mempak, eeprom, flashram and sram saves given default content when absent + (main/main.c:1015-1078,1619-1622) and the 64DD disk save in whichever of the + two formats SaveDiskFormat selects (main/main.c:365,1176-1235), savestates + with the rcheevos progress file written beside them + (CoreService.java:335,407-413), screenshots, the texture dump and cache + directories, the GLideN64 shader cache and romInfoCache.cfg + (GlobalPrefs.java:466-487, NativeConfigFiles.java:108-111). + + Two files in the tree this build never reads. cxd4's rsp_conf.bin: its reader + is the zilmar variant of update_conf behind #if !defined(M64P_PLUGIN_API), + and the build defines that macro (mupen64plus-rsp-cxd4.mk:8), so the variant + compiled takes its settings from the core config API and ignores the filename + it is handed (mupen64plus-rsp-cxd4 module.c:83-93,239,637-659). And + parallel-rdp's shader directory, registered as a filesystem protocol only + under PARALLEL_RDP_SHADER_DIR, which the Android build leaves undefined, so + the SPIR-V compiled into the plugin is what runs + (parallel-rdp rdp_renderer.cpp:74-78). + +files: + - name: "64DD_IPL_JP.n64" + aliases: ["64DD_IPL_v12_JPN.bin", "64DD_IPL.bin"] + system: nintendo-64dd + required: true + validation: [signature] + description: "64DD IPL ROM (Japanese retail)" + note: > + The image every commercially released disk needs, and the one the global + setting is named for. No name is fixed by the code: the path comes from a + document picker and the file is copied to dd_rom.n64 before the core sees + it. The core reads it whole, then byteswaps after identifying the first + word as one of 0x80270740 (z64), 0x40072780 (n64) or 0x27804007 (v64); + any other value logs an invalid IPL and disables 64DD. Size is not + checked and no hash is computed. + source_ref: "app/src/main/java/paulscode/android/mupen64plusae/jni/CoreService.java:606-620,638-639, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:459-488, app/src/main/java/paulscode/android/mupen64plusae/persistent/GlobalPrefs.java:421,727, mupen64plus-core/upstream/src/main/main.c:1080-1145" + + - name: "64DD_IPL_US.n64" + aliases: ["64DD_IPL_USA.bin", "IPL_USA.n64"] + system: nintendo-64dd + required: true + validation: [signature] + description: "64DD IPL ROM (American retail)" + note: > + Needed for a disk whose system data carries the US region word + 0x2263ee56, which the header reader accepts alongside the Japanese and + development words. The front end holds one IPL path at a time and never + branches on that region, so this image is loaded by putting it in the + same setting. Same load path, format check and absence of size or hash + validation as the Japanese image. + source_ref: "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-220, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:223,459-488, mupen64plus-core/upstream/src/main/main.c:1080-1145" + + - name: "64DD_IPL_DEV.n64" + aliases: ["64DD_IPL_DEV.bin", "IPL_DEV.n64"] + system: nintendo-64dd + required: true + validation: [signature] + description: "64DD IPL ROM (development)" + note: > + Needed for a disk whose system data carries the development region word + 0x00000000, the third value the header reader accepts before giving up on + a file as a disk. Shares the single IPL setting with the other two + images. Same load path, format check and absence of size or hash + validation. + source_ref: "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-220, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:223,459-488, mupen64plus-core/upstream/src/main/main.c:1080-1145"