chore: update profiles to current upstream pins

This commit is contained in:
Abdessamad Derraz committed 2026-10-04 14:58:55 +02:00
1 parent 61688111f0
commit 92b2a1a498
22 files changed
+3186 -1156

No files matched your search

+608 -237
View File
File diff suppressed because it is too large. Load diff
+81 -26
View File
@@ -3,44 +3,99 @@ type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/DingooEmu"
upstream: "https://github.com/AloysHF/DingooEmu"
profiled_date: "2026-09-03"
source_commit: "746d6f116c707b9a2ede23c4b25468f90e26af26"
core_version: "0.2.0"
display_name: "Dingoo - A320 (DingooEmu)"
profiled_date: "2026-09-17"
source_commit: "f57c9339e6021cd37c4bd694c14b0813a9b5ee72"
core_version: "0.3.0"
display_name: "Dingoo - A320 / Gemei A330 (DingooEmu)"
cores:
- dingooemu
systems:
- dingoo-a320
- gemei-a330
notes: |
Dingoo A320 emulator written in Rust by AloysHF. The libretro core and
the dingoo-emu standalone binary share the dingooemu-core crate. A .app
file is parsed from its full path (need_fullpath = true,
crates/dingooemu-libretro/src/api.rs:87; Emulator::from_path,
crates/dingooemu-core/src/emulator.rs:316-319;
crates/dingooemu-core/src/app_loader.rs:119-122) and its imports are
bound to Rust implementations of the Dingoo SDK
(crates/dingooemu-core/src/emulator/sdk_hle/mod.rs:22-30). No firmware
image, font or system file backs those calls.
Dingoo A320 and Gemei A330 emulator written in Rust by AloysHF. The
libretro core and the dingoo-emu standalone binary share the
dingooemu-core crate. Content is read from its full path (need_fullpath
= true, crates/dingooemu-libretro/src/api.rs:87;
crates/dingooemu/src/main.rs:226; crates/dingooemu-core/src/emulator.rs:33-37;
crates/dingooemu-core/src/package.rs:124-135). The CCDL package's load
address selects the runtime: a .app loaded in the 0x8xxxxxxx range runs on
the MIPS32 interpreter as an A320, a .cc, .c2s or .c3s loaded at
0x10100000 (retail SDK) or 0x13800000 (homebrew SDK) runs on the
ARM32/Thumb interpreter as an A330
(crates/dingooemu-core/src/content.rs:66-74, 104-121;
crates/dingooemu-core/src/emulator.rs:44-55). Both runtimes bind the
package's imports to Rust implementations of the device SDK
(crates/dingooemu-core/src/a320/runtime/sdk_hle/mod.rs:22-30;
crates/dingooemu-core/src/a330/runtime/sdk_hle/mod.rs:226-234). No
firmware code is executed and no font or system file backs those calls.
The guest file API (crates/dingooemu-core/src/emulator/sdk_hle/files.rs:43-129)
The A320 guest file API
(crates/dingooemu-core/src/a320/runtime/sdk_hle/files.rs:43-128)
resolves a name in three steps: a file under the save directory, a
resource packed inside the .app, then a host file relative to the .app's
own directory (crates/dingooemu-core/src/emulator.rs:1684-1706,
crates/dingooemu-core/src/emulator.rs:1433-1501). fsys_findfirst
own directory (crates/dingooemu-core/src/a320/runtime.rs:1645-1665,
crates/dingooemu-core/src/a320/runtime.rs:1592-1618,
crates/dingooemu-core/src/a320/runtime.rs:1424-1428,
crates/dingooemu-core/src/a320/runtime.rs:1449-1462). fsys_findfirst
enumerates the .app's directory and refuses to leave it
(crates/dingooemu-core/src/emulator.rs:1545-1591). Files the game
creates land in the frontend save directory
(crates/dingooemu-libretro/src/api.rs:152-155) or, when the frontend
gives none, beside the .app (crates/dingooemu-core/src/emulator.rs:411).
The core queries RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only
(crates/dingooemu-core/src/a320/runtime.rs:1519-1529).
The A330 guest file API
(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:74-135)
resolves a name in five steps: a file under the save directory, a host
file relative to the content's directory, a resource packed inside the
package, the zip payload appended to the package, then an entry of the
firmware archive mounted from the content's directory; a name none of
them answers fails the open. fsys_findfirst enumerates the content's
directory and refuses to leave it
(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:381-395).
Files the game creates land in the frontend save directory
(crates/dingooemu-libretro/src/api.rs:150-155,
crates/dingooemu-core/src/emulator.rs:173-179) or, when the frontend
gives none and in the standalone, beside the content
(crates/dingooemu-core/src/a320/runtime.rs:372,
crates/dingooemu-core/src/a330/runtime.rs:415-417). The core queries
RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only
(crates/dingooemu-libretro/src/constants.rs:30); no system directory
constant exists in the crate.
With the diagnostic core option on, dingooemu-diagnostic.txt is written
to the save directory (crates/dingooemu-libretro/src/diagnostics.rs:83-89,
crates/dingooemu-libretro/src/diagnostics.rs:311-316). No include_bytes!
data is compiled in.
to the save directory, or beside the content without one
(crates/dingooemu-libretro/src/api.rs:156-159,
crates/dingooemu-libretro/src/diagnostics.rs:8,
crates/dingooemu-libretro/src/diagnostics.rs:83-89,
crates/dingooemu-libretro/src/diagnostics.rs:310-318). No include_bytes!
data is compiled in. The .info declares firmware_count = 0: the one file
below is read from the content's directory, never from the system
directory.
exclusion_note: "No file is read outside the content: the .app path is the only input, guest file calls resolve to the save directory, the .app's resource table or the .app's own directory, nothing queries the system directory, no data is embedded with include_bytes!, and the .info declares firmware_count = 0."
files: []
files:
- name: "A330.HXF"
system: gemei-a330
required: false
storage: large_file
load_from: content_dir
size: 76352901
validation: [signature]
md5: "d8e1849773223a842076ca04053a13a4"
sha1: "69b3544d992a23e8b736c61837914a4d1b4e7bb5"
description: "Gemei A330 firmware update archive, V1.1 build3 of 2011-02-13"
note: >-
Mounted when an A330 package loads: the content's directory is
scanned and the first entry whose extension is hxf, in any case, is
read whole. The file must start with WADF0100 and declare at offset
20 a size within its own length; each record is a u32 name length,
the name, one byte, a u32 data length and the data, and a zero name
length ends the table. Names are lowercased, backslashes turned to
slashes and a leading drive letter dropped, so Z:\SYSTEM\nls\c_936.nls
and system/nls/c_936.nls reach the same entry. The archive is the
last source consulted when a game opens a file the save directory,
the content directory, the package's resources and its appended zip
payload do not hold; without it such an open fails and the runtime
goes on. The image itself is never hashed, and the hashes here name
the last firmware Gemei published; the V1.10 image of 2011-01-25
indexes the same way.
source_ref: "crates/dingooemu-core/src/a330/runtime.rs:415-418, crates/dingooemu-core/src/a330/firmware_archive.rs:16-50, 54-58, 63-96, 117-124, crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:108-133"
+43 -30
View File
@@ -3,9 +3,9 @@ type: standalone
core_classification: enhanced_fork
source: "https://github.com/joncampbell123/dosbox-x"
upstream: "https://github.com/joncampbell123/dosbox-x"
source_commit: "6cad735d685406bd4ef2a0b60a4613569e211fd8"
profiled_date: "2026-08-08"
core_version: "2026.08.02"
source_commit: "c98f5a359729f61263d88ae816a4263a7a15f12e"
profiled_date: "2026-09-17"
core_version: "2026.08.31"
display_name: "DOS (DOSBox-X)"
cores:
- dosbox-x
@@ -25,7 +25,7 @@ notes: |
olivetti/m24/att6300, pc3270, ega, ega200, jega, mcga, vgaonly, the S3,
Tseng, Paradise and ATI SVGA cards, the vesa variants, and pc98/pc9801/pc9821.
fm_towns is marked STUB in the same list.
ref: src/dosbox.cpp:1530-1566
ref: src/dosbox.cpp:1534-1574
No system BIOS: the PC BIOS, VGA BIOS, video fonts, keyboard layouts, codepage
tables, the Z: drive utilities including GLIDE2X.OVL, and the TTF text font are
@@ -36,10 +36,17 @@ notes: |
Files named without a directory are searched in the working directory, the
program directory, the user configuration directory and the resource
directory. On Linux the configuration directory is $XDG_CONFIG_HOME/dosbox-x
or ~/.config/dosbox-x, and the resource directory is $XDG_DATA_HOME/dosbox-x,
then /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses
C:\DOSBox-X.
ref: src/ints/int10.cpp:1442-1485, src/misc/cross.cpp:128-175
or ~/.config/dosbox-x, and the resource directory is $APPDIR/usr/share/dosbox-x
inside an AppImage, otherwise $XDG_DATA_HOME/dosbox-x, then
/usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses C:\DOSBox-X.
ref: src/ints/int10.cpp:1442-1485, src/misc/cross.cpp:129-190, 193-226
Configuration: -conf and -userconf name the files to read. Otherwise
dosbox-x.conf then dosbox.conf is tried in the working directory, then in the
program directory, then in the configuration directory, which is last tried
for dosbox-x-<version>.conf; that file is written with the defaults when it
does not exist.
ref: src/gui/sdlmain.cpp:8664-8740, src/misc/cross.cpp:229-245
MT-32: libmt32emu is built from src/libs/mt32. Only four file names are ever
opened, and each candidate is identified by exact file size then SHA1, so the
@@ -51,7 +58,7 @@ notes: |
the MT32 names. The directory is mt32.romdir, then the working directory, then
the resource directory, then the configuration directory. A missing pair logs
the accepted file names and disables the device.
ref: src/gui/midi_mt32.h:246-275, src/dosbox.cpp:3577-3582
ref: src/gui/midi_mt32.h:246-275, src/dosbox.cpp:3585-3595
FluidSynth reads fluid.soundfont; fluid_synth_sfload is the only check. With
the setting empty it probes /usr/share/soundfonts/default.sf2,
@@ -77,22 +84,27 @@ notes: |
identified by its size, which covers ASC16 and ASCFONT.15 from UCDOS and ETen
Chinese DOS, ASC24, HZK14, HZK16, HZK24 and STDFONT.15 and STDFONT.24.
Unset settings fall back to the built-in font data.
ref: src/ints/int_dosv.cpp:654-749, 1631-1710, src/dosbox.cpp:2539-2574
ref: src/ints/int_dosv.cpp:654-749, 1631-1710, src/dosbox.cpp:2547-2580
BOOT -bios loads a BIOS image at the top of the first megabyte, truncated to
128 KB, or 96 KB on PC-98 where it also looks for <image>.itf.rom, <image>.ITF.ROM,
itf.rom and ITF.ROM to serve the bank switched Initial Firmware Test region
through port 43Dh.
ref: src/dos/dos_programs.cpp:2250-2338
ref: src/dos/dos_programs.cpp:2225-2226, 2249-2338
BIOSTEST.COM loads an image of up to 64 KB at F000:0 and restarts the CPU at
the reset vector; it is compiled only when the debugger is enabled. The
settings call binary on reset and call binary on boot load blobs of up to
128 KB into the ROM BIOS area for CPU testing.
ref: src/dos/dos_programs.cpp:3587-3646, src/ints/bios.cpp:13280-13353
ref: src/dos/dos_programs.cpp:3589-3642, src/ints/bios.cpp:13280-13356
A build configured with --enable-dosbox_agent reads the key=value file named
by -agent-config to start the RPC debugger agent; the file names the
transport and endpoint, nothing else is read from disk.
ref: configure.ac:1441-1448, src/gui/sdlmain.cpp:8487-8493, src/agent/protocol/agent_protocol.cpp:477-632
Glide passthrough loads glide2x.dll, libglide2x.so or libglide2x.dylib.
ref: src/hardware/glide.cpp:353-359, src/dosbox.cpp:3477-3479
ref: src/hardware/glide.cpp:353-359, src/dosbox.cpp:3485-3487
ttf.font, ttf.fontbold, ttf.fontital and ttf.fontboit name a TTF, OTF, FON or
TTC font resolved through the same search order plus the system font
@@ -109,9 +121,10 @@ notes: |
the customcodepage translation table, .kl layout files and the KEYBOARD.SYS
to KEYBRD4.SYS libraries read from a mounted drive, the glshaders directory
and the .lng translations.
ref: src/ints/bios.cpp:11463-11472, src/gui/sdlmain.cpp:7010-7017,
src/dos/dos.cpp:4402-4425, src/dos/dos_keyboard_layout.cpp:300-340,
src/gui/render.cpp:1538-1545, src/misc/messages.cpp:294-320
ref: src/ints/bios.cpp:11463-11472, src/gui/sdlmain.cpp:966-968, 7010-7018,
src/gui/sdl_mapper.cpp:5731-5787, src/dos/dos.cpp:4402-4437,
src/dos/dos_keyboard_layout.cpp:300-340, src/gui/render.cpp:1538-1545,
src/misc/messages.cpp:294-320
files:
# -- MT-32 and CM-32L control ROMs --
@@ -260,7 +273,7 @@ files:
note: >
any SF2 or SF3 file loads; fluid.soundfont names it and
fluid_synth_sfload is the only check
source_ref: "src/gui/midi_synth.h:346-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3710"
source_ref: "src/gui/midi_synth.h:346-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3724"
# -- PC-98 character generator --
@@ -274,7 +287,7 @@ files:
256 8x8 cells at 0x0, 256 8x16 cells at 0x800, 96 by 92 16x16 cells at
0x1800; a file of any other length is rejected. Enabled by
pc-98 try font rom, on by default
source_ref: "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2483-2484"
source_ref: "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2491-2492"
- name: "ANEX86.BMP"
description: "PC-98 character generator, Anex86 bitmap"
@@ -285,7 +298,7 @@ files:
pixel, no compression, inverse colour scheme; the first row is the 8x16
single-width set and the rest is 16x16 full-width. Also reachable through
the pc-98 anex86 font setting, which is tried before FONT.ROM
source_ref: "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2487-2490"
source_ref: "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2495-2498"
- name: "FREECG98.BMP"
description: "PC-98 character generator, free generated bitmap"
@@ -335,32 +348,32 @@ files:
description: "Printer Roman typeface"
required: false
note: "also the fallback typeface for any unmapped LQ selection"
source_ref: "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4621"
source_ref: "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4629-4631"
- name: "sansserif.ttf"
path: "FONTS/sansserif.ttf"
description: "Printer Sans Serif typeface"
required: false
source_ref: "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4621"
source_ref: "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4629-4631"
- name: "courier.ttf"
path: "FONTS/courier.ttf"
description: "Printer Courier typeface"
required: false
source_ref: "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4621"
source_ref: "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4629-4631"
- name: "script.ttf"
path: "FONTS/script.ttf"
description: "Printer Script typeface"
required: false
source_ref: "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4621"
source_ref: "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4629-4631"
- name: "ocra.ttf"
path: "FONTS/ocra.ttf"
description: "Printer OCR-A typeface"
required: false
note: "serves both the OCR-A and OCR-B selections"
source_ref: "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4621"
source_ref: "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4629-4631"
# -- PC-98 sound board BIOS --
@@ -373,7 +386,7 @@ files:
note: >
16 KB read into CC000h from the working directory only, when
pc-98 sound bios and pc-98 load sound bios rom file are both set
source_ref: "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2384-2392"
source_ref: "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2392-2399"
# -- Video BIOS ROM images --
# Loaded in place of the built-in INT 10h when vga bios use rom image is set.
@@ -387,7 +400,7 @@ files:
max_size: 65536
validation: [size]
note: "default file name for machine = svga_et4000"
source_ref: "src/dosbox.cpp:942-986, src/dosbox.cpp:2751-2763"
source_ref: "src/dosbox.cpp:943-994, src/dosbox.cpp:2759-2770"
- name: "TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin"
description: "S3 Trio64 video BIOS"
@@ -398,7 +411,7 @@ files:
max_size: 65536
validation: [size]
note: "default file name for machine = svga_s3"
source_ref: "src/dosbox.cpp:947-949, src/dosbox.cpp:2751-2763"
source_ref: "src/dosbox.cpp:951-953, src/dosbox.cpp:2759-2770"
- name: "ibm-vga.bin"
description: "IBM VGA option ROM of 10/27/86, laid out as mapped at C000:0"
@@ -411,7 +424,7 @@ files:
read by LOADROM.COM from a mounted local drive; accepted when the file
starts with 55 AA, byte 3 masked with 0xFC equals 0xE8 and the string IBM
appears at offset 0x1E, and the machine is EGA or better
source_ref: "src/dos/dos_programs.cpp:3529-3555, src/dos/dos_programs.cpp:3566-3571"
source_ref: "src/dos/dos_programs.cpp:3529-3555, src/dos/dos_programs.cpp:3566-3572"
# -- IBM ROM BASIC --
@@ -428,7 +441,7 @@ files:
32 KB to 64 KB in 4 KB steps; LOADROM.COM maps the same image at F600:0
when it is exactly 32768 bytes, starts with E9 8F 7E and carries the
string IBM at offset 0x4CD4
source_ref: "src/ints/bios.cpp:13212-13232, src/dos/dos_programs.cpp:3556-3560, src/dosbox.cpp:1937-1939"
source_ref: "src/ints/bios.cpp:13212-13232, src/dos/dos_programs.cpp:3556-3560, src/dosbox.cpp:1945-1947"
# -- PCjr --
@@ -454,7 +467,7 @@ files:
loaded at the top of the first megabyte, rounded up to a paragraph and
truncated to 128 KB, or to 96 KB on PC-98; a larger image is clamped
rather than rejected
source_ref: "src/dos/dos_programs.cpp:2250-2299"
source_ref: "src/dos/dos_programs.cpp:2249-2299"
- name: "ITF.ROM"
description: "PC-98 Initial Firmware Test BIOS"
+807 -42
View File
@@ -1,54 +1,819 @@
emulator: eka2l1
type: standalone
source: "https://github.com/EKA2L1/EKA2L1"
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/EKA2L1/EKA2L1"
libretro: "https://github.com/WizzardSK/eka2l1-libretro/tree/libretro"
upstream: "https://github.com/EKA2L1/EKA2L1"
profiled_date: "2026-03-26"
source_commit: "f8a9a0a380d62f82a463bcc299f2b9250b819674"
core_version: "continuous"
display_name: "EKA2L1 (Symbian OS / N-Gage)"
profiled_date: "2026-09-17"
source_commit:
standalone: "293e399b34eb0cee1519fb095587be65a0a4edd2"
libretro: "97ac3df6767f819c95405e4c86e7007d2e8ae61d"
upstream_commit:
libretro: "47b4ad76a6dd7d3656f52be86dfd5b9ff9a50c70"
core_version: "0.0.9"
display_name: "Nokia - Symbian / N-Gage (EKA2L1)"
cores:
- eka2l1
systems:
- ngage
analysis_date: "2026-03-26"
analysis_commit: "e67f84d (depth=1)"
mode: standalone
# EKA2L1 emulates Symbian OS kernel and reimplements critical app servers and
# libraries. Supports S60v1 through Symbian Belle, including N-Gage 1.0/2.0.
#
# Each phone model requires its own ROM dump identified by firmware code.
# ROM path at runtime: {storage}/roms/{firmware_code_lowercase}/SYM.ROM
# Storage defaults to data/ relative to executable.
#
# Device installation (GUI or CLI) processes ROM dumps:
# - Raw .rom files → copied to roms/{firmcode}/SYM.ROM
# - RPKG files → extracted to drives/z/{firmcode}/ (system partition)
# - VPL firmware packages → extracted to roms/ and drives/
#
# drives/z/{firmcode}/ content is generated during installation, not
# user-placed. drives/c/, drives/d/, drives/e/ are runtime storage.
#
# Firmware codes for N-Gage systems:
# NEM-4 = Nokia N-Gage (original, S60v1)
# RH-29 = Nokia N-Gage QD (S60v1)
# For N-Gage 2.0 games, a S60v3 phone ROM is needed (e.g., RM-409 = 5320 XpressMusic).
#
# No libretro core exists. No .info file.
# resources/ files (shaders, soundfonts, gamecontrollerdb.txt) ship with the
# emulator distribution, not user-supplied.
- symbian
notes: |
Pure standalone Symbian OS / N-Gage emulator. No libretro core.
Requires phone ROM dumps (SYM.ROM) obtained from real Nokia devices.
The emulator supports 100+ Nokia phone models (NEM-4, RH-29, RM-409, etc.).
No hash or size validation on the ROM file; the loader parses the ROM structure.
Batocera maps the ngage system to eka2l1 in configgen-defaults.yml.
No dedicated Batocera configgen generator exists.
Symbian OS and N-Gage emulator: the EKA1 and EKA2 kernels are emulated and
the critical application servers and libraries reimplemented in C++, while
the ROM of a real phone supplies the rest of the operating system, so every
device to emulate is built from a firmware dump. Covers the N-Gage and
N-Gage 2.0 libraries and the game libraries from S60v1 to Symbian Belle. One
tree builds the Qt desktop frontend, the Android and iOS applications, and a
libretro core; the core lives on the libretro branch of the WizzardSK fork,
merged from upstream at 47b4ad76.
ref: README.md:20, README.md:29-32, src/emu/CMakeLists.txt:61-62,
CMakeLists.txt:18, .gitlab-ci.yml:14-22
A device is registered in <storage>/devices.yml and holds its ROM image at
<storage>/roms/<firmware code, lower case>/SYM.ROM with the unpacked ROFS
tree beside it under <storage>/drives/z/<firmware code>/. Selecting the
device opens that SYM.ROM; a parse failure or a missing file makes set_device
return false and nothing runs. The image is parsed for its root directory
list and never checked against a size or a hash. <storage> is the
data-storage option, "data" by default, relative to the working directory.
ref: src/emu/system/include/system/consts.h:23-25,
src/emu/system/src/epoc.cpp:1393-1401, src/emu/system/src/epoc.cpp:805-829,
src/emu/loader/src/rom.cpp:281-299, src/emu/system/src/devices.cpp:175-200,
src/emu/config/include/config/options.inl:45
Three installers produce that layout from a dump. A bare ROM image is enough
when it is an EKA1 image carrying z:\system\versions\sw.txt, the N-Gage case:
its files are unpacked to drives/z/, the firmware code is read from them and
the image is copied to SYM.ROM. An EKA2 image needs the RPKG made by the
Dumber tool beside it, which supplies the ROFS. A .vpl variant packing list
names the .fpsx flash images of a factory firmware, from which the core image,
the ROFS and the drive contents are extracted. The names of the dump files
are free; SYM.ROM is the name the installers give the resident copy.
ref: src/emu/system/src/installation/rpkg.cpp:43-64,
src/emu/system/src/installation/rpkg.cpp:131-193,
src/emu/system/src/installation/rpkg.cpp:202-248,
src/emu/system/src/installation/rpkg.cpp:251-253,
src/emu/system/src/installation/firmware.cpp:290-303,
src/emu/system/src/installation/firmware.cpp:381-406,
src/emu/system/src/installation/firmware.cpp:425-428,
src/emu/system/src/installation/firmware.cpp:467-487
Standalone, the Qt frontend installs through its device dialog, from a ROM,
a ROM with its RPKG, or a VPL; the settings dialog can also rescan drives/z/
and rebuild devices.yml from the directories that still hold a SYM.ROM. On
Linux and macOS the working directory is the EKA2L1 folder of the user data
location and the shipped patch, resources, scripts and compat folders are
copied there at startup; on Windows it is the directory the executable is
started from.
ref: src/emu/qt/src/device_install_dialog.cpp:161-171,
src/emu/qt/src/device_install_dialog.cpp:180-184,
src/emu/qt/src/settings_dialog.cpp:526, src/emu/system/src/epoc.cpp:383-445,
src/emu/qt/src/main.cpp:101-121
The libretro core keeps everything under <system>/eka2l1: data-storage is
forced to that directory whatever config.yml carries. On retro_init, when no
device is registered, <system>/eka2l1/firmware is scanned once and the first
.vpl found is installed, otherwise the first .rom or .fpsx with the first
.rpkg beside it. The result is saved to devices.yml and device 0 is selected.
Without a device the core logs where the dump goes and refuses to start when
the GL context arrives, so the firmware folder is required. Content is a
.sis, .sisx or .n-gage package, installed on first load and remembered in
<system>/eka2l1/libretro-content.txt against the UID it registered, or a
.eka2l1 text shortcut naming the UID of an application already installed.
supports_no_game is false. is_experimental is true in the .info.
ref: src/emu/libretro/src/main.cpp:51-53, src/emu/libretro/src/state.cpp:12-17,
src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111,
src/emu/libretro/src/main.cpp:161-169, src/emu/libretro/src/main.cpp:68-69,
src/emu/libretro/src/main.cpp:116-117, src/emu/libretro/src/content.cpp:119,
src/emu/libretro/src/content.cpp:244-249
At this revision the libretro build stages none of the shipped resource
folders and never calls set_runtime_resource_root, so the GL shaders, the
compat folder and panic.json are looked up relative to the process working
directory. It calls neither initialize_user_parties nor mount for drive Z
and creates no audio or controller driver, so the patch libraries, the Lua
scripts, the MIDI banks and the controller database are not read there.
Those entries carry mode standalone.
ref: src/emu/libretro/CMakeLists.txt:8-45, src/emu/libretro/src/thread.cpp:19-38,
src/emu/libretro/src/thread.cpp:41-60, src/emu/libretro/src/thread.cpp:83-89,
src/emu/common/src/path.cpp:427-450, src/emu/system/src/epoc.cpp:1296-1317
Shipped runtime files are read at their own name below the working
directory. Patch libraries: every patch/*.map is parsed, the DLL is
<map name>_<version suffix>.dll for the device's Symbian version upward, then
<map name>_general.dll; a map naming a source picks that DLL prefix; a map
requiring host-tls is skipped below S60v3 FP1; a missing folder is skipped.
goommonitor and avkonfep have no map: the Qt and Android frontends copy them
over the ROM's own Z:\sys\bin DLL, from S60v5 and from S60v3 FP1 on. Shaders:
the eight files under resources are compiled by the OpenGL driver at start
and an unreadable one leaves the program without source. The upscale filter
named in an application's screen-upscale setting is read from
resources/upscale/<name>.frag; the 21 filters ship from the upscale-shaders
submodule, pinned at 49dd304c. MIDI: resources/defaultbank.sf2 feeds the
TinySoundFont player and resources/defaultbank.hsb the miniBAE player, the
paths being the sf2-bank-path and hsb-bank-path options. SDL2 controller
mappings come from resources/gamecontrollerdb.txt. compat/panicBlackList.json
names thread panics to swallow and compat/<UID>.yml carries per-application
settings; panic.json holds the panic category descriptions. Lua scripts under
scripts/ are loaded when the build carries LuaJIT and require the eka2l1.*
modules from scripts/eka2l1/; the libretro recipe builds without it. Fonts
the user imports live in <storage>/fonts and are added to the font store
after the ROM fonts.
ref: src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:435-438,
src/emu/kernel/src/libmanager.cpp:495-540, src/emu/kernel/src/libmanager.cpp:557-561,
src/emu/qt/src/state.cpp:181-204,
src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264-282,
src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189,
src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409,
src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77,
src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96,
src/emu/config/include/config/options.inl:72-73,
src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145,
src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/config/src/app_settings.cpp:82-114,
src/emu/utils/src/panic.cpp:32-38, src/emu/scripting/src/manager.cpp:196-202,
src/emu/scripting/src/manager.cpp:230-256, src/emu/services/src/fbs/fbs.cpp:434,
src/emu/services/src/fbs/impls/font.cpp:1190-1213, .gitlab-ci.yml:19,
src/emu/qt/CMakeLists.txt:264-278, src/emu/qt/CMakeLists.txt:289-290,
src/emu/qt/CMakeLists.txt:376-377, cmake/Symbian.cmake:20-31
config.yml, bindings/<profile>.yml, devices.yml, the drives/ tree and
libretro-content.txt are written by the emulator itself.
ref: src/emu/config/src/config.cpp:344-350, src/emu/config/src/config.cpp:358-368,
src/emu/system/src/devices.cpp:248-249
files:
- name: "SYM.ROM"
- name: SYM.ROM
system: ngage
path: eka2l1/firmware/SYM.ROM
standalone_path: data/roms/nem-4/SYM.ROM
required: true
size: 18612224
description: "Nokia N-Gage (NEM-4) firmware 4.03 ROM image, EKA1"
note: >-
An EKA1 image carrying sw.txt installs on its own: the libretro core
picks it up from the firmware folder under any name ending in .rom and
the standalone frontends take it through the device dialog. The
installers copy it to roms/nem-4/SYM.ROM, the path the emulator opens
whenever the device is selected. Every other phone model needs its own
dump, an EKA2 image with its RPKG, or a VPL with its .fpsx images.
source_ref:
standalone: "src/emu/system/src/epoc.cpp:1393-1401, src/emu/system/src/epoc.cpp:805-829, src/emu/system/include/system/consts.h:23-25, src/emu/system/src/installation/rpkg.cpp:43-64, src/emu/system/src/installation/rpkg.cpp:190-193, src/emu/qt/src/device_install_dialog.cpp:161-171"
libretro: "src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111, src/emu/libretro/src/main.cpp:161-169, src/emu/system/src/installation/rpkg.cpp:202-248"
- name: audiooutputrouting.dll.map
standalone_path: patch/audiooutputrouting.dll.map
mode: standalone
description: "Symbian OS phone ROM dump. One per device, placed in roms/{firmware_code}/ subdirectory."
source_ref: "src/emu/system/src/epoc.cpp:1288, src/emu/system/src/epoc.cpp:794-799, src/emu/system/include/system/consts.h:23-25"
required: false
bundled: true
description: "Export map routing audiooutputrouting.dll to the host"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, cmake/Symbian.cmake:20-31, src/patch/CMakeLists.txt:6"
- name: audiooutputrouting_general.dll
standalone_path: patch/audiooutputrouting_general.dll
mode: standalone
required: false
bundled: true
description: "Patched audiooutputrouting.dll, all Symbian versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/audiooutputrouting/group/audiooutputrouting.dll.map:1"
- name: avkonfep_general.dll
standalone_path: patch/avkonfep_general.dll
mode: standalone
required: false
bundled: true
description: "Avkon FEP bridged to the host input method, copied over Z:\\sys\\bin\\avkonfep.dll on S60v3 FP1 and later"
source_ref: "src/emu/qt/src/state.cpp:181-204, src/patch/CMakeLists.txt:5"
- name: backlightctrl.dll.map
standalone_path: patch/backlightctrl.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for backlightctrl.dll, bound to the DLL UIDs it names"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:10"
- name: backlightctrl_v81a.dll
standalone_path: patch/backlightctrl_v81a.dll
mode: standalone
required: false
bundled: true
description: "Patched backlightctrl.dll for Symbian 8.1a"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/backlightctrl/group/backlightctrl.dll.map:1-4"
- name: commdb.dll.map
standalone_path: patch/commdb.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for the in-ROM commdb.dll of Symbian 6"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:17"
- name: commdb_v6.dll
standalone_path: patch/commdb_v6.dll
mode: standalone
required: false
bundled: true
description: "Patched commdb.dll for Symbian 6"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/commdb/group/commdb.dll.map:1-7"
- name: ecam.dll.map
standalone_path: patch/ecam.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for ecam.dll, the camera API"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:8"
- name: ecam_general.dll
standalone_path: patch/ecam_general.dll
mode: standalone
required: false
bundled: true
description: "Patched ecam.dll, all Symbian versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/ecam/group/ecam.dll.map:1-4"
- name: goommonitor_general.dll
standalone_path: patch/goommonitor_general.dll
mode: standalone
required: false
bundled: true
description: "Global OOM monitor client, copied over Z:\\sys\\bin\\goommonitor.dll on S60v5 and later"
source_ref: "src/emu/qt/src/state.cpp:181-204, src/patch/CMakeLists.txt:15"
- name: mediaclientaudio.dll.map
standalone_path: patch/mediaclientaudio.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for mediaclientaudio.dll, CMdaAudioPlayerUtility and friends"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:11"
- name: mediaclientaudio_general.dll
standalone_path: patch/mediaclientaudio_general.dll
mode: standalone
required: false
bundled: true
description: "Patched mediaclientaudio.dll, EKA2 versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:1-4"
- name: mediaclientaudio_v81a.dll
standalone_path: patch/mediaclientaudio_v81a.dll
mode: standalone
required: false
bundled: true
description: "Patched mediaclientaudio.dll for Symbian 8.1a"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:424-427"
- name: mediaclientaudioinputstream.dll.map
standalone_path: patch/mediaclientaudioinputstream.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for mediaclientaudioinputstream.dll, served by the mediaclientaudiostream DLLs through its source key"
source_ref: "src/emu/kernel/src/libmanager.cpp:495-508, src/patch/mediaclientaudiostream/group/mediaclientaudioinputstream.dll.map:1"
- name: mediaclientaudiostream.dll.map
standalone_path: patch/mediaclientaudiostream.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for mediaclientaudiostream.dll"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:12"
- name: mediaclientaudiostream_general.dll
standalone_path: patch/mediaclientaudiostream_general.dll
mode: standalone
required: false
bundled: true
description: "Patched mediaclientaudiostream.dll, EKA2 versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1"
- name: mediaclientaudiostream_v81a.dll
standalone_path: patch/mediaclientaudiostream_v81a.dll
mode: standalone
required: false
bundled: true
description: "Patched mediaclientaudiostream.dll for Symbian 8.1a"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1"
- name: mediaclientvideo.dll.map
standalone_path: patch/mediaclientvideo.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for mediaclientvideo.dll"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:13"
- name: mediaclientvideo_v100.dll
standalone_path: patch/mediaclientvideo_v100.dll
mode: standalone
required: false
bundled: true
description: "Patched mediaclientvideo.dll for Symbian^3 and Belle"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:1"
- name: postingsurfacefactory.dll.map
standalone_path: patch/postingsurfacefactory.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for postingsurfacefactory.dll, the video posting surface"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:14"
- name: postingsurfacefactory_general.dll
standalone_path: patch/postingsurfacefactory_general.dll
mode: standalone
required: false
bundled: true
description: "Patched postingsurfacefactory.dll, all Symbian versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/postingsurfacefactory/group/postingsurfacefactory.dll.map:1"
- name: scdv.dll.map
standalone_path: patch/scdv.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for scdv.dll, CFbsDrawDevice and CDirectScreenBitmap"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:7"
- name: scdv_general.dll
standalone_path: patch/scdv_general.dll
mode: standalone
required: false
bundled: true
description: "Patched scdv.dll, EKA2 versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/scdv/group/scdv.dll.map:1-28"
- name: scdv_v81a.dll
standalone_path: patch/scdv_v81a.dll
mode: standalone
required: false
bundled: true
description: "Patched scdv.dll for Symbian 8.1a and earlier EKA1 releases"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/scdv/group/scdv.dll.map:29-45"
- name: ssl.dll.map
standalone_path: patch/ssl.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for ssl.dll routed to the host TLS stack, skipped below S60v3 FP1"
source_ref: "src/emu/kernel/src/libmanager.cpp:435-438, src/patch/ssl/group/ssl.dll.map:1-4, src/patch/CMakeLists.txt:16"
- name: ssl_general.dll
standalone_path: patch/ssl_general.dll
mode: standalone
required: false
bundled: true
description: "Patched ssl.dll, all Symbian versions"
source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/ssl/group/ssl.dll.map:6-9"
- name: vibractrl.dll.map
standalone_path: patch/vibractrl.dll.map
mode: standalone
required: false
bundled: true
description: "Export map for vibractrl.dll, bound to the DLL UIDs it names"
source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:9"
- name: vibractrl_v81a.dll
standalone_path: patch/vibractrl_v81a.dll
mode: standalone
required: false
bundled: true
description: "Patched vibractrl.dll for Symbian 8.1a"
source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/vibractrl/group/vibractrl.dll.map:1-4"
- name: sprite_norm.vert
standalone_path: resources/sprite_norm.vert
mode: standalone
required: true
bundled: true
description: "Vertex shader shared by the sprite, mask and upscale programs"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:274, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, src/emu/qt/CMakeLists.txt:272"
- name: sprite_norm.frag
standalone_path: resources/sprite_norm.frag
mode: standalone
required: true
bundled: true
description: "Fragment shader of the sprite program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:265, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:278, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: sprite_mask.frag
standalone_path: resources/sprite_mask.frag
mode: standalone
required: true
bundled: true
description: "Fragment shader of the masked sprite program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:266, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:279, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: sprite_upscaled.frag
standalone_path: resources/sprite_upscaled.frag
mode: standalone
required: true
bundled: true
description: "Fragment shader of the default upscale program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:267, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:280, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-398, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: brush.vert
standalone_path: resources/brush.vert
mode: standalone
required: true
bundled: true
description: "Vertex shader of the brush program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:268, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:275, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: brush.frag
standalone_path: resources/brush.frag
mode: standalone
required: true
bundled: true
description: "Fragment shader of the brush program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:269, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:281, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: pen.vert
standalone_path: resources/pen.vert
mode: standalone
required: true
bundled: true
description: "Vertex shader of the pen program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:270, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:276, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: pen.frag
standalone_path: resources/pen.frag
mode: standalone
required: true
bundled: true
description: "Fragment shader of the pen program"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:271, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:282, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189"
- name: 2xBR.frag
standalone_path: resources/upscale/2xBR.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: 4xBR.frag
standalone_path: resources/upscale/4xBR.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: 4xhq.frag
standalone_path: resources/upscale/4xhq.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: 5xBR-lv2.frag
standalone_path: resources/upscale/5xBR-lv2.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: 5xBR.frag
standalone_path: resources/upscale/5xBR.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: aacolor.frag
standalone_path: resources/upscale/aacolor.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: CRT-Hyllian.frag
standalone_path: resources/upscale/CRT-Hyllian.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: CRT-Lottes-TV.frag
standalone_path: resources/upscale/CRT-Lottes-TV.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: CRT-Lottes.frag
standalone_path: resources/upscale/CRT-Lottes.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: dot.frag
standalone_path: resources/upscale/dot.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: dot_mobile.frag
standalone_path: resources/upscale/dot_mobile.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: dotpsp_color_mobile.frag
standalone_path: resources/upscale/dotpsp_color_mobile.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: fxaa.frag
standalone_path: resources/upscale/fxaa.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: grayscale.frag
standalone_path: resources/upscale/grayscale.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: inversecolors.frag
standalone_path: resources/upscale/inversecolors.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: natural.frag
standalone_path: resources/upscale/natural.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: scanline-emu.frag
standalone_path: resources/upscale/scanline-emu.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: scanline.frag
standalone_path: resources/upscale/scanline.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: sharpen.frag
standalone_path: resources/upscale/sharpen.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: zfast_lcd.frag
standalone_path: resources/upscale/zfast_lcd.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: zfast_lcd_mobile.frag
standalone_path: resources/upscale/zfast_lcd_mobile.frag
mode: standalone
required: false
bundled: true
description: "Upscale filter selected by an application's filter-shader-path setting"
source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273"
- name: defaultbank.sf2
standalone_path: resources/defaultbank.sf2
mode: standalone
required: false
bundled: true
description: "SoundFont bank of the TinySoundFont MIDI player, the sf2-bank-path option"
source_ref: "src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:192-196, src/emu/config/include/config/options.inl:73, src/emu/qt/src/state.cpp:157-158, src/emu/qt/CMakeLists.txt:275"
- name: defaultbank.hsb
standalone_path: resources/defaultbank.hsb
mode: standalone
required: false
bundled: true
description: "Beatnik bank of the miniBAE MIDI player, the hsb-bank-path option"
source_ref: "src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, src/emu/config/include/config/options.inl:72, src/emu/qt/src/state.cpp:157-158, src/emu/qt/CMakeLists.txt:274"
- name: gamecontrollerdb.txt
standalone_path: resources/gamecontrollerdb.txt
mode: standalone
required: false
bundled: true
description: "SDL2 controller mapping database handed to SDL_GameControllerAddMappingsFromFile"
source_ref: "src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, src/emu/qt/CMakeLists.txt:277"
- name: joystick_base.png
standalone_path: resources/joystick_base.png
mode: standalone
required: false
bundled: true
description: "Joystick image of the Qt button mapping editor"
source_ref: "src/emu/qt/src/btnmap/joystick.cpp:113-117, src/emu/qt/CMakeLists.txt:278"
- name: overlay_font.ttf
standalone_path: resources/overlay_font.ttf
mode: standalone
required: false
bundled: true
description: "Overlay font of the Qt button mapping editor"
source_ref: "src/emu/qt/src/btnmap/editor.cpp:60-62, src/emu/qt/CMakeLists.txt:278"
- name: panicBlackList.json
standalone_path: compat/panicBlackList.json
mode: standalone
required: false
bundled: true
description: "Thread panics the kernel swallows instead of killing the thread, by process, thread, category and code"
source_ref: "src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/kernel/src/kernel.cpp:1536, src/emu/qt/CMakeLists.txt:276"
- name: 101FD3DE.yml
standalone_path: compat/101FD3DE.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FD3DE: frame rate and launch delay"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: 101FD3F5.yml
standalone_path: compat/101FD3F5.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FD3F5: frame rate and launch delay"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: 101FD3F6.yml
standalone_path: compat/101FD3F6.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FD3F6: frame rate and launch delay"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: 101FD3FD.yml
standalone_path: compat/101FD3FD.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FD3FD: frame rate and launch delay"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: 101FD409.yml
standalone_path: compat/101FD409.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FD409, The ONE: T9 bypass"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: 101FE1CA.yml
standalone_path: compat/101FE1CA.yml
mode: standalone
required: false
bundled: true
description: "Per-application settings for UID 0x101FE1CA: frame rate and launch delay"
source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276"
- name: panic.json
standalone_path: panic.json
mode: standalone
required: false
bundled: true
description: "Panic category descriptions read when the system is created"
source_ref: "src/emu/utils/src/panic.cpp:32-38, src/emu/system/src/epoc.cpp:634, src/emu/qt/CMakeLists.txt:269"
- name: aq_crash_fix.lua
standalone_path: scripts/aq_crash_fix.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: eternal_legacy_crash_fix.lua
standalone_path: scripts/eternal_legacy_crash_fix.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: hero_of_sparta_crash_fix.lua
standalone_path: scripts/hero_of_sparta_crash_fix.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: s3_driver_patch.lua
standalone_path: scripts/s3_driver_patch.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: s60v3_empty_avkon_menu_fix.lua
standalone_path: scripts/s60v3_empty_avkon_menu_fix.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: wh40k_slow_load_fix.lua
standalone_path: scripts/wh40k_slow_load_fix.lua
mode: standalone
required: false
bundled: true
description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT"
source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271"
- name: common.lua
standalone_path: scripts/eka2l1/common.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.common module the shipped scripts require through package.path"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:1, src/emu/qt/CMakeLists.txt:289-290"
- name: cpu.lua
standalone_path: scripts/eka2l1/cpu.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.cpu module the shipped scripts require through package.path"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:3, src/emu/qt/CMakeLists.txt:289-290"
- name: events.lua
standalone_path: scripts/eka2l1/events.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.events module the shipped scripts require through package.path"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:2, src/emu/qt/CMakeLists.txt:289-290"
- name: helper.lua
standalone_path: scripts/eka2l1/helper.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.helper module required by the other eka2l1 modules"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/qt/CMakeLists.txt:289-290"
- name: kernel.lua
standalone_path: scripts/eka2l1/kernel.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.kernel module the shipped scripts require through package.path"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:4, src/emu/qt/CMakeLists.txt:289-290"
- name: std.lua
standalone_path: scripts/eka2l1/std.lua
mode: standalone
required: false
bundled: true
description: "eka2l1.std module the shipped scripts require through package.path"
source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:5, src/emu/qt/CMakeLists.txt:289-290"
+78 -18
View File
@@ -3,36 +3,96 @@ type: libretro
core_classification: official_port
source: "https://github.com/drhelius/Gearcoleco"
upstream: "https://github.com/drhelius/Gearcoleco"
profiled_date: "2026-03-23"
source_commit: "ca4d13bae91e402d0dce29ed98d6bee2b41b1922"
core_version: "1.0.0"
display_name: "Coleco - ColecoVision (Gearcoleco)"
profiled_date: "2026-09-17"
source_commit: "8d32d242c6ba2104d75c17bb79773275387d4c37"
core_version: "1.7.0-7-g8d32d24"
display_name: "Coleco - ColecoVision / ADAM (Gearcoleco)"
cores:
- gearcoleco
systems:
- colecovision
- coleco-adam
notes: |
ColecoVision emulator by Ignacio Sanchez (drhelius). Official port
maintained by the upstream author. The ColecoVision BIOS ROM is required.
Without it, the core renders a static placeholder image (kNoBiosImage from
no_bios.h) and games do not execute.
ColecoVision and Coleco ADAM emulator by Ignacio Sanchez (drhelius); the
libretro port lives in the same repository. Three firmware roles are
declared in kAdamFirmwareMetadata (src/Adam.cpp:26-42): OS-7, EOS and
SmartWriter, each with a size, a CRC32 and its accepted file names.
The libretro wrapper (platforms/libretro/libretro.cpp:295-308) tries "colecovision.rom" first,
then falls back to "coleco.rom". Both resolve to the same LoadBios() call
in src/Memory.cpp:256-287 which validates size == 0x2000 (8192 bytes) only.
No hash check is performed.
find_firmware() (platforms/libretro/libretro.cpp:773-834) walks the
frontend system directory and then its gearcoleco subdirectory
(libretro.cpp:787), trying every accepted name in each. A file whose size
differs from the role's size is skipped with a warning (libretro.cpp:806-811).
Every candidate that passes is compared to the first one found: two
valid-sized images with different bytes are an ambiguous role and the load
fails (libretro.cpp:820-827). CRC32 is computed after the search and only
logged when it differs from the table (libretro.cpp:867-870, 918-929).
On reset, BIOS byte at offset 0x69 is patched for region selection:
0x3C for NTSC, 0x32 for PAL (src/Memory.cpp:206-209).
The machine is chosen per load (libretro.cpp:2387-2389): .ddp, .dsk, a ZIP
holding an ADAM image, an .m3u playlist, no content at all, or a cartridge
with the core option gearcoleco_cartridge_hardware set to ADAM start the
ADAM; any other cartridge starts the ColecoVision. The "adam" subsystem
(libretro.cpp:529-537) takes a cartridge, two disks and two data packs.
SGM (Super Game Module) expanded RAM requires no additional BIOS files.
ColecoVision: load_colecovision_firmware() (libretro.cpp:852-879) needs OS-7
and retro_load_game() returns false without it (libretro.cpp:2399-2403).
It runs again on retro_reset() (libretro.cpp:2204-2205). The image goes
through Memory::LoadBiosFromBuffer() (src/Memory.cpp:310-319) and byte 0x69
is patched on reset, 0x32 when the cartridge is PAL and 0x3C otherwise
(src/Memory.cpp:246-249); the ADAM always gets 0x3C (src/Memory.cpp:221).
ADAM: load_adam_firmware() (libretro.cpp:881-942) needs all three roles and
every ADAM entry point returns false when one is missing (libretro.cpp:
2372-2373, 2429-2433, 2446-2447, 2530-2534). Adam::LoadFirmware()
(src/Adam.cpp:168-190) copies the three images, IsFirmwareReady()
(src/Adam.cpp:139-148) gates StartAdam() (src/GearcolecoCore.cpp:410-415).
The MIOC maps SmartWriter over the lower 32 KiB with EOS replacing its
last 8 KiB bank when the control latch selects it, and OS-7 over the first
8 KiB in cartridge mode (src/Adam.cpp:531-555).
Save RAM, save states and IPS patches are read next to the content or in
the frontend save directory; they are state the core writes, not files a
user obtains.
files:
- name: "colecovision.rom"
aliases: ["coleco.rom"]
aliases: ["coleco.rom", "os7.u2"]
description: "ColecoVision OS-7 BIOS"
system: colecovision
required: true
size: 8192
validation: [size]
source_ref: "platforms/libretro/libretro.cpp:448-470, src/Memory.cpp:230-283"
crc32: "3aa93ef3"
sha1: "45bedc4cbdeac66c7df59e9e599195c778d86a92"
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:773-834 (find_firmware), 852-879 (load_colecovision_firmware), 2399-2403, 2204-2205, src/Adam.cpp:28-32, src/Adam.h:53, src/Memory.cpp:310-319, src/Memory.cpp:246-249"
note: >
Loaded for both machines. Any 8192-byte image is accepted; a CRC32
other than 3aa93ef3 logs "Unknown OS-7 revision" and runs. PAL timing
comes from the byte patched at 0x69, not from a PAL dump.
- name: "eos.rom"
description: "ADAM EOS (Elementary Operating System) ROM"
system: coleco-adam
required: true
size: 8192
crc32: "05a37a34"
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:881-942 (load_adam_firmware), 2372-2373, 2429-2433, 2446-2447, 2530-2534, src/Adam.cpp:33-36, src/Adam.h:54, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:537-540"
note: >
The 8 KiB EOS bank, the first half of the 16 KiB u22 chip; a CRC32
other than 05a37a34 logs "Unknown EOS revision" and runs. Only the ADAM
needs it: ColecoVision cartridges load without it.
- name: "writer.rom"
aliases: ["wp.rom", "wp_r80.rom"]
description: "ADAM SmartWriter word processor ROM"
system: coleco-adam
required: true
size: 32768
crc32: "58d86a2a"
sha1: "d4aec4efe1431e56fe52d83baf9118542c525255"
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:881-942 (load_adam_firmware), 2372-2373, 2429-2433, 2446-2447, 2530-2534, src/Adam.cpp:37-41, src/Adam.h:55, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:531-540"
note: >
A CRC32 other than 58d86a2a logs "Unknown SmartWriter revision" and
runs. Only the ADAM needs it: ColecoVision cartridges load without it.
+68 -38
View File
@@ -3,9 +3,9 @@ type: libretro
core_classification: official_port
source: "https://github.com/drhelius/Geargrafx"
upstream: "https://github.com/drhelius/Geargrafx"
profiled_date: "2026-03-23"
source_commit: "0a68ce8f6d3d787e84d7bc9efa30e982fa3d4c77"
core_version: "1.6.0"
profiled_date: "2026-09-17"
source_commit: "78fc3d7a1b9f55d78d8fe64c13368131a269e204"
core_version: "1.7.22"
display_name: "NEC - PC Engine / SuperGrafx / CD (Geargrafx)"
cores:
- geargrafx
@@ -16,24 +16,49 @@ systems:
notes: |
Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by
Ignacio Sanchez (drhelius). HuCard games run without BIOS.
Ignacio Sanchez (drhelius). HuCard games run without any external file.
CD-ROM games require a System Card BIOS from the system directory. The core
option "geargrafx_cdrom_bios" selects which card: Auto (default, maps to
syscard3.pce), System Card 1, System Card 2, System Card 3, or Game Express.
load_bios() in libretro.cpp builds "{system_directory}/{filename}" and calls
core->LoadBios(path, true) for the syscard, then always attempts to load
gexpress.pce via core->LoadBios(path, false).
CD-ROM content needs a System Card image from the frontend system directory.
load_bios() in platforms/libretro/libretro.cpp:617-658 picks the file name
from the core option geargrafx_cdrom_bios (libretro.cpp:1429-1452):
System Card 1 loads syscard1.pce, System Card 2 loads syscard2.pce, System
Card 3 (the default) and Force Game Express load syscard3.pce; the older
values Auto and Game Express are still accepted and map to the same. The
path is "{system_directory}/{name}" (libretro.cpp:644). When the card is
missing the core posts "CD-ROM BIOS not found" and continues
(libretro.cpp:645-654). gexpress.pce is then always attempted from the
same directory (libretro.cpp:656-657), silently. load_bios() runs from
retro_load_game() for CD content only (libretro.cpp:466-467) and again on
retro_reset() when a CD is loaded (libretro.cpp:312). With the libretro
VFS the file goes through load_bios_file() into LoadBiosFromBuffer(),
otherwise through Media::LoadBios() (libretro.cpp:580-615,
src/media.cpp:391-431).
LoadBios() in media.cpp reads the file, strips a 512-byte header if present,
computes CRC32, and checks it against k_game_database entries flagged with
GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. If the CRC32 is not
found, the BIOS is marked as "Unknown" and invalid, but loading still proceeds.
Size is checked against expected constants and logged if wrong, but not enforced.
Media::LoadBiosData() (src/media.cpp:447-488) compares the file size with
GG_BIOS_SYSCARD_SIZE (0x40000) or GG_BIOS_GAME_EXPRESS_SIZE (0x8000)
(src/defines.h:53-54) and only logs a mismatch. A 512-byte header is
stripped when the size has bit 9 set, the data is copied into a zeroed
buffer of the expected size, and CRC32 is computed over that whole buffer.
GatherBIOSInfoFromDB() (src/media.cpp:777-811) looks the CRC up in
k_game_database entries flagged GG_GAMEDB_BIOS_SYSCARD or
GG_GAMEDB_BIOS_GAME_EXPRESS (src/game_db.h:48-56); an unknown CRC marks the
image "Unknown" and invalid but it is still used. The CRC is therefore the
CRC of the padded buffer, not of the file: the 16384-byte Game Express
Green dump (file CRC32 20E0A364) is recognised as 16AAF05A.
Game Express CD-ROM games are auto-detected via CRC32 lookup in game_db.h
(GG_GAMEDB_GAME_EXPRESS flag). Arcade Card games are also detected from
game_db.h and enable extra 0x30000 bytes of Card RAM for Super CD-ROM mode.
For CD content the ROM banks map onto the System Card buffer, or onto the
Game Express buffer when the disc is a Game Express title
(src/media.cpp:845-849). A Game Express disc is detected by its CRC in
game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:743-747) or forced by the
option (src/media.cpp:604-608). With no card loaded the buffer is zeros and
the CD does not boot. Arcade Card titles are also detected from game_db.h
and run on the selected System Card.
Backup RAM is exposed through RETRO_MEMORY_SAVE_RAM (libretro.cpp:540-548)
and saved by the frontend. A connected Memory Base 128 is persisted by the
core itself as geargrafx_mb128.sav in the frontend save directory
(libretro.cpp:660-740). Both are state the core writes, not files a user
obtains.
files:
- name: "syscard3.pce"
@@ -41,43 +66,47 @@ files:
size: 262144
required: true
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:632, platforms/libretro/libretro.cpp:647-649, src/media.cpp:435-532, src/defines.h:52, src/game_db.h:50, src/game_db.h:54"
source_ref: "platforms/libretro/libretro.cpp:622, platforms/libretro/libretro.cpp:634-639, platforms/libretro/libretro.cpp:644-654, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:51-52, src/game_db.h:54"
note: >
Default BIOS for CD-ROM games (cdrom_bios Auto or System Card 3).
game_db.h recognizes Japan (CRC32 6D9A73EF) and USA (CRC32 2B5B75FE)
variants under the same filename.
Loaded for the default option value System Card 3 and for Force Game
Express. game_db.h accepts three images under this name: Japan
(CRC32 6D9A73EF), the Japan NuFont Hack (CRC32 0ECEA1F3, syscard3.pce
patched with xlateFont-JPN.ips from dshadoff/SYSCARD_Translatefont)
and USA (CRC32 2B5B75FE).
- name: "syscard2.pce"
description: "CD-ROM System Card 2.0"
description: "CD-ROM System Card 2.0 / 2.1"
size: 262144
required: false
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:631, platforms/libretro/libretro.cpp:641-642, src/media.cpp:435-532, src/game_db.h:48-49, src/game_db.h:53"
source_ref: "platforms/libretro/libretro.cpp:621, platforms/libretro/libretro.cpp:631-632, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:49-50, src/game_db.h:53"
note: >
cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h
recognizes three variants: v2.0 Japan (CRC32 52520BC6), v2.1 Japan
(CRC32 283B74E0), and USA (CRC32 FF2A5EC3).
Loaded when geargrafx_cdrom_bios is System Card 2. game_db.h accepts
v2.0 Japan (CRC32 52520BC6), v2.1 Japan (CRC32 283B74E0) and USA
(CRC32 FF2A5EC3).
- name: "syscard1.pce"
description: "CD-ROM System Card 1.0 (Japan)"
size: 262144
crc32: "3F9F95A4"
required: false
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:630, platforms/libretro/libretro.cpp:638-639, src/media.cpp:435-532, src/game_db.h:47"
note: >
cdrom_bios = 'System Card 1'. Very early CD-ROM2 games only.
CRC32 3F9F95A4.
source_ref: "platforms/libretro/libretro.cpp:620, platforms/libretro/libretro.cpp:628-629, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:48"
note: "Loaded when geargrafx_cdrom_bios is System Card 1."
- name: "gexpress.pce"
description: "Game Express CD Card"
description: "Games Express CD Card"
size: 32768
required: false
validation: [size, crc32]
source_ref: "platforms/libretro/libretro.cpp:633, platforms/libretro/libretro.cpp:633-634, platforms/libretro/libretro.cpp:535-536, src/media.cpp:435-532, src/defines.h:53, src/game_db.h:55-56"
source_ref: "platforms/libretro/libretro.cpp:623, platforms/libretro/libretro.cpp:656-657, src/media.cpp:447-488, src/media.cpp:604-608, src/media.cpp:743-747, src/defines.h:54, src/game_db.h:55-56"
note: >
Always loaded alongside the selected System Card BIOS (platforms/libretro/libretro.cpp:642).
Required for Game Express CD-ROM titles. game_db.h recognizes Blue Version
(CRC32 51A12D90) and Green Version (CRC32 16AAF05A).
Always attempted after the System Card, used for discs flagged
GG_GAMEDB_GAME_EXPRESS in game_db.h or when the option is Force Game
Express. game_db.h accepts the Blue Version (CRC32 51A12D90, 32768
bytes) and the Green Version (CRC32 16AAF05A over the 32768-byte
buffer; the dump is 16384 bytes, file CRC32 20E0A364, zero-padded by
LoadBiosData).
valid_bios_crc32:
syscard:
@@ -85,8 +114,9 @@ valid_bios_crc32:
- { crc32: "52520BC6", name: "CD-ROM System Card 2.0 (J)" }
- { crc32: "283B74E0", name: "CD-ROM System Card 2.1 (J)" }
- { crc32: "6D9A73EF", name: "Super CD-ROM System 3.0 (J)" }
- { crc32: "0ECEA1F3", name: "Super CD-ROM System 3.0 (J) NuFont Hack" }
- { crc32: "FF2A5EC3", name: "TurboGrafx CD System Card 2.0 (USA)" }
- { crc32: "2B5B75FE", name: "TurboGrafx CD Super System 3.0 (USA)" }
game_express:
- { crc32: "51A12D90", name: "Game Express Card Blue Version (J)" }
- { crc32: "16AAF05A", name: "Game Express Card Green Version (J)" }
- { crc32: "51A12D90", name: "Games Express CD Card Blue Version (J)" }
- { crc32: "16AAF05A", name: "Games Express CD Card Green Version (J)", file_crc32: "20E0A364", file_size: 16384 }
+68 -51
View File
@@ -4,8 +4,8 @@ core_classification: official_port
source: "https://github.com/libretro/hatari"
upstream: "https://github.com/hatari/hatari"
logo: "https://raw.githubusercontent.com/hatari/hatari/main/share/icons/hicolor/scalable/apps/hatari.svg"
profiled_date: "2026-09-03"
source_commit: "7fd34ccf34c6ea12b7f2b960b2f167d7f251892d"
profiled_date: "2026-09-17"
source_commit: "5831f66e05ae19435bd9d8ef1c6f9c93998ff6f4"
upstream_commit: "51ed9991101fdc4623b3b38ec16e5a170cf2dffa"
core_version: "2.6.1-devel"
display_name: "Atari - ST/STE/TT/Falcon (Hatari)"
@@ -23,50 +23,61 @@ notes: |
January 2026, plus the port commits that follow the merge base recorded
as upstream_commit: VFS, disk control, core options and hard disk
loading. It builds as hatari_libretro (.gitlab-ci-libretro.yml:10-11,
src/CMakeLists.txt:371-402), reports library_name hatari and the
HATARI_VERSION string 2.6.1-devel (src/retro/main_retro.c:219-220,
src/CMakeLists.txt:371-404), reports library_name hatari and the
HATARI_VERSION string 2.6.1-devel (src/retro/main_retro.c:218-219,
src/includes/version.h:8). The .info shipped in the tree declares no
firmware (share/libretro/info/libretro-hatari.info); the
hatari_libretro.info in libretro-core-info still describes the 1.8 port
and its tos.img MD5, which this code never checks.
hatari_libretro.info in libretro-core-info took that file's metadata on
2026-09-16 and keeps a tos.img firmware entry with the TOS 1.02 US MD5,
which this code never checks.
retro_init builds <system>/tos.img, records whether it exists and passes
it as --tos (src/retro/main_retro.c:157-204); when it is absent a
it as --tos (src/retro/main_retro.c:157-207); when it is absent a
frontend message is shown and retro_run only refreshes the framebuffer
(src/retro/main_retro.c:186-189, src/retro/main_retro.c:251-262). The
(src/retro/main_retro.c:186-189, src/retro/main_retro.c:250-261). The
name is fixed by that check: the .rom and .tos fallbacks of File_Read
(src/tos.c:61-67, src/file.c:298-339, src/file.c:530-569) are never
reached under a frontend. Without a system directory Main_Init runs
with no --tos and the TOS path falls back to tos.img in the Hatari data
directory derived from the executable location (src/configuration.c:810-812,
src/paths.c:299-331, CMakeLists.txt:418-430). TOS_LoadImage strips the
256-byte (34-byte for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS
at offset 0x2c, refuses images below 0x40 bytes, above 1 MB, with a
version outside 0x100-0x6FF or a load address other than 0xE00000 or
0xFC0000, and coerces machine type and CPU to the TOS version unless
the image is a 512 KB or larger EmuTOS (src/tos.c:976-1097,
src/tos.c:838-969). ROM patches apply when the hatari_patch_tos option
is on (src/retro/options.c:250-263, src/retro/options.c:783). No TOS is
embedded. Because nSymbolsAutoLoad defaults to SYM_AUTOLOAD_DEBUGGER
(src/configuration.c:621, src/includes/configuration.h:29-31), every TOS
load also reads a <tos>.sym symbol table when one exists
(src/tos.c:1094, src/debug/symbols.c:1095-1113,
src/debug/symbols.c:1002-1020, src/debug/symbols.c:372-407).
(src/tos.c:60-66, src/file.c:312-353, src/file.c:544-583) are never
reached under a frontend. A missing --tos file fails option parsing
(src/options.c:1026-1079, src/options.c:1937-1945); Main_ErrorExit only
raises the quit flag in this build (src/retro/main_retro.c:478-490), so
Main_Init carries on with bUseTos cleared and TOS_InitImage installs the
built-in test stub of faketosData.c instead of reading a ROM
(src/tos.c:43, src/tos.c:1112-1131, src/tos.c:1151-1162). Without a
system directory Main_Init runs with no --tos, the TOS path falls back to
tos.img in the Hatari data directory derived from the executable location
(src/configuration.c:810-812, src/paths.c:305-356, CMakeLists.txt:422-434)
and have_bios is never set. TOS_LoadImage strips the 256-byte (34-byte
for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS at offset 0x2c,
refuses images below 0x40 bytes, above 1 MB, with a version outside
0x100-0x6FF or a load address other than 0xE00000 or 0xFC0000, and
coerces machine type and CPU to the TOS version unless the image is a
512 KB or larger EmuTOS (src/tos.c:976-1097, src/tos.c:838-969). ROM
patches apply when the hatari_patch_tos option is on and the image is
not EmuTOS (src/retro/options.c:250-263, src/retro/options.c:784,
src/tos.c:1220-1222). No TOS is embedded. Because nSymbolsAutoLoad
defaults to SYM_AUTOLOAD_DEBUGGER (src/configuration.c:621,
src/includes/configuration.h:29-31), every TOS load also reads a
<tos>.sym symbol table when one exists (src/tos.c:1094,
src/debug/symbols.c:1095-1113, src/debug/symbols.c:1002-1020,
src/debug/symbols.c:372-407).
The Hatari home directory is the RetroArch save directory
(src/paths.c:236-250). Configuration is read from <CONFDIR>/hatari.cfg,
/etc on Unix and the current directory on Windows, then from hatari.cfg
in that home directory, before the --tos argument is applied
(src/main.c:256-278, src/main.c:315-318, src/configuration.c:862-867,
src/configuration.c:1061-1071, CMakeLists.txt:440-457). Every section is
honoured: the cartridge image (src/configuration.c:487-493), floppy
images, GEMDOS directories and ACSI, SCSI and IDE images
(src/configuration.c:362-364, src/configuration.c:375-483), MIDI, printer
and RS232 host endpoints (src/configuration.c:509-543), all disabled by
default (src/configuration.c:736-761) and opened by Midi_Host_Open,
Printer_TransferByteTo and RS232_OpenCOMPort when enabled
(src/midi.c:342-367, src/printer.c:42-65, src/printer.c:89-106,
src/rs232.c:175-230). szMappingFileName is parsed
(src/main.c:260-282, src/main.c:319-322, src/configuration.c:862-867,
src/configuration.c:1061-1071, CMakeLists.txt:444-461). The boot core
options are applied right after the command line, so the machine, DSP,
CPU, FPU, memory and hatari_patch_tos keys of hatari.cfg are overwritten
by them (src/main.c:328-330, src/retro/options.c:724-789). Every other
section is honoured: the cartridge image (src/configuration.c:487-493),
floppy images, GEMDOS directories and ACSI, SCSI and IDE images
(src/configuration.c:362-364, src/configuration.c:375-483), MIDI, printer,
RS232 and SCC host endpoints (src/configuration.c:509-543), all disabled
by default (src/configuration.c:736-761) and opened by Midi_Host_Open,
Printer_TransferByteTo, RS232_OpenCOMPort and SCC_Init_Channel when
enabled (src/midi.c:342-367, src/printer.c:42-65, src/printer.c:89-106,
src/rs232.c:175-246, src/scc.c:439-500). szMappingFileName is parsed
(src/configuration.c:256) but the port's Keymap_LoadRemapFile is empty
(src/retro/keymap.c:222-224); only the SDL build reads a keymap file
(src/sdl/keymap.c:701). The autosave snapshot is restored by
@@ -76,31 +87,35 @@ notes: |
src/falcon/nvram.c:334-337).
Content is a floppy image, an .m3u list parsed relative to its own
directory (src/retro/disk_control.c:96-184), an .ide image put on the
directory (src/retro/disk_control.c:94-182), an .ide image put on the
IDE master, a .vhd image put on ACSI 0 or a .gem marker naming a GEMDOS
directory (src/retro/main_retro.c:370-424, src/retro/harddisk.c:32-129).
directory (src/retro/main_retro.c:369-427, src/retro/harddisk.c:32-129).
With a .gem, <system>/hatari/BOOT.ST is inserted into drive A when it
exists (src/retro/harddisk.c:104-127). A disk whose name ends in A pulls
exists (src/retro/harddisk.c:105-127). A disk whose name ends in A pulls
the sibling ending in B into drive B (src/floppy.c:300-343,
src/floppy.c:385-388), and an STX image reads its .wd1772 overlay from
the same directory (src/floppies/stx.c:807-825). Savestates pass through
the same directory (src/floppies/stx.c:807-827). Savestates pass through
hatari_savestate.tmp in the system directory
(src/retro/main_retro.c:41, src/retro/main_retro.c:293-357). IPF support
(src/retro/main_retro.c:41, src/retro/main_retro.c:292-359). IPF support
is compiled in from rsn8887/capsimg when ENABLE_STATIC_CAPSIMAGE is on
(cmake/BuildDependencies.cmake:93-126); the Windows and Vita CI jobs turn
it off (.gitlab-ci-libretro.yml:97, .gitlab-ci-libretro.yml:105,
.gitlab-ci-libretro.yml:189).
(cmake/BuildDependencies.cmake:93-126); the Windows jobs build with it
since September 2026 (.gitlab-ci-libretro.yml:101,
.gitlab-ci-libretro.yml:109) and the static Vita, Wii, Wii U and Switch
jobs turn it off (.gitlab-ci-libretro.yml:193, .gitlab-ci-libretro.yml:202,
.gitlab-ci-libretro.yml:210, .gitlab-ci-libretro.yml:218).
File access goes through the libretro VFS when the frontend provides it
(src/retro/vfs.c:17-49, src/file.c:239-286, src/file.c:465-478).
(src/retro/vfs.c:17-48, src/file.c:253-302, src/file.c:479-492), and a
device-prefixed path such as ux0:/ counts as absolute (src/file.c:152-164).
files:
- name: "tos.img"
path: "tos.img"
description: "Atari TOS ROM image"
required: true
min_size: 64
max_size: 1048576
validation: [size]
source_ref: "src/retro/main_retro.c:157-204, src/retro/main_retro.c:251-262, src/options.c:1937-1945, src/tos.c:61-67, src/tos.c:976-1097, src/tos.c:838-969, src/file.c:298-339"
source_ref: "src/retro/main_retro.c:157-207, src/retro/main_retro.c:250-261, src/options.c:1937-1945, src/tos.c:60-66, src/tos.c:976-1097, src/tos.c:838-969, src/file.c:312-353"
note: >
Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. The file must
carry this exact name: retro_init only enables emulation when
@@ -125,19 +140,20 @@ files:
min_size: 40
max_size: 131076
validation: [size]
source_ref: "src/cart.c:39-46, src/cart.c:52-88, src/cart.c:97-105, src/cart.c:115-141, src/configuration.c:487-493, src/configuration.c:814"
source_ref: "src/cart.c:41-47, src/cart.c:53-88, src/cart.c:97-104, src/cart.c:114-142, src/configuration.c:487-493, src/configuration.c:814"
note: >
Set through hatari.cfg. Raw images up to 0x20000 bytes or .stc
images of exactly 0x20004 bytes whose 4-byte header is skipped;
extensions .img, .rom and .stc are tried when the configured path is
missing. Replaced by the built-in GEMDOS trampoline whenever GEMDOS
hard disk emulation, extended VDI or OS tracing is on.
hard disk emulation, extended VDI, program autostart or OS tracing
is on.
- name: "BOOT.ST"
path: "hatari/BOOT.ST"
description: "Boot floppy inserted with GEMDOS hard disk folders"
required: false
source_ref: "src/retro/harddisk.c:78-129, src/retro/main_retro.c:393-396"
source_ref: "src/retro/harddisk.c:78-129, src/retro/main_retro.c:391-395"
note: "Inserted into drive A when the content is a .gem file."
- name: "hatari.cfg"
@@ -146,10 +162,11 @@ files:
required: false
storage: user_provided
unsourceable: "user settings in Hatari's INI format; no canonical contents"
source_ref: "src/main.c:256-278, src/main.c:315-318, src/configuration.c:862-867, src/configuration.c:1061-1071, src/paths.c:236-250, CMakeLists.txt:440-457"
source_ref: "src/main.c:260-282, src/main.c:319-322, src/main.c:328-330, src/configuration.c:862-867, src/configuration.c:1061-1071, src/paths.c:236-250, CMakeLists.txt:444-461"
note: >
Read from <CONFDIR>/hatari.cfg and then from hatari.cfg in the
RetroArch save directory, before the --tos argument is applied.
RetroArch save directory, before the --tos argument and the boot
core options are applied.
- name: "hatari.nvram"
path: null
@@ -160,7 +177,7 @@ files:
validation: [size]
storage: user_provided
unsourceable: "machine state the emulator writes itself at exit; no canonical contents"
source_ref: "src/falcon/nvram.c:96-97, src/falcon/nvram.c:116-141, src/falcon/nvram.c:148-171, src/falcon/nvram.c:282-294, src/falcon/nvram.c:334-337, src/paths.c:236-250, src/main.c:204"
source_ref: "src/falcon/nvram.c:96-97, src/falcon/nvram.c:116-141, src/falcon/nvram.c:148-171, src/falcon/nvram.c:282-294, src/falcon/nvram.c:334-337, src/paths.c:236-250, src/main.c:208"
note: >
Read from the RetroArch save directory at NvRam_Init; a short read
keeps the built-in defaults. Saved back on exit.
+33 -27
View File
@@ -3,10 +3,10 @@ type: libretro
core_classification: community_fork
source: "https://github.com/bbbradsmith/hatariB"
upstream: "https://github.com/hatari/hatari"
profiled_date: "2026-09-03"
source_commit: "e9bbbd5fb35076402dc6b3c8ee3259e1809001cf"
profiled_date: "2026-09-17"
source_commit: "55a67d34238031a79d9de7f91a5c51e9771bd146"
upstream_commit: "6a8e26d69fb32d61efd398dc1ad9a77122400034"
core_version: "0.5"
core_version: "1.1 unstable preview"
display_name: "Atari - ST/STE/TT/Falcon (hatariB)"
cores:
- hatarib
@@ -19,17 +19,22 @@ systems:
notes: |
hatariB carries Hatari 2.6.1 in its hatari/ directory, every change
fenced by __LIBRETRO__ (DEVELOP.md:7-14, DEVELOP.md:44-48), and
builds as hatarib (makefile.libretro:1-3, core/core.c:1134); the
upstream_commit is the v2.6.1 tag the tree was taken from. The core
reads and writes through core_file.c, using the libretro VFS when the
frontend offers version 3 (core/core_file.c:747-790). Hatari's own
builds as hatarib (makefile.libretro:1, makefile.libretro:3,
core/core.c:1134); the upstream_commit is the v2.6.1 tag the tree was
taken from. The core reads and writes through core_file.c, using the
libretro VFS when the frontend offers version 3
(core/core_file.c:747-790). Hatari's own
directory strings are replaced by <nopath> (hatari/src/paths.c:339-350),
hatari.cfg is never read because Main_LoadInitialConfig calls
core_config_init instead (hatari/src/main.c:984-1012,
core/core_config.c:1421-1426), and printer, RS232 and keymap file
core_config_init instead (hatari/src/main.c:987-1015,
core/core_config.c:1440-1445), and printer, RS232 and keymap file
settings keep their disabled defaults with no option to change them
(hatari/src/configuration.c:728, hatari/src/keymap.c:63,
hatari/src/keymap.c:699-718).
hatari/src/keymap.c:699-718). The AVI recorder is compiled out and
replaced by stubs (hatari/src/avi_record.c:102,
hatari/src/avi_record.c:1535-1547), and File_Length, File_Lock and
File_InputAvailable are removed with it (hatari/src/file.c:374,
hatari/src/file.c:744, hatari/src/file.c:802).
At retro_set_environment the core looks for <system>/tos.img and lists
every entry of <system>/hatarib/, up to 128 files and 16 directories
@@ -37,29 +42,29 @@ notes: |
hatarib_tos, hatarib_cartridge and hatarib_hardimg options, 100 values
each: TOS candidates end in .img, .rom, .bin or .tos, cartridges in .img,
.rom, .bin or .cart, hard disks are any file or subdirectory
(core/core_config.c:11, core/core_config.c:1299-1366). The TOS option
(core/core_config.c:11, core/core_config.c:1318-1385). The TOS option
defaults to <tos.img> when the file exists and to EmuTOS 192uk otherwise
(core/core_config.c:68-92, core/core_config.c:1306-1321); the four
(core/core_config.c:68-92, core/core_config.c:1325-1340); the four
special values select tos.img or one of the built-in images, any other
value is a path under the system directory
(core/core_config.c:1094-1117). TOS_LoadImage copies the built-in image
(core/core_config.c:1112-1135). TOS_LoadImage copies the built-in image
or reads the file with core_read_file_system and caches it
(hatari/src/tos.c:45-63, hatari/src/tos.c:1028-1078); a failed load
raises a notification and halts the CPU instead of leaving
(hatari/src/tos.c:1080-1086, hatari/src/tos.c:1250-1262,
core/core.c:419-433, hatari/src/main.c:903-922). Validation is
core/core.c:419-433, hatari/src/main.c:906-925). Validation is
upstream's (hatari/src/tos.c:1114-1160), but TOS_CheckSysConfig only
warns and never switches machine or CPU (hatari/src/tos.c:859-1000). The
hatarib_emutos_region and hatarib_emutos_framerate options rewrite the
OS header word of an EmuTOS image (hatari/src/tos.c:1351-1365,
core/core_config.c:1163-1169). Symbols_LoadTOS still runs
core/core_config.c:1181-1187). Symbols_LoadTOS still runs
(hatari/src/tos.c:1193) but resolves <tos>.sym against the process
working directory, so nothing is read from the system directory.
The three EmuTOS images are EmuTOS 1.4 built from the hatarib-custom-140
branch of bbbradsmith/emutos, which lets DESKTOP.INF and NEWDESK.INF be
loaded, and are compiled in through emutos/bin_to_h.py
(DEVELOP.md:10, README.md:305-307).
(DEVELOP.md:10, README.md:313-315).
A cartridge is read with core_read_file_system from the option value
(hatari/src/cart.c:40, hatari/src/cart.c:57-100) and disabled with
@@ -67,15 +72,15 @@ notes: |
(hatari/src/cart.c:108-147). A permanent hard disk comes from
system/hatarib through hatarib_hardimg and hatarib_hardtype, GEMDOS
folder, ACSI, SCSI or IDE (core/core_config.c:186-233,
core/core_config.c:1000-1057, core/core_config.c:1151-1162); temporary
core/core_config.c:1018-1075, core/core_config.c:1169-1180); temporary
ones are content with an .acsi, .ahd, .vhd, .scsi, .shd, .ide or .gem
extension or lines of an M3U (core/core_disk.c:16-23,
core/core_disk.c:676-713, core/core_disk.c:782-785,
core/core_config.c:1059-1087). Images open through core_file_open_hard
core/core_config.c:1077-1105). Images open through core_file_open_hard
(hatari/src/hdc.c:903, hatari/src/hdc.c:961-963,
hatari/src/ide.c:663-666) and GEMDOS folders through core_scandir_hard
(hatari/src/gemdos.c:663, hatari/src/gemdos.c:761,
hatari/src/gemdos.c:1321); hard disks are write protected by default
(hatari/src/gemdos.c:672, hatari/src/gemdos.c:770,
hatari/src/gemdos.c:1330); hard disks are write protected by default
(hatari/src/configuration.c:918). Floppy content is ST, MSA, DIM, STX,
IPF or CTR, also inside a ZIP, ZST or GZ, or an M3U or M3U8 list with
#BOOTA, #BOOTB, #AUTO and #RES directives (core/core_disk.c:14-24,
@@ -98,9 +103,10 @@ files:
description: "Atari TOS ROM image, default when present"
required: false
has_builtin: true
min_size: 64
max_size: 1048576
validation: [size]
source_ref: "core/core_file.c:791-851, core/core_config.c:68-92, core/core_config.c:1094-1117, core/core_config.c:1306-1321, hatari/src/tos.c:1028-1160"
source_ref: "core/core_file.c:791-851, core/core_config.c:68-92, core/core_config.c:1112-1135, core/core_config.c:1325-1340, hatari/src/tos.c:1028-1160"
note: >
Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. Further images
go in system/hatarib/ with an .img, .rom, .bin or .tos extension and
@@ -116,7 +122,7 @@ files:
sha1: 38dc8baf5224229df55e7d0804b6b7b6bacfc7a0
sha256: 757c571b98b955887ea6d9034513555f4263040420e9d2195cd0c6f8de06c451
crc32: 118b35b4
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:76, core/core_config.c:1096-1116"
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:76, core/core_config.c:1114-1134"
note: >
Compiled into the core from emutos/etos1024k.img and never opened at
run time. Built from the hatarib-custom-140 branch of
@@ -131,7 +137,7 @@ files:
sha1: ef3a3ccffcb317bff7d0dceca0abacefc3a58abc
sha256: 5c679e6b1b8ed178fa079e4957ed66f9277094f0fe0a5b50c8cbea041e220250
crc32: fe4c3ff1
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:77, core/core_config.c:91, core/core_config.c:1096-1116"
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:77, core/core_config.c:91, core/core_config.c:1114-1134"
note: >
Compiled into the core from emutos/etos192uk.img and never opened at
run time. Selected when no tos.img exists and no other image is
@@ -147,7 +153,7 @@ files:
sha1: bb98cd8a50df53afecfe183b049eda4014fc0d05
sha256: ccccc420908012e03b4b38b8ed4530923bb04f27ab189eb2c694bf7e8509b666
crc32: 18030f9a
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:78, core/core_config.c:1096-1116"
source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:78, core/core_config.c:1114-1134"
note: >
Compiled into the core from emutos/etos192us.img and never opened at
run time. Built from the hatarib-custom-140 branch of
@@ -161,7 +167,7 @@ files:
min_size: 40
max_size: 131076
validation: [size]
source_ref: "core/core_config.c:166-185, core/core_config.c:1145-1149, core/core_config.c:1332-1344, core/core_file.c:256-259, hatari/src/cart.c:40, hatari/src/cart.c:57-100, hatari/src/cart.c:108-147"
source_ref: "core/core_config.c:166-185, core/core_config.c:1163-1167, core/core_config.c:1351-1363, core/core_file.c:256-259, hatari/src/cart.c:40, hatari/src/cart.c:57-100, hatari/src/cart.c:108-147"
note: >
Any file of system/hatarib/ with an .img, .rom, .bin or .cart
extension. Raw images up to 0x20000 bytes or .stc images of exactly
@@ -188,7 +194,7 @@ files:
path: null
description: "CAPSImage 5.1 shared library for IPF and CTR floppy images, Linux, macOS, Android and Raspberry Pi builds"
required: false
source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:632-640, hatari/src/floppy_ipf.c:686-744, hatari/src/floppy_ipf.c:752-764, hatari/CMakeLists.txt:246, hatari/cmake/config-cmake.h:99-101, DEVELOP.md:56, DEVELOP.md:59"
source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:637-645, hatari/src/floppy_ipf.c:691-749, hatari/src/floppy_ipf.c:757-769, hatari/CMakeLists.txt:246, hatari/cmake/config-cmake.h:99-101, DEVELOP.md:56, DEVELOP.md:59"
note: >
Opened with dlopen on the first IPF or CTR read, from the dlopen
search path or next to the core, and required to export the CAPS
@@ -200,7 +206,7 @@ files:
path: null
description: "CAPSImage 5.1 shared library for IPF and CTR floppy images, Windows build"
required: false
source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:632-640, hatari/src/floppy_ipf.c:686-744, hatari/src/floppy_ipf.c:752-764, DEVELOP.md:56"
source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:637-645, hatari/src/floppy_ipf.c:691-749, hatari/src/floppy_ipf.c:757-769, DEVELOP.md:56"
note: >
Opened with LoadLibrary on the first IPF or CTR read, from the
RetroArch directory or the library search path; without it those
+152 -63
View File
@@ -1,11 +1,12 @@
emulator: "higan (SFC Accuracy)"
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/nSide"
upstream: "https://github.com/byuu/higan"
profiled_date: "2026-03-23"
source_commit: "5e965d0db4c0d05e7e8fb6449035538781c73473"
core_version: "v105 (Super Famicom Accuracy)"
core_classification: frozen_snapshot
source: "https://gitlab.com/higan/higan"
source_branch: libretro
upstream: "https://gitlab.com/higan/higan"
profiled_date: "2026-09-17"
source_commit: "d3f592013a27cb78f17d84f90a6be6cf6f6af1d1"
core_version: "106"
display_name: "Nintendo - SNES / Famicom (higan Accuracy)"
cores:
- higan_sfc
@@ -14,124 +15,212 @@ systems:
- nintendo-sgb
notes: |
Fork of higan v106 by hex-usr, renamed at byuu's request. Dot-based
PPU profile (cycle-accurate, most demanding). Current nSide source
blocks accuracy build (#error at libretro.cpp:39, libretro-sfc.cpp:8).
Core is orphaned from an older nSide revision.
Coprocessor firmware loaded via icarus manifest system from system_dir.
File names follow icarus convention: {identifier}.{content}.rom.
SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories,
with fallback to SGB.sfc/ and Super GameBoy.sfc/.
SPC700 IPL ROM (ipl.rom, 64 bytes) compiled into binary.
Accuracy and balanced cartridge loading code is identical.
The libretro target lives on the libretro branch of higan's own repository,
merged with the v106 release: Emulator::Version is "106"
(higan/emulator/emulator.hpp:15) and retro_get_system_info announces it as
library_version under the name "higan (Super Famicom Accuracy)"
(higan/target-libretro/libretro.cpp:405-412,
higan/target-libretro/libretro-sfc.cpp:513). The buildbot recipe builds
higan_sfc from that branch (libretro-super
recipes/linux/cores-linux-x64-generic:71), whose last commit dates from
2017-11-19. The library is named higan_$(corename)_libretro with corename
sfc (higan/target-libretro/GNUmakefile:1-11,
higan/target-libretro/GNUmakefile:13-19). nSide, from which
nside_sfc_balanced is built, refuses core=sfc at build time
(nSide nSide/target-libretro/GNUmakefile:1-2).
The system manifest and the 64-byte SPC700 IPL ROM are compiled into the
binary and served from memory (higan/target-libretro/libretro-sfc.cpp:364-396,
higan/sfc/smp/smp.cpp:25-33).
Coprocessor firmware. A ROM is imported through icarus, whose heuristics
detect the coprocessor from the cartridge header
(icarus/heuristics/super-famicom.cpp:707-759) and write a manifest naming
each firmware file with its size
(icarus/heuristics/super-famicom.cpp:482-545). DSP1 games are given the
DSP1B names; dsp1.program.rom and dsp1.data.rom are named for the Campus
Challenge '92 and Powerfest '94 cartridges
(icarus/heuristics/super-famicom.cpp:623-640,
icarus/heuristics/super-famicom.cpp:416-417,
icarus/heuristics/super-famicom.cpp:437-438). When the image does not carry
the firmware appended (icarus/heuristics/super-famicom.cpp:106-190), the
importer reports the file as missing (icarus/core/super-famicom.cpp:64-71)
and the target reads it through locate_libretro, appends it to the image
and imports again (higan/target-libretro/libretro.cpp:105-141).
locate_libretro tries the system directory, then higan/ under the user's
config and data directories (higan/target-libretro/libretro.cpp:15-35). No
hash is checked; the sizes below are those the manifest declares, and a
shorter file leaves the second import short and the load fails.
The icarus database is read from Database/ next to the frontend
executable or under the icarus config and data directories, and takes
precedence over the heuristics when the image's SHA-256 is listed
(icarus/core/core.cpp:1-16, icarus/icarus.cpp:7-15,
icarus/core/super-famicom.cpp:17-24). It names dsp1.program.rom and
dsp1.data.rom for several DSP1 titles and sgb.boot.rom for the Super Game
Boy cartridge.
Super Game Boy. Loading a .gb or .gbc file selects the folder named by the
higan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/
(higan/target-libretro/libretro-sfc.cpp:154-156,
higan/target-libretro/libretro-sfc.cpp:354). program.rom is looked up in
that folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's
manifest is generated from its program.rom and *.boot.rom files
(higan/target-libretro/libretro-sfc.cpp:202-243,
icarus/core/super-famicom.cpp:1-11). The heuristics recognise the cartridge
by its header and name the boot ROM sgb1.boot.rom or sgb2.boot.rom
(icarus/heuristics/super-famicom.cpp:612-621,
icarus/heuristics/super-famicom.cpp:225-245). The Game Boy system opens
that name from the folder first and from the system directory root as a
fallback (higan/gb/system/system.cpp:54-65,
higan/sfc/coprocessor/icd2/icd2.cpp:34-38,
higan/target-libretro/libretro.cpp:200-278). Once a Game Boy image is
loaded both files are mandatory: a missing program.rom fails
load_special_bios, a missing boot ROM sets the failure flag, and
retro_load_game returns false (higan/target-libretro/libretro-sfc.cpp:223-227,
higan/target-libretro/libretro.cpp:635-642). The source tree ships no copy
of the boot ROMs or of the coprocessor firmware.
files:
# DSP coprocessors - uPD7725 (split data+program format)
- name: "dsp1.data.rom"
system: nintendo-snes
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
# NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words,
# 1024 x 16-bit data words
- name: "dsp1.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database; other DSP1 games use dsp1b.program.rom."
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:416, icarus/heuristics/super-famicom.cpp:437"
- name: "dsp1b.data.rom"
- name: "dsp1.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database; other DSP1 games use dsp1b.data.rom."
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:417, icarus/heuristics/super-famicom.cpp:438"
- name: "dsp1b.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:482, icarus/heuristics/super-famicom.cpp:712-720"
- name: "dsp2.data.rom"
- name: "dsp1b.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:483, icarus/heuristics/super-famicom.cpp:712-720"
- name: "dsp2.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:492, icarus/heuristics/super-famicom.cpp:734"
- name: "dsp3.data.rom"
- name: "dsp2.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:493, icarus/heuristics/super-famicom.cpp:734"
- name: "dsp3.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:502, icarus/heuristics/super-famicom.cpp:738"
- name: "dsp4.data.rom"
- name: "dsp3.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:503, icarus/heuristics/super-famicom.cpp:738"
- name: "dsp4.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:457-502"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:512, icarus/heuristics/super-famicom.cpp:742"
# CX4 coprocessor - HG51BS169
- name: "dsp4.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:513, icarus/heuristics/super-famicom.cpp:742"
# Hitachi HG51B169 (Cx4): 1024 x 24-bit data words
- name: "cx4.data.rom"
system: nintendo-snes
size: 3072
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:405-454"
# Seta coprocessors - uPD96050
- name: "st010.data.rom"
system: nintendo-snes
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:504-548"
source_ref: "higan/sfc/cartridge/load.cpp:201-225, icarus/heuristics/super-famicom.cpp:255, icarus/heuristics/super-famicom.cpp:708"
# NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words,
# 2048 x 16-bit data words
- name: "st010.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:504-548"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:522, icarus/heuristics/super-famicom.cpp:750"
- name: "st011.data.rom"
- name: "st010.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:504-548"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:523, icarus/heuristics/super-famicom.cpp:750"
- name: "st011.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:504-548"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:533, icarus/heuristics/super-famicom.cpp:754"
# ST018 coprocessor - ARM6
- name: "st018.data.rom"
- name: "st011.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:362-402"
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:534, icarus/heuristics/super-famicom.cpp:754"
# SETA ARM6 (ST018): 128 KiB program, 32 KiB data
- name: "st018.program.rom"
system: nintendo-snes
size: 131072
required: false
source_ref: "nSide/sfc/cartridge/load.cpp:362-402"
source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:544, icarus/heuristics/super-famicom.cpp:758"
# Super Game Boy
- name: "SGB1.sfc/sgb1.boot.rom"
- name: "st018.data.rom"
system: nintendo-snes
size: 32768
required: false
source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:545, icarus/heuristics/super-famicom.cpp:758"
# Super Game Boy: cartridge ROM and boot ROM per folder
- name: "program.rom"
path: "SGB1.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/gb/system/system.cpp:54-65"
note: "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom."
source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80"
- name: "SGB1.sfc/program.rom"
- name: "sgb1.boot.rom"
path: "SGB1.sfc/sgb1.boot.rom"
system: nintendo-sgb
aliases:
- "sgb.boot.rom"
size: 256
required: false
note: "Falls back to sgb1.boot.rom at the system directory root. Named sgb.boot.rom by the icarus database entry for the cartridge."
source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:232, icarus/heuristics/super-famicom.cpp:619, icarus/core/super-famicom.cpp:17-24"
- name: "program.rom"
path: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215"
note: "Selected by the higan_sfc_sgb_bios option."
source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80"
- name: "SGB2.sfc/sgb2.boot.rom"
- name: "sgb2.boot.rom"
path: "SGB2.sfc/sgb2.boot.rom"
system: nintendo-sgb
size: 256
required: false
source_ref: "nSide/gb/system/system.cpp:54-65"
- name: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215"
note: "Falls back to sgb2.boot.rom at the system directory root."
source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:243, icarus/heuristics/super-famicom.cpp:614"
+133 -43
View File
@@ -3,131 +3,221 @@ type: libretro
core_classification: enhanced_fork
source: "https://github.com/libretro/nSide"
upstream: "https://gitlab.com/higan/higan"
profiled_date: "2026-03-23"
source_commit: "5e965d0db4c0d05e7e8fb6449035538781c73473"
core_version: "v105 (Super Famicom Balanced)"
display_name: "Nintendo - SNES / Famicom (nSide Balanced)"
profiled_date: "2026-09-17"
source_commit: "f8a3ac45ef31a3a367d0a9ecd925110124e73eff"
upstream_commit: "3353efd3a1087f4d16d9b9fd2a8e465087ab8ec0"
core_version: "106.25"
display_name: "Nintendo - SNES / SFC (nSide Balanced)"
cores:
- nside_sfc_balanced
- higan_sfc_balanced
systems:
- nintendo-snes
- nintendo-sgb
exclusion_note: >
The .info declares SGB1.sfc/sgb1.boot.rom and SGB2.sfc/sgb2.boot.rom. The
core opens the boot ROM under the name the manifest derives from the
architecture, lr35902.boot.rom, in the selected SGB folder
(nSide/gb/system/system.cpp:60-61, nSide/emulator/game.hpp:101-104). A
sgb1.boot.rom or sgb2.boot.rom is only looked up, at the system directory
root, when the Super Game Boy cartridge is itself imported as an SFC game
(icarus/core/super-famicom.cpp:49-54), a load that ends on the Game Boy
cartridge manifest the libretro target cannot provide
(nSide/target-libretro/libretro.cpp:284-287).
notes: |
Fork of higan v106 by hex-usr, renamed at byuu's request. Balanced
PPU profile (scanline-precision, faster than dot-based accuracy).
Coprocessor firmware loaded via icarus manifest system from system_dir.
File names follow icarus convention: {identifier}.{content}.rom.
SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories,
with fallback to SGB.sfc/ and Super GameBoy.sfc/.
Fork of higan by hex_usr (nSide v009r16, README.txt:1-4), synchronised with
higan v106r25: Emulator::Version is "106.25" (nSide/emulator/emulator.hpp:16)
and retro_get_system_info announces it as library_version under the name
"higan (Super Famicom Balanced)" (nSide/target-libretro/libretro.cpp:87-93,
nSide/target-libretro/libretro-sfc.cpp:486). The balanced profile keeps a
scanline-based PPU; the accuracy profile is refused at build time
(nSide/target-libretro/GNUmakefile:1-2, nSide/target-libretro/libretro.cpp:38-39).
The library is named nside_$(corename)_libretro with corename sfc_balanced
(nSide/target-libretro/GNUmakefile:4-13, nSide/target-libretro/GNUmakefile:18-23),
which the GitLab CI publishes as nside_sfc_balanced (.gitlab-ci.yml:15,
.gitlab-ci.yml:53-54). The core options keep the higan_sfc_ prefix so the
settings are shared with higan's core (nSide/target-libretro/libretro-sfc.cpp:321-329).
System files manifest.bml, boards.bml and ipl.rom are compiled into the
binary and served from memory (nSide/target-libretro/libretro-sfc.cpp:335-341,
nSide/target-libretro/resource/sfc.bml:1-4, nSide/sfc-balanced/smp/smp.cpp:25-33).
Coprocessor firmware. A ROM is imported through icarus, whose manifest names
each firmware memory by architecture and identifier
(icarus/heuristics/super-famicom.cpp:90-115). When the image does not carry
the firmware appended (icarus/heuristics/super-famicom.cpp:406-414), the
importer reports {identifier}.{content}.rom as missing
(icarus/core/super-famicom.cpp:46-57) and the libretro target reads that
name through locate_libretro, appends it to the image and imports again
(nSide/target-libretro/icarus.cpp:111-142). locate_libretro tries the system
directory, then higan/ and nSide/ under the user's config and data
directories (nSide/target-libretro/libretro.cpp:3-31). Identifiers come from
the cartridge label: DSP1 for PILOTWINGS, DSP2 for DUNGEON MASTER, DSP3 for
SD Gundam GX, DSP4 for TOP GEAR 3000 and PLANETS CHAMP TG3000, DSP1B
otherwise; ST011 for 2DAN MORITA SHOUGI, ST010 otherwise; ST018 and Cx4 have
a single revision (icarus/heuristics/super-famicom.cpp:512-541). No hash is
checked; a file shorter than the size the manifest declares leaves the
second import short and the load fails. The sizes below are those declared
by the heuristics.
Super Game Boy. Loading a .gb or .gbc file selects the folder named by the
higan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/
(nSide/target-libretro/libretro-sfc.cpp:142-145,
nSide/target-libretro/libretro-sfc.cpp:326). program.rom is looked up in
that folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's
manifest is generated from its program.rom and *.boot.rom files
(nSide/target-libretro/libretro-sfc.cpp:179-215,
icarus/core/super-famicom.cpp:1-11). The Game Boy system then opens the boot
ROM the manifest names, lr35902.boot.rom, from the folder first and from the
system directory root as a fallback (nSide/gb/system/system.cpp:54-65,
nSide/target-libretro/program.cpp:19-81). Once a Game Boy image is loaded
both files are mandatory: a missing one sets the failure flag and
retro_load_game returns false
(nSide/target-libretro/program.cpp:75-78, nSide/target-libretro/libretro.cpp:286).
The SHA-1 values on the boot ROMs and on cx4.data.rom are those of the copies
the source tree ships in icarus/firmware/.
files:
# DSP coprocessors - uPD7725 (split data+program format)
# NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words,
# 1024 x 16-bit data words
- name: "dsp1.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:534"
- name: "dsp1.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:534"
- name: "dsp1b.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:539"
- name: "dsp1b.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:539"
- name: "dsp2.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:535"
- name: "dsp2.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:535"
- name: "dsp3.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:536"
- name: "dsp3.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:536"
- name: "dsp4.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:537-538"
- name: "dsp4.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:537-538"
# CX4 coprocessor - HG51BS169
# Hitachi HG51BS169 (Cx4): 1024 x 24-bit data words
- name: "cx4.data.rom"
system: nintendo-snes
size: 3072
sha1: "a002f4efba42775a31185d443f3ed1790b0e949a"
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454, icarus/heuristics/super-famicom.cpp:110, icarus/heuristics/super-famicom.cpp:529-531"
# Seta coprocessors - uPD96050
# NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words,
# 2048 x 16-bit data words
- name: "st010.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:516-521"
- name: "st010.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:516-521"
- name: "st011.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:519"
- name: "st011.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:519"
# ST018 coprocessor - ARM6
# SETA ARM6 (ST018): 128 KiB program, 32 KiB data
- name: "st018.data.rom"
system: nintendo-snes
size: 32768
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:92, icarus/heuristics/super-famicom.cpp:512-514"
- name: "st018.program.rom"
system: nintendo-snes
size: 131072
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402"
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:91, icarus/heuristics/super-famicom.cpp:512-514"
# Super Game Boy
- name: "SGB1.sfc/sgb1.boot.rom"
# Super Game Boy: cartridge ROM and boot ROM per folder
- name: "program.rom"
path: "SGB1.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/gb/system/system.cpp:54-65"
note: "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom."
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162"
- name: "SGB1.sfc/program.rom"
- name: "lr35902.boot.rom"
path: "SGB1.sfc/lr35902.boot.rom"
system: nintendo-sgb
size: 256
sha1: "aa2f50a77dfb4823da96ba99309085a3c6278515"
required: false
note: "Falls back to lr35902.boot.rom at the system directory root."
source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527"
- name: "program.rom"
path: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215"
note: "Selected by the higan_sfc_sgb_bios option."
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162"
- name: "SGB2.sfc/sgb2.boot.rom"
- name: "lr35902.boot.rom"
path: "SGB2.sfc/lr35902.boot.rom"
system: nintendo-sgb
size: 256
sha1: "93407ea10d2f30ab96a314d8eca44fe160aea734"
required: false
source_ref: "nSide/gb/system/system.cpp:54-65"
- name: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215"
note: "Falls back to lr35902.boot.rom at the system directory root."
source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527"
+11 -7
View File
@@ -4,8 +4,8 @@ core_classification: game_engine
source: "https://github.com/glKarin/com.n0n3m4.diii4a"
upstream: "https://github.com/glKarin/com.n0n3m4.diii4a"
author: "glKarin"
profiled_date: "2026-08-11"
source_commit: "dea1eb9f122cfae042961cfc32a3474e59354589"
profiled_date: "2026-09-17"
source_commit: "e4d1382275155b18d51f91c3e1af35ca1fd16e13"
core_version: "1.1.0harmattan72"
display_name: "id Tech engine collection (idTech4A++)"
cores:
@@ -291,15 +291,19 @@ files:
required: true
bundled: true
category: game_data
size: 98396
md5: 3155df291027d253e2596db3fca1ac4a
sha1: 2651f1eff1785999918c08600f079e1ad4a206e7
size: 98425
md5: a0fcf6c54d453a80c8aac693d17979b8
sha1: 604636a62dd04c90392b19adf61d3a62381dfb02
description: "The Dark Mod GLSL shader set rewritten for OpenGL ES"
note: >-
Unpacked into the standalone directory as `glslprogs/`, the tree the
renderer compiles its programs from. Version-stamped with the engine
release so a Dark Mod update replaces it.
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391"
release and a patch number, so a Dark Mod update or a shader fix replaces
it. TDM_GLSL_SHADER_VERSION reads 2.14.2 here: the four SSAO programs
moved their uniform-dependent initialisers out of global scope and cast
their integer terms to float. The 2.14.1 pack it replaced is kept as a
variant.
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391, Q3E/src/main/jni/darkmod/glslprogs/ssao.frag.glsl:78-80, 163-166"
- name: renderprogs.pk4
required: true
+45 -38
View File
@@ -3,9 +3,10 @@ type: libretro
core_classification: official_port
source: "https://github.com/libretro/jollycv"
upstream: "https://gitlab.com/jgemu/jollycv"
profiled_date: "2026-03-24"
source_commit: "eb14292005d51e2bef954cb75145981037ee9988"
core_version: "2.0.0"
profiled_date: "2026-09-17"
source_commit: "2790d59c7194d29e83f8603ffd7e9da17f11575e"
upstream_commit: "18875ffdb1891cec04217cf02928af563a3af9d8"
core_version: "2.1.0"
display_name: "ColecoVision/CreatiVision/My Vision (JollyCV)"
cores:
- jollycv
@@ -15,70 +16,76 @@ systems:
- myvision
notes: |
JollyCV is a multi-system emulator by Rupert Carmichael supporting
ColecoVision (with Super Game Module), CreatiVision, and My Vision.
JollyCV emulates the ColecoVision (with Super Game Module), the VTech
CreatiVision and the Nichibutsu My Vision. The libretro port and the
Jolly Good build share the same src/ tree; only the front end differs.
BIOS handling depends on the detected system type (set via core option
or auto-detected from ROM database via jcv_process_hash/jcv_get_dbflags):
The libretro port picks the system from the file name
(libretro/libretro.c:670-679): ".myv" is My Vision, ".rom" and ".bin"
are looked up by MD5 in the CreatiVision table (src/jcv_db.c:109-176,
reached through src/jollycv.c:118-120) and fall back to ColecoVision,
".col" is ColecoVision. A CreatiVision image whose MD5 is not in the
table runs as ColecoVision. Version 2.1.0 moved that table from
libretro/gamedb.h into src/jcv_db.c so both builds share it.
- ColecoVision (JCV_SYS_COLECO): loads "coleco.rom" from system dir.
BIOS is mapped at 0x0000-0x1FFF. Size must be exactly 8192 bytes
(SIZE_CVBIOS = SIZE_8K = 0x2000). Load fails if size mismatches.
Without the BIOS, ColecoVision games will not run (load returns false).
BIOS files are read from the front end's system directory, no
subdirectory, as "<system_dir>/coleco.rom" or "<system_dir>/bioscv.rom"
(libretro/libretro.c:696-716). jcv_bios_load_file (src/jollycv.c:406-432)
opens the file, reads it whole and hands the buffer to
jcv_coleco_bios_load or jcv_crvision_bios_load, which keep it only when
the size is exactly SIZE_CVBIOS (8192) or SIZE_CRVBIOS (2048). The return
value of that size check is dropped at src/jollycv.c:427, so a file of the
wrong size passes the loader while the BIOS pointer stays NULL; the first
BIOS read (src/jcv_coleco.c:281-282, src/jcv_crvision.c:443-444) then
dereferences it. A missing file fails retro_load_game. My Vision loads no
BIOS (libretro/libretro.c:717-719).
- CreatiVision (JCV_SYS_CRVISION): loads "bioscv.rom" from system dir.
BIOS is mapped at 0xF800-0xFFFF. Size must be exactly 2048 bytes
(SIZE_CRVBIOS = SIZE_2K = 0x800). Without the BIOS, CreatiVision
games will not run.
The Jolly Good build reads the same two names from the front end's BIOS
path (jg.c:463-481) and declares them through jg_get_bioslist with an
MD5 each (jg.c:151-156). The core never compares those MD5; the reference
front end hashes the file against them for a debug log only
(jgrf src/jgrf.c:441-458). The md5: fields below carry these values.
- My Vision (JCV_SYS_MYVISION): no BIOS required.
The libretro port constructs paths via snprintf("%s%c%s", sysdir, pss,
filename) in libretro.c:699-711. jcv_bios_load_file() opens the file,
reads it fully, then delegates to jcv_coleco_bios_load() or
jcv_crvision_bios_load() which validate size before copying.
ColecoVision cartridge header bytes at offset 0x0000-0x0001 control
boot behavior: 0xAA55 shows the BIOS title screen, 0x55AA jumps
directly to the game code vector.
The core includes a built-in ROM database with MD5 hashes (gamedb.h)
for game-specific flags, but this is for game compatibility, not BIOS
verification.
ColecoVision cartridges start with 0xAA55 to show the BIOS title screen or
0x55AA to jump straight to the game vector (src/jcv_coleco.c:421-426).
The MD5 database of ColecoVision games in src/jcv_db.c selects cartridge
mappers and controller flags.
files:
# --- ColecoVision BIOS (required for CV games) ---
- name: "coleco.rom"
system: colecovision
description: "ColecoVision BIOS"
required: true
size: 8192
md5: "2c66f5911e5b42b8ebe113403548eee7"
validation: [size]
source_ref: "libretro/libretro.c:701, src/jcv_coleco.c:402-406"
note: "Mapped at 0x0000-0x1FFF. Replaced by SGM lower RAM when Super Game Module is active. Must be exactly 8192 bytes."
source_ref: "libretro/libretro.c:697-703, src/jollycv.c:406-432, src/jcv_coleco.c:402-410, jg.c:151-153"
note: "Mapped at 0x0000-0x1FFF, replaced by the lower 8K of SGM RAM when the Super Game Module enables it. The MD5 is the value the JG bioslist declares; the core compares the size only."
# --- CreatiVision BIOS (required for CreatiVision games) ---
- name: "bioscv.rom"
system: creativision
description: "VTech CreatiVision BIOS ROM"
required: true
size: 2048
md5: "3b1ef759d8e3fb4071582efd33dd05f9"
validation: [size]
source_ref: "libretro/libretro.c:711, src/jcv_crvision.c:315-318"
note: "Mapped at 0xF800-0xFFFF. Must be exactly 2048 bytes."
source_ref: "libretro/libretro.c:707-713, src/jollycv.c:406-432, src/jcv_crvision.c:316-324, jg.c:154-155"
note: "Mapped at 0xF800-0xFFFF. The MD5 is the value the JG bioslist declares; the core compares the size only."
platform_details:
colecovision:
bios_filename: "coleco.rom"
bios_size: 8192
memory_map: "0x0000-0x1FFF"
source_ref: "src/jcv_coleco.c:269-281"
source_ref: "src/jcv_coleco.c:268-283"
creativision:
bios_filename: "bioscv.rom"
bios_size: 2048
memory_map: "0xF800-0xFFFF"
source_ref: "src/jcv_crvision.c:315-337, 441"
source_ref: "src/jcv_crvision.c:316-318, 443-445"
myvision:
bios_required: false
note: "No BIOS needed. My Vision games run without any system ROM."
source_ref: "libretro/libretro.c:717-719"
note: "No BIOS is loaded for My Vision."
+367 -119
View File
@@ -1,11 +1,17 @@
emulator: MesenCE
type: standalone
type: standalone + libretro
core_classification: enhanced_fork
source: "https://github.com/nesdev-org/MesenCE"
source:
standalone: "https://github.com/nesdev-org/MesenCE"
libretro: "https://github.com/libretro/MesenCE"
upstream: "https://github.com/SourMesen/Mesen2"
profiled_date: "2026-08-06"
source_commit: "af2342818ca81a93b346146802047760400fc7b1"
core_version: "2.2.1"
profiled_date: "2026-09-17"
source_commit:
standalone: "20f497c9620a7f4e55b7752e1d22734f9d7492fa"
libretro: "4c4e069f16a8ad6ed79e046046c56d51558c7daf"
core_version:
standalone: "2.2.1"
libretro: "2.0.0"
display_name: "Multi-System (MesenCE)"
cores: [mesence, mesen2]
systems:
@@ -35,131 +41,340 @@ notes: |
GB/GBC/GBA, PC Engine (including CD-ROM and SuperGrafx), SMS/Game Gear/
SG-1000/ColecoVision and WonderSwan (including Pocket Challenge V2).
All firmware is loaded from a flat <home>/Firmware/ folder
(FolderUtilities::GetFirmwareFolder, Utilities/FolderUtilities.cpp:81-91).
The core enforces exact file sizes at load time (FirmwareHelper.h
AttemptLoadFirmware). The UI additionally knows SHA256 values per file
(UI/Interop/FirmwareTypeExtensions.cs) and warns on mismatch when
importing through the firmware prompt, but a mismatched file can still
be used. The sha256 values below come from that table.
The libretro port lives in the libretro fork of the same tree: Libretro/
wraps the core and Makefile.libretro compiles every file under Core/ with
LIBRETRO defined (Makefile.libretro:165-166,183-184). The fork branched from
af2342818ca81a93b346146802047760400fc7b1 and does not touch
Core/Shared/FirmwareHelper.h, so both builds read the same names with the
same size checks. The buildbot publishes it as mesen2_libretro; the port
announces library_version 2.0.0 (Libretro/libretro.cpp:2803) while the
compiled core reports 2.2.1 (Core/Shared/EmuSettings.cpp:165-168).
SNES DSP-1/1B/2/3/4 and ST010/ST011 firmware is loaded from the combined
file listed below, or from a split pair <name>.program.rom + <name>.data.rom
Firmware folder. Standalone reads <home>/Firmware/ (Utilities/FolderUtilities.cpp:81-91).
The libretro port sets the home folder to the frontend system directory
and overrides the firmware folder with that same directory
(Libretro/libretro.cpp:2253-2256), so every firmware sits at the system
directory root. Satellaview streams and MesenNesDB.txt are read relative
to the home folder in both builds, which puts them under system/Satellaview/
and system/MesenNesDB.txt for libretro.
Size checks are exact at load time (FirmwareHelper.h AttemptLoadFirmware).
The standalone UI additionally knows SHA256 values per file
(UI/Interop/FirmwareTypeExtensions.cs) and warns on mismatch when
importing through the firmware prompt; a mismatched file can still be
used. The sha256 values below come from that table. The libretro port
has no prompt: a MissingFirmware notification reaches no listener, the
retry in FirmwareHelper fails the same way and the error goes to the OSD
(Libretro/LibretroMessageManager.h:26-39).
SNES DSP-1/1B/2/3/4 and ST010/ST011 firmware is read as the combined
file first, then as the split pair <name>.program.rom + <name>.data.rom
(FirmwareHelper.h AttemptLoadDspFirmware). ROM dumps with the firmware
appended to the game ROM need no external file (LoadDspFirmware embedded
path, Core/Shared/FirmwareHelper.h:131-135).
path, Core/Shared/FirmwareHelper.h:132-135).
GB/GBC/SGB boot ROM images are compiled into the core
(Core/Gameboy/GbBootRom.h:8,49,99); the external files below override them.
Super Game Boy mode falls back to the plain GB core when SGB1.sfc/SGB2.sfc
is missing (Core/SNES/BaseCartridge.cpp:698-717).
(Core/Gameboy/GbBootRom.h:8,49,99); the external files override them.
Super Game Boy mode falls back to the plain GB core when the SNES-side
ROM is missing (Core/SNES/BaseCartridge.cpp:698-716). GameboyConfig
keeps UseSgb2 at true and no core option changes it
(Core/Shared/SettingTypes.h:433), so the libretro build only ever asks
for SGB2.sfc and sgb2_boot.bin; SGB1.sfc and sgb_boot.bin are standalone
reads. The libretro port also offers a "Super Game Boy" subsystem taking
a GB ROM plus an SNES-side ROM (Libretro/libretro.cpp:1041-1052): the
second entry is copied into the system directory as SGB1.sfc or SGB2.sfc
by size for the duration of the load, then removed or restored
(Libretro/libretro.cpp:2627-2677,2692-2761).
Satellaview data broadcasts are read from <home>/Satellaview/ as
BSX<channel>-<index>.bin (Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74). Five stream files and
MesenNesDB.txt ship inside the application binary (Dependencies.zip) and
are extracted to the home folder at startup; user-provided replacements
are preserved (UI/Utilities/DependencyHelper.cs:14-66). NES and SNES
cheat databases (CheatDb.Nes.json, CheatDb.Snes.json) are read directly
from the embedded archive and never touch the filesystem
WonderSwan boot ROMs are read only when WsConfig.UseBootRom is on
(Core/WS/WsConsole.cpp:145-150). The libretro port never sets it, so
those three files are standalone reads.
PC Engine CD. For .cue content the libretro port first materialises
"[BIOS] Super CD-ROM System (Japan) (v3.0).pce" in the system directory
from syscard3.pce, syscard3.bin, syscard.pce or syscard.bin when the
canonical file is absent or not 256 KB: a 0x40200 or 0x60200 source is
read past its 512-byte header, only the first 256 KB are written, and the
stub is removed after the load (Libretro/libretro.cpp:108-196,2347-2358,2380-2384).
Then FirmwareHelper reads the canonical name or syscard3.pce at exactly
256 KB, in both builds.
NES game database. The libretro port embeds a 6213-line MesenDB.txt
(Libretro/libretro.cpp:85-86,592-594) and then reads MesenNesDB.txt from
the home folder on the first lookup (Core/NES/GameDatabase.cpp:92-103),
merging its 10668 entries over the embedded ones. Standalone deploys the
file from the application's Dependencies.zip. Five Satellaview stream
files ship the same way and are extracted to the home folder at startup;
user replacements are preserved (UI/Utilities/DependencyHelper.cs:14-67).
Nothing deploys them for libretro. NES and SNES cheat databases
(CheatDb.Nes.json, CheatDb.Snes.json) are read directly from the
embedded archive and never touch the filesystem
(DependencyHelper.cs GetFileContent, UI/ViewModels/CheatDatabaseViewModel.cs:33).
HdPacks are per-game texture/audio replacements under <home>/HdPacks/,
game content rather than system files.
MesenPalette.pal is a libretro read: the mesen_palette core option value
Custom loads it from the home folder, 192 or 1536 bytes
(Libretro/libretro.cpp:1178-1204,1304-1306).
HdPacks are per-game texture/audio replacements under <home>/HdPacks/
(system/HdPacks/ for libretro), game content rather than system files.
The libretro port lists nes|fds|unf|unif|sfc|smc|gb|gbc|gba|pce|sgx|cue|
sms|gg|ws|wsc as valid extensions (Libretro/libretro.cpp:2838-2840). The
load path itself dispatches on the console extension tables, so .bs, .st,
.col, .sg, .pc2 and .studybox content loads when the frontend passes it.
exclusion_note: >-
The .info declares syscard1.pce, syscard2.pce and gexpress.pce. No code
path opens those names: the CD firmware loader reads
"[BIOS] Super CD-ROM System (Japan) (v3.0).pce" or syscard3.pce and the
Games Express loader reads "[BIOS] Games Express CD Card (Japan).pce" or
gecard.pce (Core/Shared/FirmwareHelper.h:330-368); the libretro stub
adds syscard3.bin, syscard.pce and syscard.bin as sources for the Super
CD-ROM image only (Libretro/libretro.cpp:114).
files:
# -------------------------------------------------------
# SNES coprocessor firmware
# -------------------------------------------------------
- name: "dsp1.rom"
path: "Firmware/dsp1.rom"
path: "dsp1.rom"
standalone_path: "Firmware/dsp1.rom"
aliases: ["SNES_dsp1.rom"]
system: nintendo-snes
required: true
size: 8192
validation: [size]
sha256: "91e87d11e1c30d172556bed2211cce2efa94ba595f58c5d264809ef4d363a97b"
note: "DSP-1 program+data (0x1800+0x800). Split pair dsp1.program.rom + dsp1.data.rom also accepted. Not needed when the game dump embeds the firmware."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:59-79,130-152"
note: "DSP-1 program+data (0x1800+0x800). Tried before the split pair dsp1.program.rom + dsp1.data.rom. Not needed when the game dump embeds the firmware."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:59-79,130-152, UI/Interop/FirmwareTypeExtensions.cs:11"
- name: "dsp1.program.rom"
path: "dsp1.program.rom"
standalone_path: "Firmware/dsp1.program.rom"
system: nintendo-snes
required: false
size: 6144
validation: [size]
note: "DSP-1 program ROM, read with dsp1.data.rom when dsp1.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp1.data.rom"
path: "dsp1.data.rom"
standalone_path: "Firmware/dsp1.data.rom"
system: nintendo-snes
required: false
size: 2048
validation: [size]
note: "DSP-1 data ROM, read with dsp1.program.rom when dsp1.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp1b.rom"
path: "Firmware/dsp1b.rom"
path: "dsp1b.rom"
standalone_path: "Firmware/dsp1b.rom"
aliases: ["SNES_dsp1b.rom"]
system: nintendo-snes
required: true
size: 8192
validation: [size]
sha256: "d789cb3c36b05c0b23b6c6f23be7aa37c6e78b6ee9ceac8d2d2aa9d8c4d35fa9"
note: "DSP-1B revision. Split pair dsp1b.program.rom + dsp1b.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:59-79"
note: "DSP-1B revision. Tried before the split pair dsp1b.program.rom + dsp1b.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:12"
- name: "dsp1b.program.rom"
path: "dsp1b.program.rom"
standalone_path: "Firmware/dsp1b.program.rom"
system: nintendo-snes
required: false
size: 6144
validation: [size]
note: "DSP-1B program ROM, read with dsp1b.data.rom when dsp1b.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp1b.data.rom"
path: "dsp1b.data.rom"
standalone_path: "Firmware/dsp1b.data.rom"
system: nintendo-snes
required: false
size: 2048
validation: [size]
note: "DSP-1B data ROM, read with dsp1b.program.rom when dsp1b.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp2.rom"
path: "Firmware/dsp2.rom"
path: "dsp2.rom"
standalone_path: "Firmware/dsp2.rom"
aliases: ["SNES_dsp2.rom"]
system: nintendo-snes
required: true
size: 8192
validation: [size]
sha256: "03ef4ef26c9f701346708cb5d07847b5203cf1b0818bf2930acd34510ffdd717"
note: "DSP-2 (Dungeon Master). Split pair dsp2.program.rom + dsp2.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:59-79"
note: "DSP-2 (Dungeon Master). Tried before the split pair dsp2.program.rom + dsp2.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:13"
- name: "dsp2.program.rom"
path: "dsp2.program.rom"
standalone_path: "Firmware/dsp2.program.rom"
system: nintendo-snes
required: false
size: 6144
validation: [size]
note: "DSP-2 program ROM, read with dsp2.data.rom when dsp2.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp2.data.rom"
path: "dsp2.data.rom"
standalone_path: "Firmware/dsp2.data.rom"
system: nintendo-snes
required: false
size: 2048
validation: [size]
note: "DSP-2 data ROM, read with dsp2.program.rom when dsp2.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp3.rom"
path: "Firmware/dsp3.rom"
path: "dsp3.rom"
standalone_path: "Firmware/dsp3.rom"
aliases: ["SNES_dsp3.rom"]
system: nintendo-snes
required: true
size: 8192
validation: [size]
sha256: "0971b08f396c32e61989d1067dddf8e4b14649d548b2188f7c541b03d7c69e4e"
note: "DSP-3 (SD Gundam GX). Split pair dsp3.program.rom + dsp3.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:59-79"
note: "DSP-3 (SD Gundam GX). Tried before the split pair dsp3.program.rom + dsp3.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:14"
- name: "dsp3.program.rom"
path: "dsp3.program.rom"
standalone_path: "Firmware/dsp3.program.rom"
system: nintendo-snes
required: false
size: 6144
validation: [size]
note: "DSP-3 program ROM, read with dsp3.data.rom when dsp3.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp3.data.rom"
path: "dsp3.data.rom"
standalone_path: "Firmware/dsp3.data.rom"
system: nintendo-snes
required: false
size: 2048
validation: [size]
note: "DSP-3 data ROM, read with dsp3.program.rom when dsp3.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp4.rom"
path: "Firmware/dsp4.rom"
path: "dsp4.rom"
standalone_path: "Firmware/dsp4.rom"
aliases: ["SNES_dsp4.rom"]
system: nintendo-snes
required: true
size: 8192
validation: [size]
sha256: "752d03b2d74441e430b7f713001fa241f8bbcfc1a0d890ed4143f174dbe031da"
note: "DSP-4 (Top Gear 3000). Split pair dsp4.program.rom + dsp4.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:59-79"
note: "DSP-4 (Top Gear 3000). Tried before the split pair dsp4.program.rom + dsp4.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:15"
- name: "dsp4.program.rom"
path: "dsp4.program.rom"
standalone_path: "Firmware/dsp4.program.rom"
system: nintendo-snes
required: false
size: 6144
validation: [size]
note: "DSP-4 program ROM, read with dsp4.data.rom when dsp4.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:69-76"
- name: "dsp4.data.rom"
path: "dsp4.data.rom"
standalone_path: "Firmware/dsp4.data.rom"
system: nintendo-snes
required: false
size: 2048
validation: [size]
note: "DSP-4 data ROM, read with dsp4.program.rom when dsp4.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:69-76"
- name: "st010.rom"
path: "Firmware/st010.rom"
path: "st010.rom"
standalone_path: "Firmware/st010.rom"
aliases: ["SNES_st010.rom"]
system: nintendo-snes
required: true
size: 53248
validation: [size]
sha256: "fa9bced838fedea11c6f6ace33d1878024bdd0d02cc9485899d0bdd4015ec24c"
note: "ST010 (F1 ROC II) program+data (0xC000+0x1000). Split pair st010.program.rom + st010.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:59-79"
note: "ST010 (F1 ROC II) program+data (0xC000+0x1000). Tried before the split pair st010.program.rom + st010.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:17"
- name: "st010.program.rom"
path: "st010.program.rom"
standalone_path: "Firmware/st010.program.rom"
system: nintendo-snes
required: false
size: 49152
validation: [size]
note: "ST010 program ROM, read with st010.data.rom when st010.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:69-76"
- name: "st010.data.rom"
path: "st010.data.rom"
standalone_path: "Firmware/st010.data.rom"
system: nintendo-snes
required: false
size: 4096
validation: [size]
note: "ST010 data ROM, read with st010.program.rom when st010.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:69-76"
- name: "st011.rom"
path: "Firmware/st011.rom"
path: "st011.rom"
standalone_path: "Firmware/st011.rom"
aliases: ["SNES_st011.rom"]
system: nintendo-snes
required: true
size: 53248
validation: [size]
sha256: "8b2b3f3f3e6e29f4d21d8bc736b400bc988b7d2214ebee15643f01c1fee2f364"
note: "ST011 (Hayazashi Nidan Morita Shogi) program+data. Split pair st011.program.rom + st011.data.rom also accepted."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:59-79"
note: "ST011 (Hayazashi Nidan Morita Shogi) program+data. Tried before the split pair st011.program.rom + st011.data.rom."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:18"
- name: "st011.program.rom"
path: "st011.program.rom"
standalone_path: "Firmware/st011.program.rom"
system: nintendo-snes
required: false
size: 49152
validation: [size]
note: "ST011 program ROM, read with st011.data.rom when st011.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:69-76"
- name: "st011.data.rom"
path: "st011.data.rom"
standalone_path: "Firmware/st011.data.rom"
system: nintendo-snes
required: false
size: 4096
validation: [size]
note: "ST011 data ROM, read with st011.program.rom when st011.rom is absent."
source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:69-76"
- name: "st018.rom"
path: "Firmware/st018.rom"
path: "st018.rom"
standalone_path: "Firmware/st018.rom"
aliases: ["SNES_st018.rom"]
system: nintendo-snes
required: true
size: 163840
validation: [size]
sha256: "6df209ab5d2524d1839c038be400ae5eb20dafc14a3771a3239cd9e8acd53806"
note: "ST018 ARM coprocessor (Hayazashi Nidan Morita Shogi 2). Missing file leaves the coprocessor ROMs zero-filled."
source_ref: "Core/SNES/Coprocessors/ST018/St018.cpp:32-36, Core/Shared/FirmwareHelper.h:153-171"
note: "ST018 ARM coprocessor (Hayazashi Nidan Morita Shogi 2). Missing file leaves the coprocessor ROMs uninitialised."
source_ref: "Core/SNES/Coprocessors/ST018/St018.cpp:31-36, Core/Shared/FirmwareHelper.h:153-171, UI/Interop/FirmwareTypeExtensions.cs:19"
- name: "BS-X.bin"
path: "Firmware/BS-X.bin"
path: "BS-X.bin"
standalone_path: "Firmware/BS-X.bin"
system: nintendo-satellaview
required: true
size: 1048576
@@ -167,10 +382,11 @@ files:
validation: [size]
sha256: "27cfdb99f7e4252bf3740d420147b63c4c88616883bc5e7fe43f2f30bf8c8cbb,a49827b45ff9ac9cf5b4658190e1428e59251bc82d8a63d8e9e0f71e439f008f,3ce321496edc5d77038de2034eb3fb354d7724afd0bc7fd0319f3eb5d57b984d,77d94d64d745014bf8b51280a4204056cdeb9d41ea30eae80dbc006675bebef8"
note: "BS-X application cartridge ROM, mandatory for .bs Satellaview files. Core accepts any file of 32 KB or more; the known dumps are 1 MB (Japan/English, with and without DRM)."
source_ref: "Core/SNES/BaseCartridge.cpp:60-64, Core/Shared/FirmwareHelper.h:81-92,172-188"
source_ref: "Core/SNES/BaseCartridge.cpp:60-64, Core/Shared/FirmwareHelper.h:81-92,172-188, UI/Interop/FirmwareTypeExtensions.cs:23-31"
- name: "SufamiTurbo.sfc"
path: "Firmware/SufamiTurbo.sfc"
path: "SufamiTurbo.sfc"
standalone_path: "Firmware/SufamiTurbo.sfc"
aliases: ["STBIOS.bin"]
system: nintendo-sufami-turbo
required: true
@@ -178,33 +394,36 @@ files:
validation: [size]
sha256: "edacb453da14f825f05d1134d6035f4bf034e55f7cfb97c70c4ee107eabc7342"
note: "Sufami Turbo base cartridge BIOS, mandatory for .st files."
source_ref: "Core/SNES/Coprocessors/SufamiTurbo/SufamiTurbo.h:38-42, Core/Shared/FirmwareHelper.h:189-207"
source_ref: "Core/SNES/Coprocessors/SufamiTurbo/SufamiTurbo.h:39-44, Core/Shared/FirmwareHelper.h:189-207, UI/Interop/FirmwareTypeExtensions.cs:21"
- name: "SGB1.sfc"
path: "Firmware/SGB1.sfc"
standalone_path: "Firmware/SGB1.sfc"
mode: standalone
system: nintendo-super-game-boy
required: false
size: 262144
validation: [size]
sha256: "bba9c269273bedb9b38bd5eb23bfaa6e509b8decc7cb80bb5513905af04f4ceb,c6c4daab5c899b69900c460787de6089edabe94b760f96d9f583d30cc0a5bb30,a75160f7b89b1f0e20fd2f6441bb86285c7378db5035ef6885485eaff6059376"
note: "Super Game Boy SNES-side ROM (Rev 0/1/2). Without it, GB games run on the plain GB core instead of SGB mode."
source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228"
note: "Super Game Boy SNES-side ROM (Rev 0/1/2), read when the UseSgb2 setting is off. Without it, GB games run on the plain GB core instead of SGB mode. The libretro build keeps UseSgb2 on and never opens this name."
source_ref: "Core/SNES/BaseCartridge.cpp:698-716, Core/Shared/FirmwareHelper.h:208-228, Core/Shared/SettingTypes.h:433, UI/Interop/FirmwareTypeExtensions.cs:40-47"
- name: "SGB2.sfc"
path: "Firmware/SGB2.sfc"
path: "SGB2.sfc"
standalone_path: "Firmware/SGB2.sfc"
system: nintendo-super-game-boy
required: false
size: 524288
validation: [size]
sha256: "c172498a23d1176672931bab33b629c7d28f914a43dca9e540b8af1b37ccf2c6"
note: "Super Game Boy 2 SNES-side ROM, used when the SGB2 option is enabled."
source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228"
note: "Super Game Boy 2 SNES-side ROM, read when the UseSgb2 setting is on (the default, and the only state of the libretro build). Without it, GB games run on the plain GB core instead of SGB mode."
source_ref: "Core/SNES/BaseCartridge.cpp:698-716, Core/Shared/FirmwareHelper.h:208-228, Core/Shared/SettingTypes.h:433, UI/Interop/FirmwareTypeExtensions.cs:49"
# -------------------------------------------------------
# Game Boy boot ROMs (embedded copies used when absent)
# -------------------------------------------------------
- name: "dmg_boot.bin"
path: "Firmware/dmg_boot.bin"
path: "dmg_boot.bin"
standalone_path: "Firmware/dmg_boot.bin"
aliases: ["gb_bios.bin"]
system: nintendo-gb
required: false
@@ -212,10 +431,11 @@ files:
validation: [size]
sha256: "cf053eccb4ccafff9e67339d4e78e98dce7d1ed59be819d2a1ba2232c6fce1c7,26e71cf01e301e5dc40e987cd2ecbf6d0276245890ac829db2a25323da86818e"
note: "DMG boot ROM override. An embedded copy is used when the file is absent."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:102-110, Core/Gameboy/GbBootRom.h:8"
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:102-110, Core/Gameboy/GbBootRom.h:8, UI/Interop/FirmwareTypeExtensions.cs:33"
- name: "cgb_boot.bin"
path: "Firmware/cgb_boot.bin"
path: "cgb_boot.bin"
standalone_path: "Firmware/cgb_boot.bin"
aliases: ["gbc_bios.bin"]
system: nintendo-gbc
required: false
@@ -223,48 +443,52 @@ files:
validation: [size]
sha256: "b4f2e416a35eef52cba161b159c7c8523a92594facb924b3ede0d722867c50c7,3a307a41689bee99a9a32ea021bf45136906c86b2e4f06c806738398e4f92e45"
note: "GBC boot ROM override. An embedded copy is used when the file is absent."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:99"
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:99, UI/Interop/FirmwareTypeExtensions.cs:34"
- name: "sgb_boot.bin"
path: "Firmware/sgb_boot.bin"
standalone_path: "Firmware/sgb_boot.bin"
mode: standalone
aliases: ["sgb_bios.bin"]
system: nintendo-super-game-boy
required: false
size: 256
validation: [size]
sha256: "0e4ddff32fc9d1eeaae812a157dd246459b00c9e14f2f61751f661f32361e360"
note: "SGB1 GB-side boot ROM override. An embedded copy is used when the file is absent."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49"
note: "SGB1 GB-side boot ROM override, read when the UseSgb2 setting is off. An embedded copy is used when the file is absent. The libretro build keeps UseSgb2 on and never opens this name."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:94-97, Core/Gameboy/GbBootRom.h:49, UI/Interop/FirmwareTypeExtensions.cs:37"
- name: "sgb2_boot.bin"
path: "Firmware/sgb2_boot.bin"
path: "sgb2_boot.bin"
standalone_path: "Firmware/sgb2_boot.bin"
aliases: ["sgb_bios.bin"]
system: nintendo-super-game-boy
required: false
size: 256
validation: [size]
sha256: "fd243c4fb27008986316ce3df29e9cfbcdc0cd52704970555a8bb76edbec3988"
note: "SGB2 GB-side boot ROM override. An embedded copy is used when the file is absent."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49"
note: "SGB2 GB-side boot ROM override, read when the UseSgb2 setting is on. An embedded copy is used when the file is absent."
source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:94-97, Core/Gameboy/GbBootRom.h:49, UI/Interop/FirmwareTypeExtensions.cs:38"
# -------------------------------------------------------
# Game Boy Advance
# -------------------------------------------------------
- name: "gba_bios.bin"
path: "Firmware/gba_bios.bin"
path: "gba_bios.bin"
standalone_path: "Firmware/gba_bios.bin"
system: nintendo-gba
required: true
size: 16384
validation: [size]
sha256: "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570"
note: "GBA BIOS. When missing, the boot ROM region is zero-filled and games calling BIOS routines fail; there is no HLE replacement."
source_ref: "Core/GBA/GbaConsole.cpp:76-79, Core/Shared/FirmwareHelper.h:272-291"
source_ref: "Core/GBA/GbaConsole.cpp:76-79, Core/Shared/FirmwareHelper.h:272-291, UI/Interop/FirmwareTypeExtensions.cs:35"
# -------------------------------------------------------
# NES / Famicom
# -------------------------------------------------------
- name: "disksys.rom"
path: "Firmware/disksys.rom"
path: "disksys.rom"
standalone_path: "Firmware/disksys.rom"
aliases: ["FdsBios.bin"]
system: nintendo-fds
required: true
@@ -272,30 +496,33 @@ files:
validation: [size]
sha256: "99c18490ed9002d9c6d999b9d8d15be5c051bdfa7cc7e73318053c9a994b0178,a0a9d57cbace21bf9c85c2b85e86656317f0768d7772acc90c7411ab1dbff2bf"
note: "FDS BIOS. When missing, the BIOS region is zero-filled and disk games cannot boot."
source_ref: "Core/NES/Mappers/FDS/Fds.cpp:21-28, Core/Shared/FirmwareHelper.h:292-310"
source_ref: "Core/NES/Mappers/FDS/Fds.cpp:21-28, Core/Shared/FirmwareHelper.h:292-310, UI/Interop/FirmwareTypeExtensions.cs:51-57"
- name: "StudyBox.bin"
path: "Firmware/StudyBox.bin"
path: "StudyBox.bin"
standalone_path: "Firmware/StudyBox.bin"
system: nintendo-nes
required: false
size: 262144
validation: [size]
sha256: "365f84c86f7f7c3aaa2042d78494d41448e998ec5a89ac1b5fecb452951d514c"
note: "Famicom Study Box BIOS, mandatory for .studybox tape dumps only. When missing, the BIOS region is zero-filled."
source_ref: "Core/NES/Mappers/StudyBox.h:64-70, Core/Shared/FirmwareHelper.h:311-329"
source_ref: "Core/NES/Mappers/StudyBox.h:64-70, Core/Shared/FirmwareHelper.h:311-329, UI/Interop/FirmwareTypeExtensions.cs:59"
- name: "ymf288_adpcm_rom.bin"
path: "Firmware/ymf288_adpcm_rom.bin"
path: "ymf288_adpcm_rom.bin"
standalone_path: "Firmware/ymf288_adpcm_rom.bin"
system: nintendo-nes
required: false
size: 8192
validation: [size]
sha256: "53afd0fa9c62eda3e2be939e23f3adf48a2af8ad37bb1640261726c5d5adeba8"
note: "YMF288 ADPCM rhythm ROM for EPSM expansion audio (NES 2.0 header flag). Without it, EPSM sound is incorrect."
source_ref: "Core/NES/BaseMapper.cpp:763-768, Core/Shared/FirmwareHelper.h:439-458"
source_ref: "Core/NES/BaseMapper.cpp:764-768, Core/Shared/FirmwareHelper.h:439-456, UI/Interop/FirmwareTypeExtensions.cs:83"
- name: "lh5323m1.bin"
path: "Firmware/lh5323m1.bin"
path: "lh5323m1.bin"
standalone_path: "Firmware/lh5323m1.bin"
system: nintendo-nes
required: false
size: 262144
@@ -309,99 +536,117 @@ files:
required: false
size: 548608
sha256: "7eee6516f351ccc7db286587917bec415a1d8042ff5ef87c279f38200a3418dd"
note: "NES game database for mapper and input detection, read from the home folder root. Deployed automatically from the application's embedded Dependencies.zip."
source_ref: "Core/NES/GameDatabase.cpp:92-101, UI/Utilities/DependencyHelper.cs:14-66"
note: "NES game database for mapper and input detection, read from the home folder root on the first lookup. Standalone deploys it from the application's embedded Dependencies.zip; the libretro build starts from a 6213-line embedded copy and merges this file over it when present."
source_ref: "Core/NES/GameDatabase.cpp:92-103, UI/Utilities/DependencyHelper.cs:14-67, Libretro/libretro.cpp:85-86,592-594"
- name: "MesenPalette.pal"
path: "MesenPalette.pal"
mode: libretro
system: nintendo-nes
required: false
size: [192, 1536]
validation: [size]
note: "NES colour palette read from the home folder when the mesen_palette core option is Custom: 64 RGB triplets, or 512 covering the emphasis combinations. Any other size leaves the default palette in place."
source_ref: "Libretro/libretro.cpp:1178-1204, Libretro/libretro.cpp:1304-1306"
# -------------------------------------------------------
# PC Engine
# -------------------------------------------------------
- name: "[BIOS] Super CD-ROM System (Japan) (v3.0).pce"
path: "Firmware/[BIOS] Super CD-ROM System (Japan) (v3.0).pce"
aliases: ["syscard3.pce"]
path: "[BIOS] Super CD-ROM System (Japan) (v3.0).pce"
standalone_path: "Firmware/[BIOS] Super CD-ROM System (Japan) (v3.0).pce"
aliases: ["syscard3.pce", "syscard3.bin", "syscard.pce", "syscard.bin"]
system: nec-pc-engine-cd
required: true
size: 262144
validation: [size]
sha256: "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce"
note: "Super CD-ROM System card, mandatory for CD games. Load fails without it."
source_ref: "Core/PCE/PceConsole.cpp:61-63,151-164, Core/Shared/FirmwareHelper.h:330-349"
note: "Super CD-ROM System card, mandatory for CD games. Load fails without it. Both builds read this name or syscard3.pce at exactly 256 KB; the libretro build first builds the canonical file from syscard3.pce, syscard3.bin, syscard.pce or syscard.bin, skipping a 512-byte header, for the duration of a .cue load."
source_ref: "Core/PCE/PceConsole.cpp:61-63,151-164, Core/Shared/FirmwareHelper.h:330-349, Libretro/libretro.cpp:108-183,2347-2358, UI/Interop/FirmwareTypeExtensions.cs:61-62"
- name: "[BIOS] Games Express CD Card (Japan).pce"
path: "Firmware/[BIOS] Games Express CD Card (Japan).pce"
path: "[BIOS] Games Express CD Card (Japan).pce"
standalone_path: "Firmware/[BIOS] Games Express CD Card (Japan).pce"
aliases: ["gecard.pce"]
system: nec-pc-engine-cd
required: false
size: 32768
size: [32768, 16384]
validation: [size]
sha256: "4b86bb96a48a4ca8375fc0109631d0b1d64f255a03b01de70594d40788ba6c3d,da173b20694c2b52087b099b8c44e471d3ee08a666c90d4afd997f8e1382add8"
note: "Games Express CD card, mandatory for Games Express discs (auto-detected by sector signature). Exactly 0x8000 or 0x4000 bytes accepted."
source_ref: "Core/PCE/PceConsole.cpp:153-160, Core/Shared/FirmwareHelper.h:350-368"
note: "Games Express CD card, mandatory for Games Express discs (auto-detected by sector signature). Exactly 0x8000 bytes (Blue Version card) or 0x4000 bytes (Green Version card) accepted."
source_ref: "Core/PCE/PceConsole.cpp:153-160, Core/Shared/FirmwareHelper.h:350-368, UI/Interop/FirmwareTypeExtensions.cs:64-68"
# -------------------------------------------------------
# SMS / Game Gear / ColecoVision
# -------------------------------------------------------
- name: "bios.sms"
path: "Firmware/bios.sms"
path: "bios.sms"
standalone_path: "Firmware/bios.sms"
system: sega-mastersystem
required: false
sha256: "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50,1eb16fc06ceaf05651d7cfd69d1713e6ddccc4349a511f6fd17e037d71f9d85b,67846e26764bd862f19179294347f7353a4166b62ac4198a5ec32933b7da486e,cb01de3464797a77b52e82f5f9b05398540df8c1151d31128d49584028589062,6f4e6de10f1d07bda695c629c67457bb0248eeb8ffa0c61a2742b8529274de30,0c08e17b0ecc3967e1094f12841fdc97fdcbbf986e3bf9a06b35b69e7d95e4cd,1a73bc6e1a9973b98432774a1480b3ac1259027a97590d5e67d52745159abbbc,e9eb04ec80ded8658f765c4eca75cdbe23cbc7d8fed73f9c3db7a868dbf649ff,13c0639cc037167f53e6151dbdea013758c3d09a76b064a894bf15c39c0a3897,aaf39841be10f9cd6908a95a7451c3a0c8ac77125eb412b7a41cad260c888ab5,57abf3c00c82a8e042ebeb2bfe412adac9ba005e9009845236390de3ee645248,c51ec80b7a609c5ee3d203ceee2b602ae4dfb4479caf15dc1d030c40c0364e93"
note: "Master System boot ROM, mapped when present. Loaded without any size check; known dumps are 8/16/128/256 KB."
source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380"
note: "Master System boot ROM, also read for SG-1000 content, mapped when present. Loaded without any size check; known dumps are 8/16/128/256 KB."
source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-379, UI/Interop/FirmwareTypeExtensions.cs:71-77"
- name: "bios.gg"
path: "Firmware/bios.gg"
path: "bios.gg"
standalone_path: "Firmware/bios.gg"
system: sega-gamegear
required: false
size: 1024
sha256: "8c8a21335038285cfa03dc076100c1f0bfadf3e4ff70796f11f3dfaaab60eee2"
note: "Game Gear boot ROM, mapped when present. Loaded without any size check."
source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380"
source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-379, UI/Interop/FirmwareTypeExtensions.cs:79"
- name: "bios.col"
path: "Firmware/bios.col"
path: "bios.col"
standalone_path: "Firmware/bios.col"
system: coleco-colecovision
required: true
size: 8192
validation: [size]
sha256: "990bf1956f10207d8781b619eb74f89b00d921c8d45c95c334c16c8cceca09ad,fb4a898eb93b19b36773d87a6c70eb28f981b2686bebdd2d431b05dcdf9cffd4"
note: "ColecoVision BIOS. The system boots through it; games cannot start without it."
source_ref: "Core/SMS/SmsConsole.cpp:71-74, Core/Shared/FirmwareHelper.h:381-399"
note: "ColecoVision BIOS, NTSC or PAL console dump. The system boots through it; games cannot start without it."
source_ref: "Core/SMS/SmsConsole.cpp:71-74, Core/Shared/FirmwareHelper.h:381-398, UI/Interop/FirmwareTypeExtensions.cs:70"
# -------------------------------------------------------
# WonderSwan
# WonderSwan (standalone only: UseBootRom is never set by the libretro port)
# -------------------------------------------------------
- name: "bootrom.ws"
path: "Firmware/bootrom.ws"
standalone_path: "Firmware/bootrom.ws"
mode: standalone
system: bandai-wswan
required: false
size: 4096
validation: [size]
sha256: "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e"
note: "WonderSwan boot ROM, also used for Pocket Challenge V2. Loaded only when the UseBootRom setting is enabled (default off); without it the boot screen is skipped."
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-438"
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:80"
- name: "bootrom.wsc"
path: "Firmware/bootrom.wsc"
standalone_path: "Firmware/bootrom.wsc"
mode: standalone
system: bandai-wswanc
required: false
size: 8192
validation: [size]
sha256: "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2"
note: "WonderSwan Color boot ROM. Loaded only when the UseBootRom setting is enabled."
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438"
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:81"
- name: "bootrom_sc.wsc"
path: "Firmware/bootrom_sc.wsc"
standalone_path: "Firmware/bootrom_sc.wsc"
mode: standalone
system: bandai-wswanc
required: false
size: 8192
validation: [size]
sha256: "82e96addf5ab1ce09a84b6eedaa904e4ca432756851f7e0cc0649006c183834d"
note: "SwanCrystal boot ROM. Loaded only when the UseBootRom setting is enabled and the SwanCrystal model is selected."
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438"
source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:82"
# -------------------------------------------------------
# Satellaview broadcast data (auto-deployed)
# Satellaview broadcast data (auto-deployed by the standalone UI)
# -------------------------------------------------------
- name: "BSX0120-0.bin"
path: "Satellaview/BSX0120-0.bin"
@@ -410,8 +655,8 @@ files:
required: false
size: 34
sha256: "ba0c17b5786724959bc206714fc18f708c16fdcd77f8fb19aaf9768338e3ce01"
note: "Satellaview data stream for channel 0120 (time channel). Deployed automatically from the application's embedded Dependencies.zip; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49"
note: "Satellaview data stream for channel 0120 (time channel), read from <home>/Satellaview/. Standalone deploys it from the application's embedded Dependencies.zip and preserves user replacements; the libretro build reads it from system/Satellaview/ and deploys nothing."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48"
- name: "BSX0121-0.bin"
path: "Satellaview/BSX0121-0.bin"
@@ -420,8 +665,8 @@ files:
required: false
size: 34
sha256: "fbe51a53638dd366b50ea53adf92f54447667d7767c502e508d89b008e31c53f"
note: "Satellaview data stream for channel 0121. Deployed automatically; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49"
note: "Satellaview data stream for channel 0121. Deployed by the standalone UI; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48"
- name: "BSX0122-0.bin"
path: "Satellaview/BSX0122-0.bin"
@@ -430,8 +675,8 @@ files:
required: false
size: 1031
sha256: "a0329450e1d42cd18d30070a86e0e481a876cb5c9cfbaab4a0d8895150976ee7"
note: "Satellaview data stream for channel 0122. Deployed automatically; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49"
note: "Satellaview data stream for channel 0122. Deployed by the standalone UI; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48"
- name: "BSX0123-0.bin"
path: "Satellaview/BSX0123-0.bin"
@@ -440,8 +685,8 @@ files:
required: false
size: 16
sha256: "dbf5ef12ce586712ee666fc5805e6dfcaa1e253fdd36644f773909514868a590"
note: "Satellaview data stream for channel 0123. Deployed automatically; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49"
note: "Satellaview data stream for channel 0123. Deployed by the standalone UI; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48"
- name: "BSX0124-0.bin"
path: "Satellaview/BSX0124-0.bin"
@@ -450,12 +695,15 @@ files:
required: false
size: 97
sha256: "4d7d7bf5afe5c4f71b96965e58003816c70c13e8af9b581431504d5e52a0cec1"
note: "Satellaview data stream for channel 0124. Deployed automatically; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49"
note: "Satellaview data stream for channel 0124. Deployed by the standalone UI; user replacements are preserved."
source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48"
platform_details:
firmware_folder: "Firmware/"
firmware_folder:
standalone: "Firmware/"
libretro: "system directory root"
firmware_size_check: exact
ui_hash_check: "sha256, advisory (UI/Interop/FirmwareTypeExtensions.cs)"
ui_hash_check: "sha256, advisory, standalone UI only (UI/Interop/FirmwareTypeExtensions.cs)"
satellaview_streams: "Satellaview/BSX<channel>-<index>.bin"
source_ref: "Utilities/FolderUtilities.cpp:81-91, Core/Shared/FirmwareHelper.h"
libretro_subsystem: "Super Game Boy: gb|gbc|gbx + sfc|smc"
source_ref: "Utilities/FolderUtilities.cpp:81-91, Libretro/libretro.cpp:2253-2256, Core/Shared/FirmwareHelper.h"
+12 -8
View File
@@ -3,9 +3,9 @@ type: libretro
core_classification: official_port
source: "https://github.com/mentalfoundry/pokketstation"
upstream: "https://github.com/mentalfoundry/pokketstation"
profiled_date: "2026-09-03"
source_commit: "11fb6de0139d5cbdbd44e37839571a0bf25e5ab2"
core_version: "v1.11.1"
profiled_date: "2026-09-17"
source_commit: "484933271b7d362e8e76f1121839c33e5d5ec83e"
core_version: "v1.12"
display_name: "Sony - PocketStation (pokketstation)"
cores: [pokketstation]
systems: [sony-pocketstation]
@@ -14,15 +14,19 @@ notes: |
PocketStation emulator with a portable C core (core/) shared by the libretro
core, an SDL2 desktop application and a PS Vita port. The libretro core
reports library_version "0.1"; the project version is the release tag,
v1.11.1 in the desktop frontend (frontends/desktop/main.c:40).
v1.12 in the desktop frontend (frontends/desktop/main.c:40).
load_bios opens <system>/pocketstation.bin, reads 16384 bytes and fails when
fewer are read; a longer file is accepted and truncated. psemu_load_bios
copies the image and rejects any size other than PSEMU_BIOS_SIZE.
retro_load_game returns false when load_bios fails, and psemu_run executes
nothing while no BIOS is loaded: there is no HLE and no embedded copy.
Content (.mcr, .mcd, .mcs, .pss) is identified by its bytes, not by the
extension. Save RAM is the full 128 KB flash image.
Content (.mcr, .mcd, .mcs, .pss, .bin, .gme) is identified by its bytes,
not by the extension: a 128 KB image is a full card, a 134976-byte file
opening with 123-456-STD is a DexDrive dump whose 3904-byte header is
skipped, anything else is tried as a single save then as a Title Sector
body (core/src/psemu.c:187-209, 301-317). Save RAM is the full 128 KB
flash image.
psemu_settings_offsets_known hashes the loaded image with FNV-1a and compares
it with 0xB2E46838, the retail 110 revision the project traced; a match
@@ -30,7 +34,7 @@ notes: |
16 KB image boots. Two mask ROM revisions are documented: 061, from
prototype hardware, and 110, the retail one; the ASCII tags at offsets
0x1DFC (C061 or C110) and 0x3FFC (J061 or J110) identify them
(docs/hardware-notes.md:778-788). SWI 0Fh FlashWriteSerial works on 061
(docs/hardware-notes.md:782-792). SWI 0Fh FlashWriteSerial works on 061
and locks the CPU on 110.
The desktop application takes the BIOS path from the command line, then
@@ -46,7 +50,7 @@ files:
required: true
validation: [size]
standalone_path: "bios.bin"
source_ref: "frontends/libretro/libretro.c:178-196, frontends/libretro/libretro.c:206-208, core/src/psemu.c:90-97, core/src/psemu.c:458-461, core/src/psemu.c:795-820, core/include/psemu/psemu.h:19"
source_ref: "frontends/libretro/libretro.c:178-196, frontends/libretro/libretro.c:206-208, core/src/psemu.c:90-97, core/src/psemu.c:474-477, core/src/psemu.c:854-879, core/include/psemu/psemu.h:19"
note: >
Read from the frontend system directory. The desktop application reads
the whole file and psemu_load_bios rejects any size other than 16384;
+166 -125
View File
@@ -3,9 +3,9 @@ type: standalone
core_classification: other
source: "https://github.com/habib256/pom2"
upstream: "https://github.com/habib256/pom2"
profiled_date: "2026-09-14"
source_commit: "78aa14c1135ea9eaf3e68f09d624fab788aab236"
core_version: "0.9.2"
profiled_date: "2026-09-17"
source_commit: "95cdbd1dc18b86a6b347dacd513503ac8ed73921"
core_version: "0.9.3"
display_name: "Apple - Apple II (POM2)"
cores:
- pom2
@@ -16,20 +16,21 @@ mode: standalone
notes: |
Apple ][, ][+, //e, //c and //c+ emulator by Arnaud Verhille, C++ with an
ImGui frontend, plus a browser build and a headless CLI. Nine machine
profiles (SystemProfile.cpp:32-300): Apple ][ Original, ][+, //e
profiles (src/SystemProfile.cpp:32-302): Apple ][ Original, ][+, //e
Unenhanced, //e Enhanced, //c, //c Plus, and PAL variants of the //e
Unenhanced, //e Enhanced (the default) and //c (Le Chat Mauve).
Every file is looked up by a relative name through findResource
(ResourcePaths.cpp:173-246): the per-user data directory
(src/ResourcePaths.cpp:178-251): the per-user data directory
(~/.local/share/POM2, ~/Library/Application Support/POM2,
%LOCALAPPDATA%\POM2), the executable directory, its parent,
../share/POM2, then the working directory and its two parents. The
first hit wins. Release packages ship the whole roms/ tree, the fonts and
the two photos (packaging/bundle.manifest).
%LOCALAPPDATA%\POM2) when it really is per-user, the executable
directory, its parent, ../share/POM2, the temp fallback data directory
otherwise, then the working directory and its two parents. The first hit
wins. Release packages ship the whole roms/ tree, the fonts and the two
photos (packaging/bundle.manifest).
Machine firmware is a probe chain per profile, first name found wins
(SystemProfile.cpp romProbeOrder, MainWindow_Slots.cpp:1458-1481):
(SystemProfile.cpp romProbeOrder, src/ProfileSwitch.cpp:113-133):
][ Original apple2o.rom, apple2.rom
][+ apple2p.rom, apple2.rom
//e Unenhanced apple2e_unenh.rom, 342-0135-b.64.rom, apple2e.rom
@@ -37,47 +38,60 @@ notes: |
//c apple2c-32Kv0.rom, apple2c-16K.rom, 3420033a.256
//c Plus apple2cp.rom, apple2c-plus.rom, apple2c-32Kv0.rom
With no candidate the machine runs on a $D000-$FFFF stub and the Welcome
panel opens (MainWindow.cpp:318-326). A first run with no //e image falls
back to the ][+ chain (MainWindow.cpp:223-236). Memory::loadAppleIIRom
(Memory.cpp:174-224) maps 12 KB at $D000, 16 KB at $C000, skips the 4 KB
pad of a 20 KB ][+ dump, and slices a 32 KB dump by profile: //e images
carry the firmware in the upper half, //c and //c+ images are two firmware
banks with bank 0 in the lower half (SystemProfile.cpp:432).
panel opens (src/MainWindow.cpp:323-331). A first run with no //e image
falls back to the ][+ chain (src/MainWindow.cpp:228-241).
Memory::loadAppleIIRom (src/Memory.cpp:173-236) maps 12 KB at $D000,
16 KB at $C000, skips the 4 KB pad of a 20 KB ][+ dump, and slices a
32 KB dump by profile: //e images carry the firmware in the upper half,
//c and //c+ images are two firmware banks with bank 0 in the lower half
(src/SystemProfile.cpp:429).
Character generators follow charRomProbeOrder per profile, or the locale
picked in the toolbar (CharRomCatalog.cpp:42-79, MainWindow_Slots.cpp:
1489-1505). Memory::loadCharRom accepts 2 KB, 4 KB and 8 KB dumps
(Memory.cpp:313-345); an 8 KB dump is two 4 KB banks, loaded as one bank
or kept dual-bank with annunciator 2 selecting the live set.
picked in the toolbar (src/CharRomCatalog.cpp:42-79,
src/ProfileSwitch.cpp:135-141). Memory::loadCharRom accepts 2 KB, 4 KB
and 8 KB dumps (src/Memory.cpp:324-357); an 8 KB dump is two 4 KB banks,
loaded as one bank or kept dual-bank with annunciator 2 selecting the
live set.
Peripheral ROMs are read when the card is plugged (SlotCardFactory.cpp).
Peripheral ROMs are read when the card is plugged (src/SlotCardFactory.cpp).
The Disk II carries the 341-0027-A boot PROM and the 16-sector P6
sequencer built in (DiskIICard.cpp:135-150). CFFA, Liron, Workstation and
the MC68705 mouse card leave the slot empty without their dump; Grappler+,
ThunderClock+ and TransWarp run a synthetic ROM instead. The catalogue
behind the ROM Status panel (RomCatalog.h) lists every name in probe
order with the size the loader enforces and, where POM2 vouches for a
dump, its CRC32; the panel hashes each present file
(RomStatus_ImGui.cpp:169-181, 306).
sequencer built in (src/DiskIICard.cpp:135-148). CFFA, Liron,
Workstation and the MC68705 mouse card leave the slot empty without
their dump; Grappler+, ThunderClock+ and TransWarp run a synthetic ROM
instead. The catalogue behind the ROM Status panel (src/RomCatalog.h)
lists every name in probe order with the size the loader enforces,
what a missing dump costs (degraded, card unavailable, unused) and,
where POM2 vouches for a dump, its CRC32; the panel hashes each present
file (src/RomStatus_ImGui.cpp:169-181, 311).
Help > Download missing ROMs (RomFetch.cpp:61-141) fetches 18 dumps with
curl from raw.githubusercontent.com/Abdess/retrobios and installs a
download only when its size, CRC32 and SHA-256 match the catalogue
(RomFetch.cpp:398-431); a present local file is re-checked with the same
gate (RomFetch.cpp:583-603). Unavailable in the browser build.
Help > Download missing ROMs (src/RomFetch.cpp:66-263) fetches 37 dumps
with curl from raw.githubusercontent.com/Abdess/retrobios, pinned to
HTTPS (src/RomFetch.cpp:694-710). Every entry carries the SHA-256 of the
dump POM2 ships in its own roms/ tree, eight a CRC32 as well; a download
is installed only when its size, CRC32 and SHA-256 match
(src/RomFetch.cpp:591-627). A present file is re-checked with the same
gate and, when it is not the catalogued dump, replaced after a copy to
roms-replaced/ under the data directory (src/RomFetch.cpp:541-589,
795-815, 824-842); a 12 KB apple2p.rom is the one alternate size kept as
is. Two entries are members of MAME romsets, read in-process
(src/ZipMember.cpp): apple2e_unenh.rom is 342-0135-b.64 then
342-0134-a.64 from apple2e.zip, mouse_341-0270-c.bin is 341-0270-c.4b
from a2mouse.zip. Downloads land in the per-user data directory's roms/
(src/RomFetch.cpp:763-783). Unavailable in the browser build
(src/RomFetch.cpp:884-887).
The floppy mechanical sounds are MAME's samples/floppy set, read from
roms/floppy_samples/ as two banks of ten WAV files prefixed 525_ and 35_
(FloppySoundDevice.cpp:80-118, MainWindow.cpp:335-348); a missing sample
is logged and the drive stays silent.
(src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353); a
missing sample is logged and the drive stays silent.
Media named by the code are not firmware and are not listed here: the
browser demo boots floppyemu/DIX.po (wasm/shell.html:89) or, when the
shell passes no disk, floppyemu/Total Replay v6.1.hdv (main.cpp:281-285);
the headless CLI mounts disks_5.4/dos33_master.dsk by default
(pom2_headless.cpp:263). Disk, tape and hard-disk images are browsed
from disks_5.4/, disks_3.5/, hdv/, floppyemu/, cassettes/ and
prodos_folder/ next to the executable.
shell passes no disk, floppyemu/Total Replay v6.1.hdv
(src/main.cpp:282-286); the headless CLI mounts
disks_5.4/dos33_master.dsk by default (src/pom2_headless.cpp:262-264).
Disk, tape and hard-disk images are browsed from disks_5.4/, disks_3.5/,
hdv/, floppyemu/, cassettes/ and prodos_folder/ next to the executable.
files:
- name: "apple2o.rom"
@@ -89,7 +103,7 @@ files:
sha256: "68d9db6bb4c305d40c3fa89fa0f2d7b7f71516a9431e3138859f23bc5bddb2d1"
sha1: "78008be557f643e956a106121bcc182c0fb9ea6d"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:174-224, src/RomFetch.cpp:61-63"
source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:173-236, src/RomFetch.cpp:70-73"
note: "First candidate of the Apple ][ Original profile; apple2.rom is probed next."
- name: "apple2.rom"
path: "roms/apple2.rom"
@@ -100,18 +114,20 @@ files:
sha256: "fc3e9d41e9428534a883df5aa10eb55b73ea53d2fcbb3ee4f39bed1b07a82905"
sha1: "33a24f5489ba9195b44be77d9afb2252594cb5c7"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/MainWindow_Slots.cpp:1470-1477, src/RomFetch.cpp:65-67"
source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/ProfileSwitch.cpp:121-128, src/RomFetch.cpp:74-81"
note: "Probed after the profile image for the ][ and ][+ profiles. When it resolves in place of that image the loader logs that the ROM identity may not match the machine."
- name: "apple2p.rom"
path: "roms/apple2p.rom"
description: "Apple ][+ Autostart monitor and Applesoft, 4 KB pad then $C000-$FFFF"
required: false
priority: 1
size: 20480
size_options: [12288, 20480]
sha256: "92c4bef609920842ea472d21b661a0d35dbda6cd90963b8b734a205e22d84108"
sha1: "29a53f3bb158b160433369e8e4a1d7cd5bf68ac6"
validation: [size]
source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:209-219, src/RomFetch.cpp:69-79"
note: "First candidate of the ][+ profile and of the first-run fallback (MainWindow.cpp:234). The loader drops the leading 4 KB of a 20 KB dump. The fetcher builds a 12 KB image from the six 2 KB chips of the MAME apple2p set and accepts either size as present; it carries no digest for this file."
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:221-231, src/RomFetch.cpp:82-94, src/RomFetch.cpp:824-835"
note: "First candidate of the ][+ profile and of the first-run fallback (src/MainWindow.cpp:237-241). The loader drops the leading 4 KB of the 20 KB dump. The fetch gate names that dump; a 12 KB six-chip image already on disk is kept as present without a digest check."
- name: "apple2e.rom"
path: "roms/apple2e.rom"
description: "Apple //e Enhanced firmware, 32 KB dump with the 16 KB firmware in the upper half"
@@ -121,7 +137,7 @@ files:
sha256: "c17bc38c75ba96c33a30c688a1efd60144811073423533fe7f8453cdd9457aab"
sha1: "d756eba578a6c5a4807510dfee30ee585c63755e"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:239-251, src/Memory.cpp:189-201, src/Memory.cpp:220-222, src/MainWindow.cpp:223-226, src/RomFetch.cpp:80-83"
source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:241-253, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/MainWindow.cpp:228-231, src/RomFetch.cpp:95-98"
note: "Sole candidate of the //e Enhanced profiles, NTSC and PAL, PAL being the default machine. Also the last fallback of the //e Unenhanced chain."
- name: "apple2e_unenh.rom"
path: "roms/apple2e_unenh.rom"
@@ -133,8 +149,8 @@ files:
sha256: "1fb812584c6633fa16b77b20915986ed1178d1e6fc07a647f7ee8d4e6ab9d40b"
sha1: "61fa9254628e5bb7236fb474006116d67684d747"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:265-277, src/RomFetch.cpp:84-87"
note: "First candidate of the //e Unenhanced profiles; 342-0135-b.64.rom is probed second, apple2e.rom third."
source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:267-279, src/RomFetch.cpp:51-56, src/RomFetch.cpp:99-107"
note: "First candidate of the //e Unenhanced profiles; 342-0135-b.64.rom is probed second, apple2e.rom third. The fetcher assembles it from the two 8 KB chips of the MAME apple2e set, 342-0135-b.64 then 342-0134-a.64."
- name: "apple2c-32Kv0.rom"
path: "roms/apple2c-32Kv0.rom"
description: "Apple //c two-bank firmware, bank 0 in the lower 16 KB"
@@ -142,8 +158,10 @@ files:
priority: 1
size: 32768
crc32: "323952d1"
sha256: "d65bbf97058b9cdce8eaebf74124048e3b4e42dca1bd42be316747bbc27dc124"
sha1: "fb0d644aafaff1352d0816bc8494f6c9913809d5"
source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-438, src/Memory.cpp:189-201, src/Memory.cpp:220-222"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/RomFetch.cpp:108-111"
note: "First candidate of the //c and //c PAL profiles, third of the //c Plus chain. Bank 0 is mapped at reset, the $C028 ROMBANK switch selects the other. Identical to 3420033a.256 with its first 256 bytes zeroed."
- name: "apple2c-16K.rom"
path: "roms/apple2c-16K.rom"
@@ -152,8 +170,10 @@ files:
priority: 2
size: 16384
crc32: "f0edaa1b"
sha256: "3ca1c8a27bf111aa0f4dc9372c5e6404457adb9a458ce32ae4b03a7e989e0c76"
sha1: "1a9b8aca5e32bb702ddb7791daddd60a89655729"
source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:207-208"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:219-220, src/RomFetch.cpp:112-115"
note: "Second candidate of the //c chain, loaded at $C000."
- name: "3420033a.256"
path: "roms/3420033a.256"
@@ -162,8 +182,10 @@ files:
priority: 3
size: 32768
crc32: "c8b979b3"
sha256: "678d5c9d374664d2ee94ba9c9564d26a917b31116b07c46df30a3e82c640885b"
sha1: "10767e96cc17bad0970afda3a4146564e6272ba1"
source_ref: "src/SystemProfile.cpp:142-143"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:142-143, src/RomFetch.cpp:116-119"
note: "Third candidate of the //c chain."
- name: "apple2cp.rom"
path: "roms/apple2cp.rom"
@@ -173,8 +195,10 @@ files:
aliases: ["apple2c-plus.rom"]
size: 32768
crc32: "0b996420"
sha256: "5a62070f6a0b07784681d4df4bf2ce88b2809bec0cbaa65fcb963e804ed60374"
sha1: "1a27ae26966bbafd825d08ad1a24742d3e33557c"
source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-438"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/RomFetch.cpp:120-123"
note: "First candidate of the //c Plus profile; apple2c-plus.rom is probed second and apple2c-32Kv0.rom third."
- name: "apple2_char.rom"
path: "roms/apple2_char.rom"
@@ -185,7 +209,7 @@ files:
sha256: "08f5d22230481019844492dde0a29a018cb193712a9e4a43770a3870608f28de"
sha1: "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:90-93, src/Memory.cpp:313-345"
source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:126-129, src/Memory.cpp:324-357"
note: "Sole candidate of the ][ and ][+ profiles and the last fallback of every //e-class chain."
- name: "apple2e_char.rom"
path: "roms/apple2e_char.rom"
@@ -197,8 +221,8 @@ files:
sha256: "52c3b87900ac939f6525402cab1ccfd8f8259290fc6df54da48fb4c98ae3ed0f"
sha1: "b2b5d87f52693817fc747df087a4aa1ddcdb1f10"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:94-97, src/Memory.cpp:313-345"
note: "First candidate of the //e Enhanced, //c and //c Plus profiles; the same dump answers to apple2e_char_us.rom in the locale picker."
source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:130-142, src/Memory.cpp:324-357"
note: "First candidate of the //e Enhanced, //c and //c Plus profiles; the same dump answers to apple2e_char_us.rom in the locale picker, and the fetcher writes both names."
- name: "apple2e_char_us_unenh.rom"
path: "roms/apple2e_char_us_unenh.rom"
description: "Apple //e Unenhanced character generator 342-0133-A, 4 KB"
@@ -209,8 +233,8 @@ files:
sha256: "ed5bdd4afa509134e85f1d020685af7ff50e279226eb869a17825b471cc1634c"
sha1: "58ad0008df72896a18601e090ee0d58155ffa5be"
validation: [size, sha256]
source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:98-101, src/Memory.cpp:313-345"
note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom; the same dump ships under both names."
source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:143-150, src/Memory.cpp:324-357"
note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom; the same dump ships under both names and the fetcher writes both."
- name: "apple2e_char_fr.rom"
path: "roms/apple2e_char_fr.rom"
description: "Apple //e French character generator, 4 KB"
@@ -218,19 +242,21 @@ files:
aliases: ["apple2e_char_frca_unenh.rom"]
size: 4096
crc32: "ab0be706"
sha256: "52d8e46b487a617c288caaf12ab7ad6cb81030b6ab92419f9a2e19c43d765566"
sha1: "42afb02aab4146f781ac52803a2733adc4da834e"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A."
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:153-156, src/Memory.cpp:324-357"
note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A, a name the fetcher does not serve."
- name: "apple2e_char_frca.rom"
path: "roms/apple2e_char_frca.rom"
description: "Apple //e French Canadian Enhanced character generator, 4 KB"
required: false
size: 4096
crc32: "2c8fc403"
sha256: "56479cbec4767651c62a4d0f61e6ed103395216f2b86eddba74d85495dd71cc4"
sha1: "4043e0808af8be096660827445e41149d16c5c85"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:157-160, src/Memory.cpp:324-357"
note: "Locale picker entry; equals the low bank of 342-0274-a.e9."
- name: "apple2e_char_uk.rom"
path: "roms/apple2e_char_uk.rom"
@@ -238,9 +264,10 @@ files:
required: false
size: 4096
crc32: "dda11653"
sha256: "d55bd5391485cd78c68c71408f09bd088e82a73d179a0a25820067a0c1554acd"
sha1: "d19c2e2cc12b27d77edc403d5d0701186a4ed988"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:161-164, src/Memory.cpp:324-357"
note: "Locale picker entry."
- name: "apple2e_char_uk_unenh.rom"
path: "roms/apple2e_char_uk_unenh.rom"
@@ -248,9 +275,10 @@ files:
required: false
size: 4096
crc32: "7a9a91ef"
sha256: "f2199fbfb473e98a8c3fb7e7c3312faaf76b4b010b02c655b662e5f87dc997f3"
sha1: "6ca9767e0f47f642d1caab6ed41b8f58c58bb9eb"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:165-168, src/Memory.cpp:324-357"
note: "Locale picker entry."
- name: "apple2e_char_de.rom"
path: "roms/apple2e_char_de.rom"
@@ -258,9 +286,10 @@ files:
required: false
size: 4096
crc32: "0d72f153"
sha256: "b92576b4fa994384501078ff99963b53cfa98eff4bb641eb61649d484a469315"
sha1: "a7fd75ae8611572b0b4d99ad54562014b879dbbf"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:169-172, src/Memory.cpp:324-357"
note: "Locale picker entry."
- name: "apple2e_char_de_improved.rom"
path: "roms/apple2e_char_de_improved.rom"
@@ -268,9 +297,10 @@ files:
required: false
size: 4096
crc32: "d345d332"
sha256: "0e32ab131e3932fc61c0a5f0f5509b4c37ab8db6239027f5955d47feba56d39f"
sha1: "12ce44f02bd28c350e2b0723d94ab8d9066f8798"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:173-176, src/Memory.cpp:324-357"
note: "Locale picker entry."
- name: "342-0274-a.e9"
path: "roms/342-0274-a.e9"
@@ -278,9 +308,10 @@ files:
required: false
size: 8192
crc32: "8f342081"
sha256: "d4d29771658372c6ab5d18ff3bdab6b3b2b02b8de30ed6b021efb8a415192432"
sha1: "c81c1bbf237e70f8c3e5eef3c8fd5bd9b9f54d1e"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:73-76, src/CharRomCatalog.cpp:144-149, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:73-76, src/CharRomCatalog.cpp:144-149, src/RomFetch.cpp:177-182, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357"
note: "Locale picker entries select bank 0 or bank 1; loaded whole, both banks stay live and annunciator 2 picks the set."
- name: "apple2e_char_ft_blockascii.rom"
path: "roms/apple2e_char_ft_blockascii.rom"
@@ -288,9 +319,10 @@ files:
required: false
size: 8192
crc32: "1eae3944"
sha256: "c69c8e1eb26923c5df03d3507fdf86c5f768283a924a5fffdd80377cf2339321"
sha1: "f79815457437e50404f4f537d8aabe34bff3a220"
validation: [size]
source_ref: "src/CharRomCatalog.cpp:77-78, src/Memory.cpp:313-345"
validation: [size, sha256]
source_ref: "src/CharRomCatalog.cpp:77-78, src/RomFetch.cpp:183-187, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357"
note: "Locale picker entry loaded dual-bank: annunciator 2 flips between the text set and the block glyphs."
- name: "Videx Lower Case Chip ROM.bin"
path: "roms/Videx Lower Case Chip ROM.bin"
@@ -298,9 +330,10 @@ files:
required: false
size: 2048
crc32: "00f68076"
sha256: "6a516bcd96382597af7a498fb1da7547490c830db0f9d22d541fb065b9cd048b"
sha1: "447874fe0850c8add3fd5b13fa98f6648fe6f999"
validation: [size, crc32]
source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:143-148, src/RomStatus_ImGui.cpp:306"
validation: [size, crc32, sha256]
source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:166-172, src/RomFetch.cpp:188-192, src/RomStatus_ImGui.cpp:311"
note: "Locale picker entry for the ][ and ][+ profiles; without it the picker keeps the stock uppercase set."
- name: "disk2.rom"
path: "roms/disk2.rom"
@@ -311,7 +344,7 @@ files:
sha256: "de1e3e035878bab43d0af8fe38f5839c527e9548647036598ee6fe7ec74d2a7d"
sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:135-140, src/DiskIICard.cpp:150-172, src/RomFetch.cpp:104-107"
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:135-140, src/DiskIICard.cpp:150-173, src/RomFetch.cpp:195-198"
note: "The card carries the same PROM built in; the file replaces it when present."
- name: "diskii_p6.rom"
path: "roms/diskii_p6.rom"
@@ -322,7 +355,7 @@ files:
sha256: "e5e30615040567c1e7a2d21599681f8dac820edbdcda177b816a64d74b3a12f2"
sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:141-148, src/DiskIICard.cpp:175-197, src/DiskIICard.cpp:245-262, src/RomFetch.cpp:108-111"
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:141-148, src/DiskIICard.cpp:175-201, src/DiskIICard.cpp:250-262, src/RomFetch.cpp:199-202"
note: "Loading the file switches the bit-level LSS path on for every image; without it the legacy 32-cycle nibble gate serves non-WOZ images and the built-in PROM serves WOZ images."
- name: "disk2_13.rom"
path: "roms/disk2_13.rom"
@@ -332,8 +365,8 @@ files:
sha256: "2d2599521fc5763d4e8c308c2ee7c5c4d5c93785b8fb9a4f7d0381dfd5eb60b6"
sha1: "afd060e6f35faf3bb0146fa889fc787adf56330a"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:203-220, src/RomCatalog.h:79-81, src/RomFetch.cpp:112-115"
note: "13-sector disks mount but cannot boot without it."
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:203-220, src/DiskIICard.cpp:263-287, src/RomCatalog.h:90-93, src/RomFetch.cpp:203-206"
note: "A mounted 13-sector disk switches the card to this PROM at $Cn00 and forces the bit-level LSS; without it the disk mounts but cannot boot."
- name: "diskii_p6_13.rom"
path: "roms/diskii_p6_13.rom"
description: "Disk II 13-sector P6 logic state sequencer PROM 341-0010"
@@ -342,17 +375,18 @@ files:
sha256: "383c55f5333cbfde39dd41528186631e5aca2eddfec30716344f03b6a4d44655"
sha1: "e3d6d1c30653572b49ecc2dc54ce073978411a04"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:222-239, src/RomCatalog.h:82-84, src/RomFetch.cpp:116-119"
note: "Paired with disk2_13.rom; the card never switches to the 13-sector pair without both."
source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:222-239, src/DiskIICard.cpp:272-282, src/RomCatalog.h:94-97, src/RomFetch.cpp:207-210"
note: "Read into the card and not consumed: the 13-sector switch depends on disk2_13.rom alone, and the sequencer keeps running the 16-sector P6 on 13-sector disks."
- name: "cffa20eec02.bin"
path: "roms/cffa20eec02.bin"
description: "CFFA 2.0 firmware, 65C02 build"
required: false
size: 4096
crc32: "fb3726f8"
sha256: "a08cb25ad80054649ee5fcb620e01ed56f025acb28c753bc28dd187a1d149cab"
sha1: "080ff88f19de22328e162954ee2b51ee65f9d5cd"
validation: [size, crc32]
source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:103-106"
validation: [size, crc32, sha256]
source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:119-123, src/RomFetch.cpp:221-224"
note: "Preferred when the CPU is a 65C02, the 6502 build is the fallback; the slot stays empty when neither is found."
- name: "cffa20ee02.bin"
path: "roms/cffa20ee02.bin"
@@ -363,7 +397,7 @@ files:
sha256: "3d7f6918f9af3828f5a6299299a817df0d354ee62e547bc0238755de66162a88"
sha1: "d600692ed9626668233a22a48236af639410cb7b"
validation: [size, crc32, sha256]
source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:107-110, src/RomFetch.cpp:122-126"
source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:124-129, src/RomFetch.cpp:217-220"
note: "Preferred on an NMOS 6502, fallback for a 65C02."
- name: "mouse_341-0270-c.bin"
path: "roms/mouse_341-0270-c.bin"
@@ -373,8 +407,8 @@ files:
sha256: "7f8e50c0e8a409991264201f9300f109b872b68e09c43f3e6c26af35fd8b89af"
sha1: "3a9d881a8a8d30f55b9719aceebbcf717f829d6f"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:51-83, src/SlotCardFactory.cpp:232-247, src/MouseCard.cpp:115-149, src/MouseCardAppleWin.cpp:87-100, src/RomFetch.cpp:127-130"
note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only."
source_ref: "src/SlotCardFactory.cpp:51-83, src/SlotCardFactory.cpp:232-247, src/MouseCard.cpp:119-153, src/MouseCardAppleWin.cpp:87-100, src/RomFetch.cpp:241-246"
note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only. The fetcher extracts it from the MAME a2mouse set as 341-0270-c.4b."
- name: "mouse_341-0269.bin"
path: "roms/mouse_341-0269.bin"
description: "AppleMouse II card MC68705P3 MCU mask ROM 341-0269"
@@ -383,7 +417,7 @@ files:
sha256: "66480812edad5f6bd70349949cf8bd8fbafee2dc8bf396541d4e78bac2629ec0"
sha1: "3a2baa6648efe4456d3ec3721216e57c64f7acfc"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:51-83, src/MouseCard.cpp:146-149, src/M68705P3.cpp:85-104, src/RomFetch.cpp:131-134"
source_ref: "src/SlotCardFactory.cpp:51-83, src/MouseCard.cpp:150-153, src/M68705P3.cpp:85-104, src/RomFetch.cpp:237-240"
note: "The MC68705 mouse card leaves its slot empty without it."
- name: "grappler_plus.bin"
path: "roms/grappler_plus.bin"
@@ -394,7 +428,7 @@ files:
sha256: "9be4dea7722ad8928aee64c2ae708f365a6d66c50a63bff8a3c1a4e7596d44c6"
sha1: "829072cc19a58b24d36c2af972abaad6f9ba35d9"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:147-166, src/GrapplerCard.cpp:29-52, src/RomCatalog.h:113-118, src/RomFetch.cpp:135-138"
source_ref: "src/SlotCardFactory.cpp:147-166, src/GrapplerCard.cpp:29-52, src/RomCatalog.h:132-138, src/RomFetch.cpp:233-236"
note: "Without it the card runs a stub ROM: PR#n prints, the graphics dump commands are absent."
- name: "ae_transwarp_1.4.bin"
path: "roms/ae_transwarp_1.4.bin"
@@ -403,28 +437,32 @@ files:
aliases: ["ae transwarp rom v1.4.bin"]
size: 4096
crc32: "afe37f55"
sha256: "bcbb1a3bab083b0c2988b502f5e024ff4346fab5dbf09276b32724693bcbd0e9"
sha1: "7b75534e7895e04859a0b1337801c6eeb0cef52a"
validation: [size, crc32]
source_ref: "src/TranswarpCard.h:166, src/TranswarpCard.cpp:200-218, src/RomCatalog.h:119-125"
note: "Not shipped by POM2. The card accelerates without it and only shadows $F000-$FFFF with the speed-corrected monitor when the dump is present."
validation: [size, crc32, sha256]
source_ref: "src/TranswarpCard.h:167, src/TranswarpCard.cpp:213-231, src/RomCatalog.h:139-146, src/RomFetch.cpp:229-232"
note: "Shipped in roms/ since v0.9.3. The card accelerates without it and only shadows $F000-$FFFF with the speed-corrected monitor when the dump is present; the shadow steps aside for a main ROM reload and covers the new firmware."
- name: "thunderclock_u9_v1.3.bin"
path: "roms/thunderclock_u9_v1.3.bin"
description: "Thunderware ThunderClock+ slot ROM rev 1.3, U9"
required: false
aliases: ["thunderclock_u9.bin", "thunderclock.rom", "Thunderware_REV_1.3_ROM_U9.bin"]
size: 2048
size_options: [256, 2048]
sha256: "ecca793179427fdd193373080bf23e49a95743bd7b5e0b218c747663938b6c03"
sha1: "60f434f5325899d7ea257a6e56e6f53eae65146a"
validation: [size]
source_ref: "src/ClockCard.cpp:469-524, src/RomCatalog.h:150-160"
note: "A 2 KB dump supplies the $C800 expansion ROM as well. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place."
validation: [size, sha256]
source_ref: "src/ClockCard.cpp:469-530, src/RomCatalog.h:174-184, src/RomFetch.cpp:225-228"
note: "The card loads a 256-byte slot ROM or the 2 KB chip, which supplies the $C800 expansion ROM as well; the fetch gate names the 2 KB dump and replaces a 256-byte file. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place."
- name: "liron.rom"
path: "roms/liron.rom"
description: "Apple Liron SmartPort controller firmware, 4 KB"
required: false
size: 4096
sha256: "42c1ae66c6bec932669239599eb8989a5364752d56fa5c8997bb23d8dfc0b657"
sha1: "fa94ecc2aa23f336f7da9e18bc8f4a6cfbb4ea60"
validation: [size]
source_ref: "src/SlotCardFactory.cpp:194-220, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:87-90"
validation: [size, sha256]
source_ref: "src/SlotCardFactory.cpp:194-220, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:100-104, src/RomFetch.cpp:213-216"
note: "The Liron card refuses to plug without it. The SmartPort 3.5 card loads it on machines with physical slots and otherwise presents a synthetic identity."
- name: "341-0358-A.bin"
path: "roms/341-0358-A.bin"
@@ -433,9 +471,10 @@ files:
aliases: ["341-0358-a.bin"]
size: 65536
crc32: "63819dcb"
sha256: "ce785b913b9fcec6db0fab89b2d94f07fcd07664a822531dcbba3a5ca70ca3bf"
sha1: "59c8e8c88bac5c31ada1306b412edfcf5912a720"
validation: [size, crc32]
source_ref: "src/SlotCardFactory.cpp:169-192, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:133-142"
validation: [size, crc32, sha256]
source_ref: "src/SlotCardFactory.cpp:169-192, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:156-164, src/RomFetch.cpp:253-256"
note: "The Workstation card leaves its slot empty without it; the card runs its own 65C02 on the upper 32 KB."
- name: "341-0438-a.bin"
path: "roms/341-0438-a.bin"
@@ -443,9 +482,10 @@ files:
required: false
size: 32768
crc32: "c73ff25b"
sha256: "084587835c1d2c92f5708a9745fdd43ba32136fcdb861a12ee7d690de22dc172"
sha1: "440c3f84176c7b9f542da0b6ddf4fb13ec326c46"
validation: [size, crc32, sha256]
source_ref: "src/RomCatalog.h:91-96, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:139-141"
source_ref: "src/RomCatalog.h:105-111, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:249-252"
note: "No card reads it; the ROM Status panel and the fetch gate check it."
- name: "342-0326-a.f12"
path: "roms/342-0326-a.f12"
@@ -453,10 +493,11 @@ files:
required: false
size: 2048
crc32: "f04970a9"
sha256: "4ae7ff693a486b155a70a8833047b3d4363464dace6760ed64bfb68db233ed4b"
sha1: "806a602195c18ffec637c03b6bb3405188b0dc1e"
validation: [size, crc32]
source_ref: "src/RomCatalog.h:97-102, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:306"
note: "Host keys are mapped directly, no keyboard decode ROM is emulated; the ROM Status panel checks the file only."
validation: [size, crc32, sha256]
source_ref: "src/RomCatalog.h:112-118, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:311, src/RomFetch.cpp:257-260"
note: "Host keys are mapped directly, no keyboard decode ROM is emulated; the ROM Status panel and the fetch gate check the file only."
- name: "525_seek_2ms.wav"
path: "roms/floppy_samples/525_seek_2ms.wav"
description: "MAME floppy sample, 5.25 inch drive, 2 ms head seek"
@@ -464,7 +505,7 @@ files:
required: false
size: 5336
sha1: "2d046a880476218685ed738fe8c8381962afd74a"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent."
- name: "525_seek_6ms.wav"
path: "roms/floppy_samples/525_seek_6ms.wav"
@@ -473,7 +514,7 @@ files:
required: false
size: 14860
sha1: "6f698055fa6e9da6c5ae3fd6fb05de76b92a45a9"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_seek_12ms.wav"
path: "roms/floppy_samples/525_seek_12ms.wav"
description: "MAME floppy sample, 5.25 inch drive, 12 ms head seek"
@@ -481,7 +522,7 @@ files:
required: false
size: 22764
sha1: "fbbbb5e8724c076d194e66a4443d299d54a8efd6"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_seek_20ms.wav"
path: "roms/floppy_samples/525_seek_20ms.wav"
description: "MAME floppy sample, 5.25 inch drive, 20 ms head seek"
@@ -489,7 +530,7 @@ files:
required: false
size: 30060
sha1: "b6cd14944454c743861196edb4fcab1cc9b586d4"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_spin_empty.wav"
path: "roms/floppy_samples/525_spin_empty.wav"
description: "MAME floppy sample, 5.25 inch drive, motor running, no disk"
@@ -497,7 +538,7 @@ files:
required: false
size: 8864
sha1: "4b13701d9a7f8ab0f0827f17ba80b5c32b4e0fa7"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_spin_loaded.wav"
path: "roms/floppy_samples/525_spin_loaded.wav"
description: "MAME floppy sample, 5.25 inch drive, motor running, disk loaded"
@@ -505,7 +546,7 @@ files:
required: false
size: 17708
sha1: "875f90538a3ff5db863ad4c384e1808841ddea9b"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_spin_start_empty.wav"
path: "roms/floppy_samples/525_spin_start_empty.wav"
description: "MAME floppy sample, 5.25 inch drive, motor start, no disk"
@@ -513,7 +554,7 @@ files:
required: false
size: 11180
sha1: "b87d89c4b46c36dd78dec3dc5170ca61501e7cd9"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_spin_start_loaded.wav"
path: "roms/floppy_samples/525_spin_start_loaded.wav"
description: "MAME floppy sample, 5.25 inch drive, motor start, disk loaded"
@@ -521,7 +562,7 @@ files:
required: false
size: 17708
sha1: "510476098848e2b5cdfe9f1608f8dfa3207fe9b4"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_spin_end.wav"
path: "roms/floppy_samples/525_spin_end.wav"
description: "MAME floppy sample, 5.25 inch drive, motor stop"
@@ -529,7 +570,7 @@ files:
required: false
size: 8864
sha1: "f8d9b94c4d92d35d9ffb1117b693fc74a93f613f"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "525_step_1_1.wav"
path: "roms/floppy_samples/525_step_1_1.wav"
description: "MAME floppy sample, 5.25 inch drive, single track step"
@@ -537,7 +578,7 @@ files:
required: false
size: 6628
sha1: "669ee98fb9fac4371c72ed0b60be1bc8470bc7f8"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_seek_2ms.wav"
path: "roms/floppy_samples/35_seek_2ms.wav"
description: "MAME floppy sample, 3.5 inch drive, 2 ms head seek"
@@ -545,7 +586,7 @@ files:
required: false
size: 7450
sha1: "55caafbd19486b8d517e4b33a6fa65250df55e25"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent."
- name: "35_seek_6ms.wav"
path: "roms/floppy_samples/35_seek_6ms.wav"
@@ -554,7 +595,7 @@ files:
required: false
size: 22230
sha1: "87e5dec269e67497681c15849777ebfc301131c1"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_seek_12ms.wav"
path: "roms/floppy_samples/35_seek_12ms.wav"
description: "MAME floppy sample, 3.5 inch drive, 12 ms head seek"
@@ -562,7 +603,7 @@ files:
required: false
size: 26540
sha1: "c6b34fc61496943134ac45cc836a24e743caf794"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_seek_20ms.wav"
path: "roms/floppy_samples/35_seek_20ms.wav"
description: "MAME floppy sample, 3.5 inch drive, 20 ms head seek"
@@ -570,7 +611,7 @@ files:
required: false
size: 44144
sha1: "b2fe4c3a4185146a7d11483d92d4412dd79dbc78"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_spin_empty.wav"
path: "roms/floppy_samples/35_spin_empty.wav"
description: "MAME floppy sample, 3.5 inch drive, motor running, no disk"
@@ -578,7 +619,7 @@ files:
required: false
size: 17708
sha1: "db04fc097bdd0411cff232f57525ded491b48c6c"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_spin_loaded.wav"
path: "roms/floppy_samples/35_spin_loaded.wav"
description: "MAME floppy sample, 3.5 inch drive, motor running, disk loaded"
@@ -586,7 +627,7 @@ files:
required: false
size: 17708
sha1: "96ce04a5b02af0da6d311f06fc4906a3cf71c78f"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_spin_start_empty.wav"
path: "roms/floppy_samples/35_spin_start_empty.wav"
description: "MAME floppy sample, 3.5 inch drive, motor start, no disk"
@@ -594,7 +635,7 @@ files:
required: false
size: 17708
sha1: "af770fd9261a8efee23d66cd39b27be7b2ab7853"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_spin_start_loaded.wav"
path: "roms/floppy_samples/35_spin_start_loaded.wav"
description: "MAME floppy sample, 3.5 inch drive, motor start, disk loaded"
@@ -602,7 +643,7 @@ files:
required: false
size: 35308
sha1: "c82b1714378bf2507ed86dea1e9fe743c380abab"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_spin_end.wav"
path: "roms/floppy_samples/35_spin_end.wav"
description: "MAME floppy sample, 3.5 inch drive, motor stop"
@@ -610,7 +651,7 @@ files:
required: false
size: 17684
sha1: "a8901b692de15eb7a9052f61283f0e7a2b63d67d"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "35_step_1_1.wav"
path: "roms/floppy_samples/35_step_1_1.wav"
description: "MAME floppy sample, 3.5 inch drive, single track step"
@@ -618,7 +659,7 @@ files:
required: false
size: 6878
sha1: "40d756d0cb5f7998ca26ac1de142a96a83fa2b97"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348"
source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353"
- name: "DejaVuSans.ttf"
path: "fonts/DejaVuSans.ttf"
description: "DejaVu Sans, the frontend text font"
@@ -628,7 +669,7 @@ files:
unsourceable: "host program component shipped inside every POM2 package, not emulation data"
size: 759720
sha1: "3061cf7af25793a655a1ff5a509385f3620f3eb3"
source_ref: "src/main.cpp:522-535"
source_ref: "src/main.cpp:530-543"
note: "Falls back to the system DejaVu, Arial Unicode or Segoe UI, then to the ImGui bitmap font."
- name: "fa-solid-900.ttf"
path: "fonts/fa-solid-900.ttf"
@@ -639,7 +680,7 @@ files:
unsourceable: "host program component shipped inside every POM2 package, not emulation data"
size: 426112
sha1: "0c8c9706abc0116f08b66d11a69da6aa9ef7e6bf"
source_ref: "src/main.cpp:582-600"
source_ref: "src/main.cpp:590-608"
note: "Without it every icon renders as an empty box."
- name: "Apple_II_plus.jpg"
path: "pic/Apple_II_plus.jpg"
+33 -14
View File
@@ -3,8 +3,9 @@ type: libretro
core_classification: community_fork
source: "https://github.com/libretro/RACE"
upstream: "https://github.com/8bitpsp/race"
profiled_date: "2026-03-25"
profiled_date: "2026-09-17"
source_commit: "c7810dd7f172827bfa2004813bc000b13786636b"
upstream_commit: "065db2eb614d4414ed49a1a9e241022450bb844d"
core_version: "v2.16"
display_name: "SNK - Neo Geo Pocket / Color (RACE)"
cores: [race]
@@ -15,15 +16,19 @@ notes: |
Judge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified
by theelf, then adapted for libretro.
No external BIOS files are required. The upstream versions (GP2X, PSP) support
optional loading of NPBIOS.BIN, but the libretro port disabled it entirely
with #if 0 in race-memory.c:loadBIOS(). The comment explains: "Using a real
bios file causes nothing but issues."
No external BIOS files are required. The upstream versions (GP2X, PSP) load
NPBIOS.BIN optionally; the libretro port's loadBIOS() returns 0
unconditionally, and the disabled file-reading body it once carried under
#if 0 was removed in June 2026, so the port no longer names the file. The
core never queries the system directory: the only files it opens are the
ROM and the .ngf flash save in the save directory.
The core uses a software HLE approach: a compiled-in koyote_bin RAM dump
(post-boot console state) is copied into mainram at startup, a fake SWI jump
table is built at cpurom[0xE000], and doBios() in tlcs900h.c handles 33 BIOS
functions in software. The Z80 sound CPU is emulated via cz80 or DrZ80.
The core boots through a software HLE path: a compiled-in koyote_bin RAM
snapshot (12 KB of main RAM captured after a real BIOS has booted) is copied
into mainram, a fake SWI jump table is built at cpurom[0xE000], doBios() in
tlcs900h.c answers 14 BIOS call numbers in software, and the system font
is an embedded table in ngpBios.c. The Z80 sound CPU is emulated via cz80
or DrZ80.
files: []
@@ -33,10 +38,24 @@ analysis:
size: 65536 # 64 KB (0x10000)
loaded_by: "race-memory.c:loadBIOS()"
status: disabled
source_ref: "race-memory.c:337-361"
source_ref: "race-memory.c:330-340, race-memory.c:354-357"
upstream_status: optional
upstream_ref: "memory.cpp:346-365 (8bitpsp/race)"
upstream_ref: "memory.cpp:346-366 (8bitpsp/race)"
note: |
loadBIOS() is wrapped in #if 0 and always returns 0 in the libretro port.
In upstream (8bitpsp/race, alekmaul/race), the function is live and loads
NPBIOS.BIN optionally, falling back to HLE if not found.
loadBIOS() returns 0 unconditionally in the libretro port, so mem_init()
always takes the HLE branch. The #if 0 body that opened NPBIOS.BIN with
filestream_open() was dropped by commit 0e4783a on 2026-06-15; the
libretro tree no longer contains the name. In upstream, loadBIOS() opens
NPBIOS.BIN from the working directory with fopen(), requires exactly
0x10000 bytes, and falls back to HLE when the file is absent or short.
hle:
ram_snapshot: "koyote_bin.h:1-6"
ram_snapshot_size: 12288
ram_snapshot_copy: "race-memory.c:406-407"
jump_table: "race-memory.c:360-369"
interrupt_vectors: "race-memory.c:318-328"
bios_calls: "tlcs900h.c:5837-5921"
bios_call_count: 14
system_font: "ngpBios.c:15"
filesystem_access: "ROM at main.c:266-268, .ngf flash save at flash.c:231-233 and flash.c:344-346"
system_directory_used: false
+39 -33
View File
@@ -3,9 +3,9 @@ type: standalone
core_classification: game_engine
source: "https://github.com/ruffle-rs/ruffle"
upstream: "https://github.com/ruffle-rs/ruffle"
profiled_date: "2026-08-08"
source_commit: "1636c780671f5f751504240c462524ae6cfcc4bb"
core_version: "0.5.0"
profiled_date: "2026-09-17"
source_commit: "74ade97342205ac55d264f2ceb1e642573a21d48"
core_version: "0.6.0"
display_name: "Adobe Flash (Ruffle)"
cores:
- ruffle
@@ -16,18 +16,20 @@ mode: standalone
notes: |
Flash Player and Adobe AIR runtime written in Rust, playing SWF files of any
ActionScript version, as a desktop binary or as a WebAssembly browser build.
Distribution is by nightly build: Batocera compiles the nightly-2026-01-31 tag
and installs ruffle_desktop as ruffle, RetroDECK pulls the rs.ruffle.Ruffle
Flathub build. ES-DE runs it as `ruffle --fullscreen <rom>`, Batocera as
`ruffle <rom>`, RetroBat as `ruffle.exe --graphics <renderer> --force-align
-q <quality> <rom>`, RetroDECK as `ruffle --graphics vulkan --config
/var/data/ruffle --save-directory <saves>/ruffle <rom>`. The ActionScript
class library is compiled by build_playerglobal into playerglobal_avm1.swf and
playerglobal_avm2.swf and linked into the binary from OUT_DIR
(core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:548), so startup reads
nothing. Locale texts, wgsl shaders, the window icon and the OpenH264 license
are embedded the same way (desktop/src/gui/locale.rs:7-12,
desktop/src/app.rs:464, render/wgpu/src/shaders.rs:28-76).
Versioned releases sit next to the nightlies: Batocera 43.1 compiles the
nightly-2026-01-31 tag and installs ruffle_desktop as ruffle, RetroDECK pulls
the rs.ruffle.Ruffle Flathub build. ES-DE runs it as `ruffle --fullscreen
<rom>`, Batocera as `ruffle <rom>`, RetroBat as `ruffle.exe --graphics
<renderer> --force-align -q <quality> <rom>`, RetroDECK as `ruffle --graphics
vulkan --config /var/data/ruffle --save-directory <saves>/ruffle <rom>`. The
ActionScript class library is compiled by build_playerglobal into
playerglobal_avm1.swf and playerglobal_avm2.swf and linked into the binary
from OUT_DIR (core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:548), so
startup reads nothing. Locale texts, wgsl shaders, the window icon and the
OpenH264 license are embedded the same way (desktop/src/gui/locale.rs:7-12,
desktop/src/app.rs:464, render/wgpu/src/shaders.rs:30-95,
desktop/src/gui/movie.rs:44,
desktop/src/gui/dialogs/preferences_dialog.rs:517).
H.264 video is the one external dependency. external_video is a default
feature and pulls ruffle_video_external with openh264
@@ -51,30 +53,34 @@ notes: |
Text uses system fonts. fontdb::Database::load_system_fonts() fills the
database at startup (desktop/src/app.rs:433-434), and both the Flash device
fonts and the egui menu bar resolve family names against it and take whatever
face the host answers with. How that face is read now depends on the renderer:
freetype joined the desktop default features, so on Linux it goes through
FreetypeFontRenderer, and the plain memory map of the file is the other branch
(desktop/src/backends/ui.rs:366-406,518-562,
desktop/src/gui/controller.rs:760-803). The families asked for are Times New
Roman, Arial, Courier New and their metric-compatible substitutes, plus the
CJK, Hebrew, Arabic and Thai faces (desktop/src/player.rs:361-412,
desktop/src/gui/controller.rs:639-711), and on Unix fontconfig sorts the
fallback chain (desktop/src/backends/ui.rs:363-376,536-550). No name, path,
size or hash is fixed anywhere. The compiled-in Noto Sans subset sits behind
the default_font feature, which the desktop build does not enable
(core/src/player.rs:84-85, core/Cargo.toml:82,95, desktop/Cargo.toml:22), so
an unmatched family leaves the run without that face rather than falling back
face the host answers with (desktop/src/backends/ui.rs:321-360,
desktop/src/gui/controller.rs:741-787). The face is memory-mapped and parsed
by Ruffle's own rasterizer unless preferences.toml sets device_font_renderer
to freetype, which routes Linux builds through FreetypeFontRenderer instead;
the freetype default feature only compiles that branch, the preference
selects it (desktop/src/backends/ui.rs:190-192,443-487,489-519,
desktop/src/preferences/read.rs:74-75, desktop/Cargo.toml:83). The families
asked for are Times New Roman, Arial, Courier New and their metric-compatible
substitutes, plus the CJK, Hebrew, Arabic and Thai faces
(desktop/src/player.rs:361-414, desktop/src/gui/controller.rs:620-694), and
on Unix fontconfig sorts the fallback chain
(desktop/src/backends/ui.rs:363-376,536-628). No name, path, size or hash is
fixed anywhere. The compiled-in Noto Sans subset sits behind the default_font
feature, which the web and exporter crates enable and the desktop build does
not (core/src/player.rs:84-85, core/Cargo.toml:82,95, web/Cargo.toml:63-65,
exporter/Cargo.toml:16, desktop/Cargo.toml:22), so on the desktop an
unmatched family leaves the run without that face rather than falling back
to a bundled one.
Files the player writes rather than expects: preferences.toml, bookmarks.toml
and recents.toml under --config, each defaulted when absent
(desktop/src/preferences.rs:54-96), .sol SharedObjects under --save-directory
(frontend-utils/src/backends/storage.rs:31-60), and the log file
(desktop/src/main.rs:156-166). ruffle-bundle.toml is the manifest inside a
.ruf bundle, which is content alongside the .swf rather than a runtime input
(frontend-utils/src/backends/storage.rs:31-60, desktop/src/cli.rs:129-130),
and the log file under <cache>/ruffle/log (desktop/src/main.rs:155-166).
ruffle-bundle.toml is the manifest inside a .ruf bundle, which is content
alongside the .swf rather than a runtime input
(frontend-utils/src/bundle/info.rs:11, frontend-utils/src/bundle.rs:42-53).
mms.cfg is not
implemented, the name appears only in an AVM2 error string
mms.cfg is not implemented, the name appears only in an AVM2 error string
(core/src/avm2/error_messages.rs:237).
files:
+120 -25
View File
@@ -1,16 +1,23 @@
emulator: Supermodel
type: standalone
source: https://github.com/trzy/Supermodel
upstream: https://github.com/trzy/Supermodel
profiled_date: "2026-03-26"
source_commit: "24d2ffcfc7f14229337f05f4920fe26b56633d9d"
core_version: "0.3a"
display_name: "Supermodel (Sega Model 3)"
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/trzy/Supermodel"
libretro: "https://git.libretro.com/libretro/Libretro-Supermodel"
upstream: "https://github.com/trzy/Supermodel"
profiled_date: "2026-09-17"
source_commit:
standalone: "24d2ffcfc7f14229337f05f4920fe26b56633d9d"
libretro: "9f0a51daf6cef6ec2a304538f18c6dbb4c4b9da2"
upstream_commit: "24d2ffcfc7f14229337f05f4920fe26b56633d9d"
core_version:
standalone: "0.3a-WIP"
libretro: "v0.3a-libretro"
display_name: "Sega - Model 3 (Supermodel)"
cores:
- supermodel
systems:
- sega-model3
mode: standalone
notes: |
Open-source Sega Model 3 arcade emulator by Bart Trzynadlowski (trzy) and
@@ -18,54 +25,142 @@ notes: |
2.0/2.1) including Real3D graphics, SCSP sound, DSB1/DSB2 MPEG music boards,
drive boards, and net board. Cross-platform (Windows, Linux, macOS).
The libretro core is Libretro-Supermodel, developed by sgiannop on top of
the 2019 libretro attempt and now held under the libretro organisation on
GitHub, mirrored at the same revision on git.libretro.com where the buildbot
pipeline lives (.gitlab-ci.yml). It carries the whole Supermodel tree with
its own OSD under Src/OSD/libretro and reports v0.3a-libretro. The older
libretro/supermodel repository on GitHub keeps the full trzy history and
received the same feature branch as its PR #2, but has no CI file and is
not what the buildbot publishes.
ref: Src/OSD/libretro/libretro.cpp:937-938, Docs/README.md:5-12
Uses MAME-compatible ROM sets loaded from ZIP archives. GameLoader identifies
games by CRC32 checksums defined in Config/Games.xml. Parent/child ROM set
games by CRC32 checksums defined in Games.xml. Parent/child ROM set
relationships exist between regional variants of the same game, not as shared
BIOS sets. No standalone BIOS or firmware files are loaded outside of game ZIPs.
The core routes the ZIP reads through the libretro VFS.
ref: Src/OSD/libretro/LibretroWrapper.cpp:828-832, Src/OSD/libretro/vfs_ioapi.cpp
Standalone: four data files of its own are read from the install tree, Config/
and Assets/ relative to the working directory on Windows and macOS. On Linux
the same relative directories are used when Config/ exists in the working
directory, otherwise ~/.supermodel/ when present, otherwise the XDG data and
config homes. Supermodel.ini is written from a compiled-in default when it is
absent and rewritten after interactive input configuration; NVRAM/<game>.nv
and Saves/<game>.st<slot> are written by the emulator itself.
ref: Src/OSD/Windows/FileSystemPath.cpp:28-49, Src/OSD/OSX/FileSystemPath.cpp:28-48,
Src/OSD/Unix/FileSystemPath.cpp:51-157, Src/OSD/SDL/Main.cpp:1394-1413,
Src/OSD/SDL/Main.cpp:1451, Src/OSD/SDL/Main.cpp:2239
Libretro: retro_init joins "supermodel" to the frontend system directory and
the core creates that directory through the VFS. Supermodel.ini, Games.xml and
Music.xml are looked up flat in it first, then under a Config/ subdirectory
kept for the initial port's layout. Games.xml and Supermodel.ini are also
compiled into the binary from the repository copies, and when neither layout
holds the file the embedded bytes are written to the flat path on first run.
An external file is read in preference to the embedded one and never updated
afterwards. Music.xml has no embedded copy.
ref: Src/OSD/libretro/libretro.cpp:855-863, Src/OSD/libretro/libretro.cpp:889-894,
Src/OSD/libretro/libretro.cpp:1113, Src/OSD/libretro/LibretroWrapper.cpp:166-206,
Src/OSD/libretro/LibretroWrapper.cpp:208-228, Makefile:638-647, Makefile:653-655
Libretro NVRAM is the frontend .srm through the memory API. On the first frame
a <game>.nv written by the standalone build is imported from the save directory
when the .srm is empty; it is never written back. Save states are serialised in
memory, and a state file on disk is loaded only when InitStateFile names one,
which the core option layer leaves empty.
ref: Src/OSD/libretro/libretro.cpp:766-781, Src/OSD/libretro/libretro.cpp:1380-1409,
Src/OSD/libretro/libretro.cpp:1685-1690, Src/OSD/libretro/LibretroWrapper.cpp:479,
Src/OSD/libretro/LibretroWrapper.cpp:544-545, Src/OSD/libretro/LibretroConfigProvider.h:15
The Legacy3D renderer compiles its shaders from built-in strings and reads a
file only when VertexShader or FragmentShader names one; both default to an
empty string in either build.
ref: Src/Graphics/Shader.cpp:52-63, Src/Graphics/Shader.cpp:100-108,
Src/OSD/libretro/LibretroConfigProvider.h:22-23
EmuDeck installs the Flatpak package (com.supermodel3.Supermodel). Config
stored in ~/.supermodel/Config/. No checkBIOS entry in EmuDeck.
Four data files of its own are read from the install tree, Config/ and Assets/
relative to the working directory on Windows and macOS, under the home
directory on Linux. Supermodel.ini, NVRAM/<game>.nv and Saves/<game>.st<slot>
are written by the emulator itself.
ref: Src/OSD/Windows/FileSystemPath.cpp:28-49
files:
- name: Games.xml
path: "Config/Games.xml"
standalone_path: "Config/Games.xml"
mode: standalone
required: true
bundled: true
size: 151626
sha1: "6871a47de90ca67f9ff8e4e280416851a8164563"
md5: "0c7cfc0cba2f2cd674d94e093936f9f8"
description: "ROM set definitions"
note: "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it."
note: "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it. Nothing about the file is verified beyond parsing; the hash is that of the copy the pinned revision ships."
source_ref: "Src/OSD/SDL/Main.cpp:117, Src/OSD/SDL/Main.cpp:1506, Src/OSD/SDL/Main.cpp:1963, Src/OSD/SDL/Main.cpp:2326-2336, Src/GameLoader.cpp:549-559, Src/GameLoader.cpp:1014-1017"
- name: Games.xml
path: "supermodel/Games.xml"
mode: libretro
required: false
bundled: true
has_builtin: true
size: [148364, 148362]
sha1:
- "fa334ab5ba6366bd28168860c913e6365b9fec96"
- "57500ad35b883acb5e7766c04f5b42e65185715c"
md5:
- "2d16307ceb658636a05d34c7ba935b48"
- "29fd5bc40cea222e040c1a1cfd60ea2e"
description: "ROM set definitions, libretro copy"
note: "Read through the VFS from {system}/supermodel/Games.xml, or Config/Games.xml under it, and parsed from memory. When the read yields nothing the bytes compiled in from Config/Games.xml are parsed instead, so the core identifies every set without a file on disk; a file that is present takes precedence. The second hash is the embedded array, which predates the indentation cleanup of the repository copy by one tab."
source_ref: "Src/OSD/libretro/LibretroWrapper.cpp:187-206, Src/OSD/libretro/LibretroWrapper.cpp:221-222, Src/OSD/libretro/LibretroWrapper.cpp:822, Src/OSD/libretro/LibretroWrapper.cpp:834-859, Src/GameLoader.cpp:1019-1030, Makefile:645-647"
- name: Supermodel.ini
path: "supermodel/Supermodel.ini"
mode: libretro
required: false
bundled: true
has_builtin: true
size: 9421
sha1: "cbda2b3fa65e37c5c2824a4630f95f145533c360"
md5: "06533608174992f6ea180ae190011778"
description: "Configuration override"
note: "Read from {system}/supermodel/Supermodel.ini, or Config/Supermodel.ini under it, when present; a file that fails to parse aborts the load. Core options are applied over it afterwards, so it only reaches keys the options do not set and per-game sections. Extracted from the embedded copy when absent."
source_ref: "Src/OSD/libretro/LibretroWrapper.cpp:187-206, Src/OSD/libretro/LibretroWrapper.cpp:219-220, Src/OSD/libretro/LibretroWrapper.cpp:812-817, Src/OSD/libretro/LibretroWrapper.cpp:858, Src/OSD/libretro/LibretroWrapper.cpp:865-866, Makefile:653-655"
- name: p1crosshair.bmp
path: "Assets/p1crosshair.bmp"
standalone_path: "Assets/p1crosshair.bmp"
mode: standalone
size: 295992
sha1: "581cea232c296c7bd76f3101c3ae1bffdf5abf08"
md5: "9012018f50f707c1707009346eb5d18b"
required: true
bundled: true
description: "Player 1 light gun crosshair texture"
note: "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2."
source_ref: "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2379-2385, Assets/DIR.txt"
note: "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2. The libretro build opens the same two files from the Assets directory of the standalone layout, outside the frontend directories, but forces the vector style and never draws them, and its repository does not ship them."
source_ref: "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2379-2385, Assets/DIR.txt, Src/OSD/libretro/libretroCrosshair.cpp:36-60, Src/OSD/libretro/LibretroWrapper.cpp:465-471, Src/OSD/libretro/LibretroConfigProvider.h:361"
- name: p2crosshair.bmp
path: "Assets/p2crosshair.bmp"
standalone_path: "Assets/p2crosshair.bmp"
mode: standalone
size: 295992
sha1: "13c5e692c7acf2ec8243ac421d58fdf69c6c2370"
md5: "866dbf59a0e2d849de2365e1c953cc97"
required: true
bundled: true
description: "Player 2 light gun crosshair texture"
note: "Read in the same call as the player 1 bitmap and equally fatal when it fails to load."
source_ref: "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2379-2385"
source_ref: "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2379-2385, Src/OSD/libretro/libretroCrosshair.cpp:39, 55-58"
- name: Music.xml
path: "Config/Music.xml"
path: "supermodel/Music.xml"
standalone_path: "Config/Music.xml"
required: false
bundled: true
size: 9224
sha1: "b44ed959fe2948a03d81b98e67ca32f2b4c37e78"
md5: "ddb4e23db15dda67539eee24de23de4b"
description: "Custom MPEG music track map"
note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies."
source_ref: "Src/OSD/SDL/Main.cpp:118, Src/OSD/SDL/Main.cpp:943, Src/Sound/MPEG/MpegAudio.cpp:88-108"
note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies. The shipped file is a commented example. The libretro core resolves it beside Games.xml and has no embedded copy."
source_ref: "Src/OSD/SDL/Main.cpp:118, Src/OSD/SDL/Main.cpp:943, Src/Sound/MPEG/MpegAudio.cpp:88-108, Src/OSD/libretro/LibretroWrapper.cpp:223, Src/OSD/libretro/LibretroWrapper.cpp:494"
exclusion_note: >
The Sega Model 3 arcade hardware has no shared system BIOS. Each game board
+143 -64
View File
@@ -1,83 +1,162 @@
emulator: Xemu
type: standalone
source: "https://github.com/xemu-project/xemu"
emulator: xemu
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/xemu-project/xemu"
libretro: "https://github.com/LibretroAdmin/xemu-libretro"
upstream: "https://github.com/xemu-project/xemu"
logo: "https://raw.githubusercontent.com/xemu-project/xemu/master/data/xemu_64x64.png"
profiled_date: "2026-03-18"
source_commit: "d73326b62199c6dd952ef512947710e1333a49d3"
core_version: "0.8.x"
display_name: "xemu (Xbox)"
profiled_date: "2026-09-17"
source_commit:
standalone: "f9b14039e5bb56ae2d8f028e31e7cc19f13f7e12"
libretro: "d9804db79f87f6a6a5548b14ca4a8d5164390338"
core_version:
standalone: "0.8.136-49-gf9b14039e5"
libretro: "libretro-experimental"
display_name: "Microsoft - Xbox (xemu)"
cores:
- xemu
systems: [microsoft-xbox]
systems:
- microsoft-xbox
notes: |
Xemu is a free, open-source Xbox emulator based on QEMU.
Three firmware files are required for operation: MCPX boot ROM,
flash ROM (BIOS), and EEPROM image. A pre-built HDD image is
also needed. The EEPROM can be auto-generated by xemu if not
provided. Config stored in xemu.toml under sys.files section.
Full-system Xbox emulator built on QEMU. One tree builds the standalone
application and, with the libretro build option, a core in which a shim
replaces ui/xemu.c: the QEMU machine runs on its own thread, retro_run pumps
the RetroPads into the Duke controllers and blits the NV2A surface into the
frontend's framebuffer through an OpenGL 4.0 core context, and content is a
.iso or .xiso image that QEMU opens from its full path. Save states are not
implemented; game saves live inside the hard disk image.
ref: meson_options.txt:52-53, ui/xemu-libretro.c:1-27,
ui/xemu-libretro.c:609-617, ui/xemu-libretro.c:680-697,
ui/xemu-libretro.c:874-876
Four files feed the machine through the sys.files block of the
configuration: the MCPX boot ROM, the flash ROM, the EEPROM and the hard disk
image. qemu_init turns them into machine arguments: bootrom= on the xbox
machine, -bios, a smbus-storage device and an IDE drive at index 0 with
locked=on. The standalone keeps them in xemu.toml, read from the SDL
preference directory or from the directory of the executable when a
xemu.toml already sits there, and the file pickers of the settings menu fill
the four paths; nothing is searched by name and only the EEPROM has a
default location.
ref: config_spec.yml:353-367, system/vl.c:2983-3006, system/vl.c:3030-3074,
ui/xemu-settings.cc:70-133, ui/xemu.c:1382-1402,
ui/xui/main-menu.cc:1553-1575
The core reads the same four files from the frontend system directory, each
under a name picked by a core option that offers a default and a few
alternatives, and keeps its configuration as xemu-libretro.toml in that
directory. The boot ROM, the flash ROM and the disk image are opened before
the machine starts, and a missing one fails the load with a message naming
the file. The EEPROM is left to the machine, which generates one.
ref: ui/xemu-libretro.c:112-127, ui/xemu-libretro.c:139-145,
ui/xemu-libretro.c:178-236
The standalone boots whatever it can. An unreadable flash file or a
rejected EEPROM clears autostart and queues an error for the HUD, an
unreadable disk image only queues the error, and an empty boot ROM path
starts the flash without the overlay.
ref: system/vl.c:2983-3006, system/vl.c:3030-3039, system/vl.c:3041-3053,
system/vl.c:3060-3074, hw/xbox/xbox.c:143-165
files:
- name: "mcpx_1.0.bin"
description: "MCPX HLE boot ROM (v1.0)"
- name: mcpx_1.0.bin
path: mcpx_1.0.bin
required: true
size: 512
source_ref: "hw/xbox/xbox.c:151 (bootrom_size != 512 -> error)"
config_key: "sys.files.bootrom_path"
note: |
Overlaid on the last 512 bytes of the flash ROM region at boot.
Mapped to 0xFFFFFE00-0xFFFFFFFF. Disabled after early init
via LPC config register write (hw/xbox/xbox_pci.c:362).
Machine property: -machine xbox,bootrom=<path>
validation: [size]
config_key: sys.files.bootrom_path
description: "MCPX boot ROM"
note: >-
Passed as the bootrom machine property and read over the last 512 bytes
of the flash image, which the machine maps as a writable overlay at the
top of the address space. qemu_init drops the path with an error when
the file cannot be opened or is not 512 bytes, and the machine then runs
the flash alone. The core option xemu_bootrom names the file, default
mcpx_1.0.bin, with mcpx.bin, MCPX_1.0.bin and boot_rom.bin offered as
alternatives; the core refuses to load when the chosen file is absent.
source_ref:
standalone: "system/vl.c:2983-3006, hw/xbox/xbox.c:143-171, hw/xbox/xbox.c:468-470"
libretro: "ui/xemu-libretro.c:113-114, ui/xemu-libretro.c:192-193, ui/xemu-libretro.c:210-236"
- name: "Complex_4627.bin"
description: "Xbox flash ROM / BIOS (256 KB, kernel 4627)"
- name: Complex_4627.bin
path: Complex_4627.bin
required: true
size_options: [262144, 524288, 1048576]
size_note: "Must be a multiple of 64 KB. Default 256 KB."
source_ref: "hw/xbox/xbox.c:70-81 (bios_name, bios_size validation)"
config_key: "sys.files.flashrom_path"
note: |
Loaded as -bios argument (system/vl.c:3052-3053).
Mapped to 0xFF000000-0xFFFFFFFF with mirroring.
Common variants: Complex_4627 (1.0), Complex_4034 (debug),
Complex_4817 (1.1). Any valid Xbox BIOS dump works.
size: [262144, 524288, 1048576]
validation: [size]
size_note: "Any size that is a positive multiple of 64 KiB is mapped; the image is mirrored across the 16 MB flash window"
config_key: sys.files.flashrom_path
description: "Xbox flash ROM image"
note: >-
Passed as -bios and opened through qemu_find_file. An image whose size
is not a multiple of 65536 bytes counts as a failed load, like a missing
file: the 256 KB region is filled with 0xFF and the machine starts
anyway. An unreadable path clears autostart in the standalone. The core
option xemu_flashrom names the file, default Complex_4627.bin, with
Complex_4627_v1.03.bin, complex_4627.bin, cerbios.bin, Cerbios.bin,
bios.bin, xbox_bios.bin and Complex.bin offered as alternatives; the
core refuses to load when the chosen file is absent.
source_ref:
standalone: "system/vl.c:3041-3053, hw/xbox/xbox.c:63-123"
libretro: "ui/xemu-libretro.c:115-118, ui/xemu-libretro.c:195-196, ui/xemu-libretro.c:210-236"
- name: "eeprom.bin"
description: "Xbox EEPROM dump (256 bytes)"
- name: xbox_eeprom.bin
path: xbox_eeprom.bin
standalone_path: eeprom.bin
aliases: [eeprom.bin]
required: false
hle_fallback: true
has_builtin: true
size: 256
source_ref: "system/vl.c:2939 (size != 256 -> error)"
config_key: "sys.files.eeprom_path"
note: |
Loaded via smbus-storage device (hw/xbox/smbus_storage.c:157).
Auto-generated as XBOX_EEPROM_VERSION_R1 if missing
(system/vl.c:2918-2919). Default path: <config_dir>/eeprom.bin.
Contains serial, MAC, HDD key, region, video standard.
Structure defined in hw/xbox/eeprom_generation.h.
validation: [size]
config_key: sys.files.eeprom_path
description: "Xbox EEPROM image"
note: >-
Attached as the smbus-storage device at address 0x54, which reads the
whole file at realize and writes it back on every guest write. A missing
file is generated as a retail 1.0 image with a random serial, MAC, hard
disk key and online key, the North American region and the NTSC-M video
standard; a file of any size other than 256 bytes is rejected and
autostart is cleared. The standalone defaults to eeprom.bin next to
xemu.toml. The core option xemu_eeprom names the file, default
xbox_eeprom.bin, with eeprom.bin and EEPROM.bin offered as alternatives,
and does not check for it before the machine starts.
source_ref:
standalone: "system/vl.c:2909-2949, system/vl.c:3030-3039, ui/xemu-settings.cc:135-146, hw/xbox/smbus_storage.c:56-87, hw/xbox/smbus_storage.c:90-128, hw/xbox/smbus_storage.c:155-160, hw/xbox/eeprom_generation.c:93-140"
libretro: "ui/xemu-libretro.c:119-120, ui/xemu-libretro.c:198-199, ui/xemu-libretro.c:204-209"
- name: "xbox_hdd.qcow2"
description: "Xbox HDD image (8 GB, qcow2 format)"
- name: xbox_hdd.qcow2
path: xbox_hdd.qcow2
required: true
source_ref: "system/vl.c:3060-3073 (hdd_path loading)"
config_key: "sys.files.hdd_path"
note: |
Attached as IDE drive index=0 with locked=on.
Must contain Xbox partitions (C, E, X, Y, Z).
Pre-built images available from xemu project.
Not a BIOS file - excluded from retrobios packs.
config_key: sys.files.hdd_path
description: "Xbox hard disk image, 8 GB with the retail partition layout"
note: >-
Attached as the IDE drive at index 0 with locked=on when the path is set
and the file opens; an unreadable file only queues an error and an empty
path attaches no drive. Snapshots are stored inside the image. The
project publishes a formatted image carrying its own unsigned dashboard
and empty TDATA and UDATA folders. The core option xemu_hdd names the
file, default xbox_hdd.qcow2, with xbox_hdd_8gb.qcow2, hdd.qcow2 and
xbox_hdd.img offered as alternatives; the core refuses to load when the
chosen file is absent.
source_ref:
standalone: "system/vl.c:3060-3074, ui/xemu-snapshots.c:156"
libretro: "ui/xemu-libretro.c:121-123, ui/xemu-libretro.c:200-202, ui/xemu-libretro.c:210-236"
- name: wpcap.dll
required: false
description: "Npcap packet capture library"
note: >-
Loaded by name on Windows, with every entry point resolved individually,
when networking is enabled with the pcap backend; the netdev is not
created when the library or one of its symbols is missing. Networking is
off by default and the backend defaults to NAT.
source_ref: "winpcap-loader/loader.c:79-113, ui/xemu-net.c:68-78, system/vl.c:2870-2875, config_spec.yml:327-335"
machine_properties:
bootrom: "MCPX boot ROM path (string)"
avpack: "Video connector type: composite, scart, svideo, vga, rfu, hdtv, none"
short-animation: "Skip Xbox boot animation (bool)"
smc-version: "SMC version string, 3 chars, default P01"
video-encoder: "Video encoder chip: conexant (default), focus, xcalibur"
bootrom: "MCPX boot ROM path"
avpack: "Video connector: scart, hdtv, vga, rfu, svideo, composite, none"
short-animation: "Skip the boot animation"
smc-version: "SMC version string, default P01"
video-encoder: "Encoder presented to the OS: conexant, focus, xcalibur"
source_ref: "hw/xbox/xbox.c:446-497"
memory_layout:
ram: "64 MB or 128 MB (configurable via sys.mem_limit)"
flash_rom: "0xFF000000-0xFFFFFFFF (mirrored per bios_size)"
mcpx_overlay: "Last bios_size bytes, overlays flash ROM at reset"
source_ref: "hw/xbox/xbox.c:64-173"
+30 -20
View File
@@ -4,10 +4,10 @@ core_classification: community_fork
source: "https://github.com/rfandango/XenDroid"
upstream: "https://github.com/has207/xenia-edge"
author: "rfandango"
profiled_date: "2026-08-12"
profiled_date: "2026-09-17"
source_commit: "779680ade075d2d2a4c589c6a8d57a8e26c116c0"
upstream_commit: "84cf209221160590768f615a0369a9c4a1456bbf"
core_version: "b70d643"
core_version: "0b11201"
display_name: "Microsoft - Xbox 360 (XenDroid)"
cores:
- "xendroid"
@@ -23,19 +23,26 @@ notes: |
app, AAudio and OpenSLES audio systems, an Android input driver, and Android
providers for the guest keyboard, the message box and disc swap. The library
recognises ISO, ZAR, GOD, extracted XEX folders and STFS containers, and the
boot path reads the file signature before mounting.
boot path reads the file signature before mounting. A disc that carries a
content tree has its packages staged out through the app cache and installed
under content: the library offers it when the game is launched and the
install screen accepts the disc directly.
ref: emulator-core/src/main/cpp/CMakeLists.txt:30-56, 112-152,
emulator-core/src/main/cpp/xendroid_emu.cpp:333-346, 671-676,
app/src/main/java/xendroid/compose/data/GameFormat.kt:6, 26-32
emulator-core/src/main/cpp/xendroid_emu.cpp:337-350, 675-680,
app/src/main/java/xendroid/compose/data/GameFormat.kt:6, 26-32,
emulator-core/src/main/cpp/xenia/src/xenia/vfs/content_install_standalone.cc:138-183, 185-267,
app/src/main/java/xendroid/compose/ui/library/GameLibraryViewModel.kt:142-152,
app/src/main/java/xendroid/compose/ui/content/InstallContentViewModel.kt:127-172
Releases are tagged XenDroid-<short commit> and the version name is the git
hash handed to the build, so b70d643 is both the head of main and the current
release. version.h names canary_experimental dc561e4df, carried over from the
ax360e tree the project started as, and it does not describe the vendored
code. The Edge revision is named by the periodic merge pull request instead,
and Edge rebases its branch, so that commit is no longer reachable there.
ref: app/build.gradle:34, emulator-core/src/main/cpp/version.h:4-5,
.github/workflows/XenDroid.yml:185-187
hash handed to the build, so 0b11201 is the current release; the two commits
main carries past it touch the README only. version.h names
canary_experimental dc561e4df, carried over from the ax360e tree the project
started as, and it does not describe the vendored code. The Edge revision is
named by the periodic merge pull request instead, and Edge rebases its
branch, so that commit is no longer reachable there.
ref: app/build.gradle:34, .github/workflows/XenDroid.yml:178, 188, 274-275,
emulator-core/src/main/cpp/version.h:4-5
No Xbox 360 system file is read. xboxkrnl, xam and xbdm are HLE modules
registered at startup, the XEX1 retail, XEX2 retail and XEX2 devkit keys are
@@ -52,12 +59,15 @@ notes: |
passed as a launch argument beside the config path and the log path. content,
cache, cache0, cache1, patches and plugins hang off it, the global
configuration is xenia-canary.config.toml and per title overrides live in
config/<TITLE_ID>.config.toml. The custom driver directory sits in internal
storage instead, because the external filesystem cannot carry an executable
mapping.
ref: emulator-core/src/main/java/xendroid/compose/Application.java:14-33, 84-88,
app/src/main/java/xendroid/compose/EmulatorHostActivity.kt:231-236,
emulator-core/src/main/cpp/xendroid_emu.cpp:312-317, 355-381
config/<TITLE_ID>.config.toml. The bundled default_config.toml is written
under the storage root at every start, rewritten whenever the asset differs
from the copy on disk, and seeds the global configuration when that file is
missing. The custom driver directory sits in internal storage instead,
because the external filesystem cannot carry an executable mapping.
ref: emulator-core/src/main/java/xendroid/compose/Application.java:14-33, 80-91,
app/src/main/java/xendroid/compose/settings/ConfigStore.kt:82-89,
app/src/main/java/xendroid/compose/EmulatorHostActivity.kt:237-242,
emulator-core/src/main/cpp/xendroid_emu.cpp:316-321, 359-385
479 game patches ship inside the APK, synced at build time from the
xenia-canary game-patches submodule pinned at 3553a5ae. The patch database
@@ -86,7 +96,7 @@ files:
The configured path is read before the instance is created and opened
through adrenotools when the file exists, otherwise the system libvulkan.so
is used. The row is hidden on devices without /dev/kgsl-3d0.
source_ref: "app/src/main/java/xendroid/compose/ui/settings/SettingRows.kt:175-200, app/src/main/java/xendroid/compose/settings/SettingsRepository.kt:34-35, 140, emulator-core/src/main/java/xendroid/compose/Utils.java:164-236, emulator-core/src/main/java/xendroid/compose/Application.java:21-24, emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:49, 168-192, 203"
source_ref: "app/src/main/java/xendroid/compose/ui/settings/SettingRows.kt:175-200, app/src/main/java/xendroid/compose/settings/SettingsRepository.kt:34-35, 140, emulator-core/src/main/java/xendroid/compose/Utils.java:164-236, emulator-core/src/main/java/xendroid/compose/Application.java:21-24, emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:106, 236-260, 271"
- name: "<font>.ttf"
required: false
@@ -146,7 +156,7 @@ files:
The title directory is mounted as the plugins device and each enabled entry
whose hash matches the running module is loaded as a user module on its own
thread.
source_ref: "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:175-233, 235-252, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:2625-2630"
source_ref: "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:175-233, 235-252, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:2622-2627"
- name: Account
required: false
+21 -20
View File
@@ -3,8 +3,8 @@ type: standalone
core_classification: community_fork
source: "https://github.com/has207/xenia-edge"
upstream: "https://github.com/has207/xenia-edge"
source_commit: "62225fd74061634b17f036b87e20558bbadf05f9"
profiled_date: "2026-08-10"
source_commit: "d059e1771888ce5f3ae2da34521dc5ca416f1c6b"
profiled_date: "2026-09-17"
core_version: "edge"
display_name: "Xenia Edge (Xbox 360)"
cores:
@@ -22,13 +22,13 @@ notes: |
into a xenia-edge component and executes bin/xenia_edge.
No Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules
registered at startup (src/xenia/emulator.cc:382-391), the XEX2 retail and devkit AES
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:61-66), and every
registered at startup (src/xenia/emulator.cc:392-401), the XEX2 retail and devkit AES
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:67-72), and every
XConfig setting is synthesised from cvars and constants by BuildSetting
rather than read from a flash image (src/xenia/kernel/xconfig.cc:87-246, 259-272). When the
launched title is itself a system title the kernel resolves xam.xex, then
$flash_xam.xex, through the guest filesystem under the \SystemRoot symlink
pointing at that title's own directory (src/xenia/emulator.cc:737-752); that is a
pointing at that title's own directory (src/xenia/emulator.cc:773-788); that is a
companion module inside the dump the user launched, not a host-side lookup.
The fork's data ships inside the executable. assets/font/Inter-VariableFont
@@ -36,26 +36,28 @@ notes: |
assets/locale catalogues are compiled to .mo at configure time and bundled,
with no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:48-76).
The UI font is read from that buffer with AddFontFromMemoryTTF
(src/xenia/ui/imgui_drawer.cc:378-388), and xe::EmbeddedBundle decodes the SDL controller
mappings (src/xenia/hid/sdl/sdl_input_driver.cc:148-165), the canary game patches
(src/xenia/patcher/patch_db.cc:304-310), the game-compatibility master.json
(src/xenia/ui/imgui_drawer.cc:374-384), and xe::EmbeddedBundle decodes the SDL controller
mappings (src/xenia/hid/sdl/sdl_input_driver.cc:147-164), the canary game patches
(src/xenia/patcher/patch_db.cc:318-324), the game-compatibility master.json
(src/xenia/app/game_compat_db.cc:47-58) and the x360db games.json (src/xenia/app/game_title_db.cc:50-60).
Three cvars accept a file and name none by default, so nothing is expected at
a fixed path: custom_font_path falls back to the embedded Inter
(src/xenia/ui/imgui_drawer.cc:39-44, 364-397), mappings_file to the embedded controller DB
(src/xenia/hid/sdl/sdl_input_driver.cc:35-38, 148-152), achievement_sound_path leaves the
(src/xenia/ui/imgui_drawer.cc:39-44, 360-393), mappings_file to the embedded controller DB
(src/xenia/hid/sdl/sdl_input_driver.cc:34-37, 147-151), achievement_sound_path leaves the
achievement sound silent (src/xenia/ui/audio_helper.cc:21-24, 38-52). For glyphs the
embedded font lacks, the host font comes from the OS: tahoma.ttf and
msgothic.ttc out of the Windows fonts folder, or the fontconfig sans-serif and
CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:399-481, 483-567).
CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:395-477, 479-563).
Everything under the storage root is written by the emulator or dropped in by
the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:43-46),
patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:377,
src/xenia/patcher/patch_db.cc:34-58), plugins/<title id>/plugins.toml behind allow_plugins,
patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:387,
src/xenia/patcher/patch_db.cc:34-52, 60-75) and listed by the patches panel
beside the bundled ones (src/xenia/patcher/patch_db.cc:373-397),
plugins/<title id>/plugins.toml behind allow_plugins,
which defaults false (src/xenia/patcher/plugin_loader.cc:16-38, 58-72), content, cache0, cache1,
scratch and mu (src/xenia/emulator.cc:1442-1501). portable.txt next to the executable
scratch and mu (src/xenia/emulator.cc:1478-1537). portable.txt next to the executable
keeps the storage root there instead of the user folder
(src/xenia/app/xenia_main.cc:524-538).
@@ -79,7 +81,7 @@ files:
system: microsoft-xbox-360
required: true
description: "DXIL signer and validator from DirectX Shader Compiler 1.9.2602.24"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:227-236, src/xenia/gpu/d3d12/pipeline_cache.cc:105-113, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:112-120, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614"
note: >-
The only shader library the backend still needs. Loaded by full path from
the D3D12 folder next to the executable, then by plain name from the
@@ -87,9 +89,8 @@ files:
D3D12/. D3D12 rejects an unsigned shader, so PipelineCache::Initialize
stops when IsSignerAvailable() is false and asks for a recent dxil.dll in
the D3D12 folder; that failure propagates to "Failed to setup
graphics_system!" (src/xenia/emulator.cc:421-428). Windows defaults to
gpu = "d3d12" (src/xenia/emulator.cc:109, the cvar having moved
there beside the code that reads it) and the backend factory
graphics_system!" (src/xenia/emulator.cc:432-443). Windows defaults to
gpu = "d3d12" (src/xenia/emulator.cc:119) and the backend factory
only falls back when D3D12GraphicsSystem::IsAvailable() is false, which
tests the D3D12 API itself, not the redistributable. Taken from
bin/x64/dxil.dll in dxc_2026_05_27.zip of DirectXShaderCompiler release
@@ -103,7 +104,7 @@ files:
system: microsoft-xbox-360
required: true
description: "DirectX 12 Agility SDK 1.619.3 runtime"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:263-274, src/xenia/ui/windowed_app_main_win.cc:25-28, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:623-668"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:293-305, src/xenia/ui/windowed_app_main_win.cc:25-28, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:623-668"
note: >-
The binary exports D3D12SDKVersion 619 and D3D12SDKPath ".\D3D12\", so
d3d12.dll loads it at the first device creation. The provider checks for
@@ -119,7 +120,7 @@ files:
system: microsoft-xbox-360
required: false
description: "Direct3D 12 debug layer from Agility SDK 1.619.3"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:295-323, src/xenia/ui/redist_installer_wx.cc:127-134, src/xenia/ui/redist_installer_wx.cc:670-715"
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:326-363, src/xenia/ui/redist_installer_wx.cc:127-134, src/xenia/ui/redist_installer_wx.cc:670-715"
note: >-
Reached only when d3d12_debug is set, which defaults false
(src/xenia/ui/d3d12/d3d12_provider.cc:23). Fetching it re-extracts D3D12Core.dll alongside,
+128 -108
View File
@@ -3,8 +3,8 @@ type: standalone
core_classification: other
source: "https://github.com/chernandezba/zesarux"
upstream: "https://github.com/chernandezba/zesarux"
source_commit: "91cce79eb7eea9cc4f5e56b6cc0949d2164a0977"
profiled_date: "2026-08-10"
source_commit: "331ba12286c008230643ce98a2963bbfe60f3b35"
profiled_date: "2026-09-17"
core_version: "13.1-SN"
display_name: "Sinclair - ZX Spectrum and clones (ZEsarUX)"
verification: existence
@@ -34,33 +34,33 @@ systems:
notes: |
Multi-machine Sinclair emulator. Every ROM is read from disk at run time;
none is compiled into the binary. `rom_load` (src/cpu.c:3158-3751) maps
none is compiled into the binary. `rom_load` (src/cpu.c:3203-3803) maps
`current_machine_type` to a filename through a switch, then resolves it with
`find_sharedfile` (src/utils.c:1310-1348), which searches the current directory,
`find_sharedfile` (src/utils.c:1314-1352), which searches the current directory,
`../Resources/`, `INSTALL_PREFIX/share/zesarux/` and the directory holding the
binary, in that order.
ZEsarUX ships these files and installs them next to the binary: `src/configure:1909`
ZEsarUX ships these files and installs them next to the binary: `src/configure:1921`
lists `*.rom`, `zxuno.flash`, `zxmmcplus.flash`, `tbblue.mmc`, `pcw_8x_boot*dsk`,
`mantransfev3.bin` and `alternate_roms` in COMMONFILES. A normal install
therefore already carries every entry below, which is why they are marked
`bundled: true`.
A missing machine ROM is not fatal: `rom_load` logs an error and returns
(src/cpu.c:3420-3428), the panic having been removed deliberately. The machine then
(src/cpu.c:3465-3473), the panic having been removed deliberately. The machine then
runs on uninitialised memory, so the ROMs the switch names are marked required
for the machine they serve. The one hard failure is `prism_failsafe.rom`, which
`prism_load_failsafe_rom` loads through its own path and which calls `cpu_panic`
when missing or short (src/machines/prism.c:581-590).
The emulator verifies no hash on any of these files. It does check size: the
machine ROMs are compared against `get_rom_size` (src/utils.c:3514-3588) and the
machine ROMs are compared against `get_rom_size` (src/utils.c:4084-4158) and the
interface ROMs against their own `*_ROM_SIZE` constants, with a mismatch logged
as an error. `validation: [size]` is set only where the code makes that
comparison.
`--romfile` (src/start.c:998) overrides the machine ROM with any file the user
picks (src/cpu.c:3410-3413); the ROMs under `alternate_roms/` and the extra
`--romfile` (src/start.c:4870-4874) overrides the machine ROM with any file the user
picks (src/cpu.c:3455-3458); the ROMs under `alternate_roms/` and the extra
variants in the install root exist for that path and are documented in the
shipped src/ALTERNATEROMS file. Interface ROMs are equally overridable
(`--divide-rom`, `--divmmc-rom`, `--dandanator-rom`, `--ifrom-rom`,
@@ -68,23 +68,25 @@ notes: |
ES-DE drives ZEsarUX for its `zxnext` system with `--machine tbblue
--tbblue-fast-boot-mode --enable-esxdos-handler`. Fast boot swaps
`tbblue_loader.rom` for `48.rom` (src/cpu.c:3263-3264), and the esxdos handler needs
`tbblue_loader.rom` for `48.rom` (src/cpu.c:3308-3309), and the esxdos handler needs
the divMMC firmware `esxmmc085.rom`, so that path loads `48.rom`, `esxmmc085.rom`
and the `tbblue.mmc` card image rather than a dedicated Next ROM.
ZEsarUX also loads UI and bundled-software resources through the same
`find_sharedfile` path: `keyboards/*.bmp` on-screen keyboard art
(src/menu/menu_items.c:19210, 21731, 21752), `z88_shortcuts.bmp`
(src/video/screen.c:11078) and the `my_soft/` homebrew collection
(src/menu/menu_items.c:32146, 32205; src/menu/menu_items_storage.c:582). They are
application resources rather than system firmware and carry no entry below.
(src/menu/menu_items.c:19258, 21784, 21805), `z88_shortcuts.bmp`
(src/video/screen.c:11210), the `my_soft/` homebrew collection
(src/menu/menu_items.c:32199, 32258; src/menu/menu_items_storage.c:582), the
`copiers/*.zsf` tape copier snapshots (src/menu/menu_items_storage.c:651, 742) and
`editionnamegame.tzx` (src/cpu.h:73, src/utils.c:17879). They are application
resources rather than system firmware and carry no entry below.
`PrismChime.bin` sits in the source tree but no code reads it and COMMONFILES
does not install it.
files:
# ============================================================
# ZX Spectrum and clones - machine ROMs
# rom_load switch, src/cpu.c:3166-3406
# rom_load switch, src/cpu.c:3212-3451
# ============================================================
- name: "48.rom"
@@ -94,8 +96,8 @@ files:
bundled: true
system: sinclair-zx-spectrum
fast_boot: "tbblue"
source_ref: "src/cpu.c:3168-3177 (16K/48K, CZ 2000, CZ Spectrum), src/cpu.c:3263 (tbblue fast boot), src/utils.c:3528 (size)"
note: "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3543-3551)."
source_ref: "src/cpu.c:3213-3222 (16K/48K, CZ 2000, CZ Spectrum), src/cpu.c:3308 (tbblue fast boot), src/utils.c:4098 (size)"
note: "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3588-3597)."
- name: "48es.rom"
size: 16384
@@ -103,7 +105,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3267-3268, src/utils.c:3528"
source_ref: "src/cpu.c:3312-3314, src/utils.c:4098"
note: "Spanish 48K+ ROM, selected for MACHINE_ID_SPECTRUM_48_PLUS_SPA."
- name: "inves.rom"
@@ -112,8 +114,8 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3179-3181, src/utils.c:3528"
note: "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3441-3447)."
source_ref: "src/cpu.c:3224-3227, src/utils.c:4098"
note: "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3486-3492)."
- name: "128.rom"
size: 32768
@@ -121,7 +123,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3202-3203, src/utils.c:3530"
source_ref: "src/cpu.c:3247-3249, src/utils.c:4100"
- name: "128s.rom"
size: 32768
@@ -129,7 +131,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3206-3207, src/utils.c:3530"
source_ref: "src/cpu.c:3251-3253, src/utils.c:4100"
- name: "p2.rom"
size: 32768
@@ -137,7 +139,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3213-3214, src/utils.c:3530"
source_ref: "src/cpu.c:3258-3260, src/utils.c:4100"
note: "ZX Spectrum +2."
- name: "p2f.rom"
@@ -146,7 +148,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3217-3218, src/utils.c:3530"
source_ref: "src/cpu.c:3262-3264, src/utils.c:4100"
- name: "p2s.rom"
size: 32768
@@ -154,7 +156,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3221-3222, src/utils.c:3530"
source_ref: "src/cpu.c:3266-3268, src/utils.c:4100"
- name: "p2a40.rom"
size: 65536
@@ -162,7 +164,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3227-3229, src/utils.c:3532"
source_ref: "src/cpu.c:3272-3275, src/utils.c:4102"
note: "+2A/+3 ROM v4.0."
- name: "p2a41.rom"
@@ -171,7 +173,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3232-3234, src/utils.c:3532"
source_ref: "src/cpu.c:3277-3280, src/utils.c:4102"
note: "+2A/+3 ROM v4.1."
- name: "p2as.rom"
@@ -180,7 +182,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3237-3239, src/utils.c:3532"
source_ref: "src/cpu.c:3282-3285, src/utils.c:4102"
- name: "pentagon.rom"
size: 32768
@@ -188,7 +190,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3271-3272, src/utils.c:3530 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)"
source_ref: "src/cpu.c:3316-3318, src/utils.c:4100 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)"
- name: "se.rom"
size: 32768
@@ -196,7 +198,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3247-3249, src/utils.c:3536"
source_ref: "src/cpu.c:3292-3295, src/utils.c:4106"
note: "Chloe 140SE/280SE, SE Basic IV."
- name: "chrome.rom"
@@ -205,7 +207,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3296-3297, src/utils.c:3542"
source_ref: "src/cpu.c:3341-3343, src/utils.c:4112"
- name: "prism.rom"
size: 327680
@@ -213,8 +215,8 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3258-3259, src/utils.c:3538"
note: "20 pages of 16K. Page map documented at src/cpu.c:3512-3528."
source_ref: "src/cpu.c:3303-3305, src/utils.c:4108"
note: "20 pages of 16K. Page map documented at src/cpu.c:3557-3573."
- name: "prism_failsafe.rom"
size: 16384
@@ -222,7 +224,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/machines/prism.h:61, src/machines/prism.c:581-590, src/cpu.c:3536"
source_ref: "src/machines/prism.h:61, src/machines/prism.c:581-590, src/cpu.c:3581"
note: "Loaded straight after prism.rom by prism_load_failsafe_rom(). The only ROM whose absence is fatal: the loader calls cpu_panic both when the file is missing and when the read is not 16384 bytes."
- name: "zxuno_bootloader.rom"
@@ -230,8 +232,8 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3243-3244, src/cpu.c:3486-3490"
size_note: "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:3534) but that value is unused on this path."
source_ref: "src/cpu.c:3288-3290, src/cpu.c:3531-3535"
size_note: "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:4104) but that value is unused on this path."
- name: "zxevo_tsconf.rom"
size: 524288
@@ -239,7 +241,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3300-3301, src/utils.c:3544"
source_ref: "src/cpu.c:3345-3347, src/utils.c:4114"
- name: "zxevo_baseconf.rom"
size: 524288
@@ -247,7 +249,8 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3304-3305, src/utils.c:3546"
source_ref: "src/cpu.c:3349-3351, src/utils.c:4116"
note: "ZX Evolution BaseConf ROM set. The 13.1 tree ships the Turbo 2+/PentEvo build with New ROM boot v1.06; the 13.0 release shipped the PentEvo edition 2013 image of the same size."
# ============================================================
# ZX Spectrum Next (TBBlue)
@@ -259,15 +262,15 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum-next
source_ref: "src/cpu.c:3262-3264, src/cpu.c:3553-3559, src/utils.c:3540"
note: "FPGA loader, mirrored to 16K at src/cpu.c:3555. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead."
source_ref: "src/cpu.c:3307-3310, src/cpu.c:3598-3604, src/utils.c:4110"
note: "FPGA loader, mirrored to 16K at src/cpu.c:3600. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead."
- name: "tbblue.mmc"
size: 67108864
required: false
bundled: true
system: sinclair-zx-spectrum-next
source_ref: "src/menu/menu_items_storage.c:12144-12155, src/configure:1909"
source_ref: "src/menu/menu_items_storage.c:12129-12147, src/configure:1921"
note: "SD card image carrying the Next system software. Assigned as MMC card 0 by the local-tbblue menu action; the emulator reports 'tbblue.mmc image not found' when absent."
size_note: "64 MB, so it needs storage: large_file once the image is acquired and uploaded as a release asset."
@@ -281,7 +284,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3184-3185, src/utils.c:3528"
source_ref: "src/cpu.c:3229-3231, src/utils.c:4098"
- name: "tk90xs.rom"
size: 16384
@@ -289,7 +292,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3188-3189, src/utils.c:3528"
source_ref: "src/cpu.c:3233-3235, src/utils.c:4098"
- name: "tk95.rom"
size: 16384
@@ -297,7 +300,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3192-3193, src/utils.c:3528"
source_ref: "src/cpu.c:3237-3239, src/utils.c:4098"
- name: "tk95es.rom"
size: 16384
@@ -305,7 +308,7 @@ files:
required: true
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/cpu.c:3196-3197, src/utils.c:3528"
source_ref: "src/cpu.c:3241-3243, src/utils.c:4098"
# ============================================================
# Timex
@@ -317,7 +320,7 @@ files:
required: true
bundled: true
system: timex-tc2048
source_ref: "src/cpu.c:3308-3309, src/utils.c:3528 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)"
source_ref: "src/cpu.c:3353-3355, src/utils.c:4098 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)"
- name: "ts2068.rom"
size: 24576
@@ -325,7 +328,7 @@ files:
required: true
bundled: true
system: timex-ts2068
source_ref: "src/cpu.c:3253-3255, src/cpu.c:3589-3600, src/utils.c:3548"
source_ref: "src/cpu.c:3298-3301, src/cpu.c:3634-3648, src/utils.c:4118"
note: "Read as two blocks: 16384 into the main ROM table, then 8192 into the EX ROM table. Serves TS2068 and TC2068."
- name: "ts1500.rom"
@@ -334,7 +337,7 @@ files:
required: true
bundled: true
system: timex-ts1500
source_ref: "src/cpu.c:3332-3334, src/utils.c:3564"
source_ref: "src/cpu.c:3377-3381, src/utils.c:4134"
# ============================================================
# ZX80 / ZX81 family
@@ -347,8 +350,8 @@ files:
required: true
bundled: true
system: sinclair-zx80
source_ref: "src/cpu.c:3312-3317, src/cpu.c:3644-3654, src/utils.c:3560"
note: "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3648)."
source_ref: "src/cpu.c:3357-3362, src/cpu.c:3689-3699, src/utils.c:4130"
note: "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3693)."
- name: "zx81.rom"
size: 8192
@@ -356,7 +359,7 @@ files:
required: true
bundled: true
system: sinclair-zx81
source_ref: "src/cpu.c:3319-3330, src/utils.c:3564"
source_ref: "src/cpu.c:3364-3375, src/utils.c:4134"
note: "Serves ZX81, Timex TS1000, TK82C, TK83 and the Czerweny CZ 1000/1500 models."
- name: "tk85.rom"
@@ -365,7 +368,7 @@ files:
required: true
bundled: true
system: microdigital-tk85
source_ref: "src/cpu.c:3338-3340, src/utils.c:3562"
source_ref: "src/cpu.c:3383-3387, src/utils.c:4132"
note: "The TK85 test precedes the generic ZX81 test in get_rom_size, so 10240 wins over 8192."
- name: "zxpand_zx81.rom"
@@ -391,7 +394,7 @@ files:
required: true
bundled: true
system: jupiter-ace
source_ref: "src/cpu.c:3344-3346, src/utils.c:3566"
source_ref: "src/cpu.c:3389-3393, src/utils.c:4136"
# ============================================================
# Sinclair QL, Cambridge Z88, MK14
@@ -404,7 +407,7 @@ files:
required: true
bundled: true
system: sinclair-ql
source_ref: "src/cpu.c:3379-3380, src/cpu.c:3719-3728"
source_ref: "src/cpu.c:3424-3429, src/cpu.c:3764-3773"
size_note: "Reads up to 131072 bytes and errors only below 16384, so the check is a minimum rather than an exact size."
- name: "ql_jm.rom"
@@ -412,15 +415,32 @@ files:
required: false
bundled: true
system: sinclair-ql
source_ref: "src/cpu.c:3383 (commented alternative), src/start.c:998"
source_ref: "src/cpu.c:3428 (commented alternative), src/start.c:4870-4874"
note: "JM release. Reachable through --romfile; the switch selects ql_js.rom."
- name: "tkii220.rom"
size: 16384
required: false
bundled: true
system: sinclair-ql
source_ref: "src/machines/ql.c:1348-1375, src/start.c:5621-5646, src/cpu.c:3797-3801"
note: "QJUMP Toolkit II 2.20, the ROM ql.c names as the example for --ql-rom-c000-file. ql_load_extra_roms() runs after the system ROM and reads 16K into memoria_ql at 0xC000 from the path the option gives; the read count is not checked."
- name: "qsound_V1.94.rom"
aliases: ["Qsound_V1.94.rom"]
size: 8192
required: false
bundled: true
system: sinclair-ql
source_ref: "src/soundchips/qsound.h:50, src/soundchips/qsound.c:329-369, src/start.c:6772-6779, src/cpu.c:3798-3801"
note: "QL Qsound firmware, read into memoria_ql at 0xC0000 once --ql-qsound-enabled is set; the read count is not checked and --ql-qsound-rom points the loader at another file. QSOUND_ROM_FILE is spelled qsound_V1.94.rom while the shipped file is Qsound_V1.94.rom, so the default only resolves on a case-insensitive filesystem."
- name: "Z88OZ47.rom"
size: 524288
required: true
bundled: true
system: cambridge-z88
source_ref: "src/cpu.c:3350-3352, src/cpu.c:3675-3685"
source_ref: "src/cpu.c:3395-3400, src/cpu.c:3720-3730"
size_note: "Reads up to 512K and errors only when nothing is read; z88_internal_rom_size is derived from the byte count, so any size is accepted."
- name: "mk14.rom"
@@ -429,7 +449,7 @@ files:
required: true
bundled: true
system: science-of-cambridge-mk14
source_ref: "src/cpu.c:3386-3387, src/utils.c:3578"
source_ref: "src/cpu.c:3431-3433, src/utils.c:4148"
# ============================================================
# Amstrad CPC and PCW
@@ -441,7 +461,7 @@ files:
required: true
bundled: true
system: amstrad-cpc
source_ref: "src/cpu.c:3358-3363, src/utils.c:3570"
source_ref: "src/cpu.c:3403-3409, src/utils.c:4140"
note: "Serves CPC 464 and CPC 4128."
- name: "cpc664.rom"
@@ -450,7 +470,7 @@ files:
required: true
bundled: true
system: amstrad-cpc
source_ref: "src/cpu.c:3366-3367, src/utils.c:3572"
source_ref: "src/cpu.c:3411-3413, src/utils.c:4142"
- name: "cpc6128.rom"
size: 49152
@@ -458,7 +478,7 @@ files:
required: true
bundled: true
system: amstrad-cpc
source_ref: "src/cpu.c:3370-3371, src/utils.c:3572"
source_ref: "src/cpu.c:3415-3417, src/utils.c:4142"
- name: "pcw_boot.rom"
size: 275
@@ -466,15 +486,15 @@ files:
required: true
bundled: true
system: pcw
source_ref: "src/cpu.c:3390-3396, src/cpu.c:3740-3746, src/utils.c:3580"
note: "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3739). Serves PCW 8256 and 8512."
source_ref: "src/cpu.c:3435-3441, src/cpu.c:3785-3791, src/utils.c:4150"
note: "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3784). Serves PCW 8256 and 8512."
- name: "pcw_8x_boot1.dsk"
size: 194864
required: false
bundled: true
system: pcw
source_ref: "src/machines/pcw.c:1431-1469"
source_ref: "src/machines/pcw.c:1432-1470"
note: "LocoScript boot disc, inserted by pcw_boot_locoscript()."
- name: "pcw_8x_boot2.dsk"
@@ -482,7 +502,7 @@ files:
required: false
bundled: true
system: pcw
source_ref: "src/machines/pcw.c:1431-1474"
source_ref: "src/machines/pcw.c:1432-1475"
note: "CP/M boot disc, inserted by pcw_boot_cpm() with boot end address 0x607."
# ============================================================
@@ -495,7 +515,7 @@ files:
required: true
bundled: true
system: sam-coupe
source_ref: "src/cpu.c:3374-3376, src/utils.c:3574"
source_ref: "src/cpu.c:3419-3422, src/utils.c:4144"
- name: "atomlite.rom"
size: 32768
@@ -503,7 +523,7 @@ files:
required: false
bundled: true
system: sam-coupe
source_ref: "src/cpu.c:3375, src/utils.c:3574"
source_ref: "src/cpu.c:3420, src/utils.c:4144"
note: "Replaces samcoupe.rom when Atom Lite emulation is on."
- name: "samram.rom"
@@ -534,14 +554,14 @@ files:
required: true
bundled: true
system: colecovision
source_ref: "src/cpu.c:3275-3276, src/utils.c:3550"
source_ref: "src/cpu.c:3320-3322, src/utils.c:4120"
- name: "sg1000.rom"
size: 155
required: true
bundled: true
system: sg-1000
source_ref: "src/cpu.c:3279-3280, src/cpu.c:3613-3617"
source_ref: "src/cpu.c:3324-3326, src/cpu.c:3658-3662"
size_note: "Nothing is read from this file. The SG-1000 branch is empty and the source comment states the file only has to exist for the open to succeed."
- name: "sms.rom"
@@ -550,7 +570,7 @@ files:
required: true
bundled: true
system: sega-mastersystem
source_ref: "src/cpu.c:3283-3284, src/utils.c:3554"
source_ref: "src/cpu.c:3328-3330, src/utils.c:4124"
- name: "msx.rom"
size: 32768
@@ -558,7 +578,7 @@ files:
required: true
bundled: true
system: msx
source_ref: "src/cpu.c:3287-3288, src/utils.c:3556"
source_ref: "src/cpu.c:3332-3334, src/utils.c:4126"
- name: "svi.rom"
size: 32768
@@ -566,7 +586,7 @@ files:
required: true
bundled: true
system: spectravideo
source_ref: "src/cpu.c:3291-3293, src/utils.c:3558"
source_ref: "src/cpu.c:3336-3339, src/utils.c:4128"
note: "Serves SVI-318 and SVI-328."
# ============================================================
@@ -579,7 +599,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/storage/divmmc.c:45, src/storage/divmmc.c:95-103, src/storage/diviface.h:27, src/storage/diviface.c:758-765"
source_ref: "src/storage/divmmc.c:45, src/storage/divmmc.c:95-103, src/storage/diviface.h:27, src/storage/diviface.c:778-800"
note: "divMMC esxdos firmware, the default when --divmmc-rom is unset. Needed by --enable-esxdos-handler, which the ES-DE zxnext command line sets."
- name: "esxide085.rom"
@@ -588,7 +608,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/storage/divide.c:40, src/storage/divide.c:93, src/storage/diviface.h:27, src/storage/diviface.c:758-765"
source_ref: "src/storage/divide.c:40, src/storage/divide.c:93, src/storage/diviface.h:27, src/storage/diviface.c:778-800"
note: "divIDE esxdos firmware, the default when --divide-rom is unset."
- name: "unodos3.rom"
@@ -597,7 +617,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/storage/divmmc.c:96-99, src/storage/diviface.h:27, src/storage/diviface.c:758-765"
source_ref: "src/storage/divmmc.c:96-99, src/storage/diviface.h:27, src/storage/diviface.c:778-800"
note: "divMMC firmware substituted for esxmmc085.rom on Chloe machines."
- name: "trdos.rom"
@@ -606,7 +626,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/storage/betadisk.c:67, src/storage/betadisk.c:400, src/storage/betadisk.h:27, src/storage/betadisk.c:409-416"
source_ref: "src/storage/betadisk.c:67, src/storage/betadisk.c:401, src/storage/betadisk.h:27, src/storage/betadisk.c:408-420"
note: "Beta Disk / TR-DOS firmware."
- name: "if1-v1.rom"
@@ -644,7 +664,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/storage/zxmmcplus.h:30, src/start.c:1690, src/storage/zxmmcplus.c:756, src/storage/zxmmcplus.c:768-775"
source_ref: "src/storage/zxmmcplus.h:30, src/start.c:5950-5953, src/storage/zxmmcplus.c:756-778"
note: "ZXMMC+ flash ROM image, the default for --zxmmcplus-flash-file."
size_note: "The image holds ROM and RAM together, so the check is ZXMMCPLUS_FLASHROM_SIZE + ZXMMCPLUS_RAM_SIZE, not the 512K ROM constant alone."
@@ -654,7 +674,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/machines/zxuno.h:29, src/machines/zxuno.h:80, src/start.c:1712, src/cpu.c:3494, src/machines/zxuno.c:1198-1205"
source_ref: "src/machines/zxuno.h:29, src/machines/zxuno.h:80, src/start.c:4910-4913, src/cpu.c:3539, src/machines/zxuno.c:1186-1208"
note: "ZX-Uno SPI flash image, loaded by zxuno_load_spi_flash() right after the bootloader. Default for --zxunospifile. ZXUNO_SPI_SIZE is 4096 KB."
# ============================================================
@@ -667,7 +687,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988"
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282"
note: "Multiface One. The file selector rejects anything that is not exactly 8 KB."
- name: "mf128.rom"
@@ -676,7 +696,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988"
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282"
note: "Multiface 128."
- name: "mf3.rom"
@@ -685,7 +705,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988"
source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282"
note: "Multiface 3."
- name: "specmate.rom"
@@ -817,7 +837,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/menu/menu_items.c:41529-41545"
source_ref: "src/menu/menu_items.c:41821-41847"
note: "Spectrum program the emulator injects to dump RAM to tape."
# ============================================================
@@ -838,12 +858,12 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/configure:1909"
source_ref: "src/configure:1921"
note: "General Sound firmware v1.04. Shipped alongside gs105a.rom, but GS_ROM_NAME is fixed and there is no option to point the loader elsewhere, so it is usable only in place of gs105a.rom."
# ============================================================
# Alternate machine ROMs, selectable with --romfile (src/start.c:998,
# loaded at src/cpu.c:3410-3413). Documented in the shipped src/ALTERNATEROMS.
# Alternate machine ROMs, selectable with --romfile (src/start.c:4870-4874,
# loaded at src/cpu.c:3455-3458). Documented in the shipped src/ALTERNATEROMS.
# ============================================================
- name: "80-lec.rom"
@@ -851,21 +871,21 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/start.c:998, src/cpu.c:3410-3413"
source_ref: "src/start.c:4870-4874, src/cpu.c:3455-3458"
- name: "tk90x_v1br.rom"
size: 16384
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:97, src/start.c:998, src/cpu.c:3410-3413"
source_ref: "src/ALTERNATEROMS:97, src/start.c:4870-4874, src/cpu.c:3455-3458"
- name: "tk90x_v2es.rom"
size: 16384
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:98, src/start.c:998, src/cpu.c:3410-3413"
source_ref: "src/ALTERNATEROMS:98, src/start.c:4870-4874, src/cpu.c:3455-3458"
note: "Corrected TK90X ROM."
- name: "tk95es_modif.rom"
@@ -873,7 +893,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:101-106, src/start.c:998, src/cpu.c:3410-3413"
source_ref: "src/ALTERNATEROMS:101-106, src/start.c:4870-4874, src/cpu.c:3455-3458"
note: "TK95 Spanish ROM with message and symbol fixes by Rodolfo Edison Guerra."
- name: "Z88OZ431.rom"
@@ -881,49 +901,49 @@ files:
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88OZ441.rom"
size: 524288
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88OZ45.rom"
size: 524288
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88OZ46.rom"
size: 524288
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88UK220.rom"
size: 131072
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88UK300.rom"
size: 131072
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "Z88UK400.rom"
size: 131072
required: false
bundled: true
system: cambridge-z88
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998"
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874"
- name: "aszmice07.rom"
path: "alternate_roms/aszmice07.rom"
@@ -931,7 +951,7 @@ files:
required: false
bundled: true
system: sinclair-zx81
source_ref: "src/ALTERNATEROMS:4-5, src/start.c:998"
source_ref: "src/ALTERNATEROMS:4-5, src/start.c:4870-4874"
note: "ASZMIC E07 replacement ROM with assembler and debugger. The 4K image is stored twice to reach 8K."
- name: "sp-rom.rom"
@@ -940,7 +960,7 @@ files:
required: false
bundled: true
system: sinclair-zx81
source_ref: "src/ALTERNATEROMS:7-9, src/start.c:998"
source_ref: "src/ALTERNATEROMS:7-9, src/start.c:4870-4874"
note: "Comprocsys SP ROM add-on card, loaded at address 2000H."
- name: "ace.rom"
@@ -950,7 +970,7 @@ files:
bundled: true
system: jupiter-ace
variant_group: "jupiter-ace-rom"
source_ref: "src/ALTERNATEROMS:11-12, src/start.c:998"
source_ref: "src/ALTERNATEROMS:11-12, src/start.c:4870-4874"
note: "Jupiter Ace ROM patched by Dutra Lacerda, distinct from the root ace.rom."
- name: "opense.rom"
@@ -959,7 +979,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:14-15, src/start.c:998"
source_ref: "src/ALTERNATEROMS:14-15, src/start.c:4870-4874"
note: "OpenSE BASIC 3.1.2 for the 48K."
- name: "sebasic4_rom1.rom"
@@ -968,7 +988,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:18-19, src/start.c:998"
source_ref: "src/ALTERNATEROMS:18-19, src/start.c:4870-4874"
note: "SE BASIC 4.1.0 standalone ROM 1 for the 48K."
- name: "derby_p_32K.rom"
@@ -977,7 +997,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:21-23, src/start.c:998"
source_ref: "src/ALTERNATEROMS:21-23, src/start.c:4870-4874"
note: "Derby+ for 128K machines with 32K of ROM."
- name: "derby_pp_64K.rom"
@@ -986,7 +1006,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:21-23, src/start.c:998"
source_ref: "src/ALTERNATEROMS:21-23, src/start.c:4870-4874"
note: "Derby++ for 128K machines with 64K of ROM."
- name: "plus2c.rom"
@@ -995,7 +1015,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:40-41, src/start.c:998"
source_ref: "src/ALTERNATEROMS:40-41, src/start.c:4870-4874"
note: "Unofficial +2C ROM by Andrew Owen, for 128K/+2."
- name: "plus2b.rom"
@@ -1004,7 +1024,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:46-76, src/start.c:998"
source_ref: "src/ALTERNATEROMS:46-76, src/start.c:4870-4874"
note: "+2B ROM set for +2A/+3: 128 editor, 48K BASIC, BBC BASIC, OpenSE BASIC 3.1.1."
- name: "plus3e_mmcen3eE.rom"
@@ -1013,7 +1033,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/menu/menu_items.c:30627-30630, src/ALTERNATEROMS:26-30"
source_ref: "src/cpu.h:365, src/menu/menu_items.c:30678-30688, src/ALTERNATEROMS:26-30"
note: "+3e v1.38 English for MMC. Resolved by name through find_sharedfile for the +2e/+3e MMC machine preset."
- name: "plus3e_mmces3eE.rom"
@@ -1022,7 +1042,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:26-30, src/start.c:998"
source_ref: "src/ALTERNATEROMS:26-30, src/start.c:4870-4874"
note: "+3e v1.38 Spanish for MMC."
- name: "plus3e_sm8en3eE.rom"
@@ -1031,7 +1051,7 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:32-36, src/start.c:998"
source_ref: "src/ALTERNATEROMS:32-36, src/start.c:4870-4874"
note: "+3e v1.38 English for simple 8-bit IDE."
- name: "plus3e_sm8es3eE.rom"
@@ -1040,5 +1060,5 @@ files:
required: false
bundled: true
system: sinclair-zx-spectrum
source_ref: "src/ALTERNATEROMS:32-36, src/start.c:998"
source_ref: "src/ALTERNATEROMS:32-36, src/start.c:4870-4874"
note: "+3e v1.38 Spanish for simple 8-bit IDE."