feat: add six emulator profiles

This commit is contained in:
Abdessamad Derraz committed 2026-08-12 03:15:05 +02:00
1 parent 87117a3e8f
commit 1fd5f40ef6
6 files changed
+1937

No files matched your search

+35
View File
@@ -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: []
+586
View File
@@ -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/<bundle id>/ 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/<bundle id>/"
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"
+137
View File
@@ -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)"
+201
View File
@@ -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"
+811
View File
@@ -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/<name>/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, <machine>.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"
+167
View File
@@ -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 <ROM>_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"