feat: profile geartowns, coolbaremu and xenia_edge

The buildbot publishes four cores no profile named. Geartowns (FM
Towns) and CoolbarEmu get profiles read from their source, Xenia Edge
gains its libretro build, and pokketstation follows its repository's
rename to Pokket, re-read at HEAD.
This commit is contained in:
Abdessamad Derraz committed 2026-10-17 13:40:17 +02:00
1 parent 0fc71793a9
commit 1fb7b1572e
4 files changed
+286 -43

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
emulator: "CoolbarEmu"
type: libretro
core_classification: official_port
source: "https://github.com/AloysHF/CoolbarEmu"
upstream: "https://github.com/AloysHF/CoolbarEmu"
profiled_date: "2026-10-17"
source_commit: "88e90440daab0bdc7bc141728b51841e0c730528"
core_version: "0.2.0"
display_name: "Coolbar (CoolbarEmu)"
cores:
- "coolbaremu"
systems:
- "coolbar"
notes: |
Emulator for Coolbar/CBE applications of Chinese feature phones, written
in Rust. The workspace builds a standalone binary (crates/coolbaremu) and
the libretro core (crates/coolbaremu-libretro), the buildbot builds the
latter only (Cargo.toml:13). Guest ARM/Thumb code runs on the armv4t_emu
crate and the phone firmware services are reimplemented in
crates/coolbaremu-core/src/machine/services. Text is drawn with the unifont
crate compiled into the core (Cargo.toml:35,
crates/coolbaremu-core/src/machine/drawing.rs:1886).
The content is read whole by CbeArchive::load()
(crates/coolbaremu-core/src/cbe/archive.rs:68-73). Files next to the .cbe
(pay kernels, records, update data) are indexed as the guest filesystem
(crates/coolbaremu-core/src/machine/mod.rs:1022-1024,
crates/coolbaremu-core/src/machine/virtual_fs.rs:58-103); they belong to
the game.
The only system directory read is coolbaremu_orientation.csv, an optional
user list of CRC32, size and orientation for landscape titles missing from
the built-in table (crates/coolbaremu-libretro/src/libretro/api.rs:45,
crates/coolbaremu-libretro/src/libretro/api.rs:369-399,
crates/coolbaremu-core/src/orientation_profile.rs:31-54). A missing file is
logged and the built-in table applies.
files: []
exclusion_note: >
The firmware services are reimplemented in the core and the font is the
embedded unifont crate; the system directory holds only an optional
user-written orientation list.
+150
View File
@@ -0,0 +1,150 @@
emulator: "Geartowns"
type: libretro
core_classification: official_port
source: "https://github.com/drhelius/Geartowns"
upstream: "https://github.com/drhelius/Geartowns"
profiled_date: "2026-10-17"
source_commit: "25d2025be28e9fcc319f597a516f21e0778f770b"
core_version: "0.0.6-8-g25d2025"
display_name: "Fujitsu - FM Towns (Geartowns)"
cores:
- "geartowns"
systems:
- "fmtowns"
notes: |
FM Towns emulator by Ignacio Sanchez (drhelius). The same tree builds the
desktop application and the libretro core (platforms/libretro). The core
emulates the Model 1/2, 1F/2F, 10F/20F, II CX, UX, UG, HG and the Marty
(src/system/machine_profiles.h:61-75, `emulated` field). The version string
is `git describe` at build time (platforms/libretro/Makefile:369-371).
retro_load_game() fails when load_bios() finds no firmware
(platforms/libretro/libretro.cpp:704-708). load_bios() searches
system/geartowns first, then the system directory itself, each time
accepting first only a set made for the selected model and then any set
(platforms/libretro/libretro.cpp:798-825). Firmware::FindSources() takes
as candidates the folder itself, every direct subfolder and every .zip in
it (src/media/firmware.cpp:286-346); folder and zip names are free. A
candidate counts only when the System, OS, Font and Dictionary ROMs are all
present at the right size, and the CRC32 of its System ROM names the set
(src/media/firmware.cpp:375-414, src/media/firmware.h:114-123).
Six sets are known (src/media/firmware.h:114-123): fmtowns (Model 1/2),
freetowns (Free FM Towns Project replacement ROMs, used by the Model 1/2),
fmtownsux (UX, also used by 1F/2F, 10F/20F, CX and UG), fmtmarty (Marty),
fmtownshr and fmtownsftv (both used by the HG, HR preferred). On Auto the
model comes from the game database and falls back to the Model 1/2 or to
the first model in release order that has a set
(src/geartowns_core.cpp:1624-1649, src/geartowns_core.cpp:1691-1696). A set
made for another model still loads in the second pass, with a warning
(platforms/libretro/libretro.cpp:827-860).
File names are matched without case, inside a zip only at the archive root
(src/media/firmware.cpp:614-663). Accepted names per component are
FMT_SYS.ROM, FMT_SYS_A.ROM, FMTHR_SYS.ROM; FMT_DOS.ROM, FMT_DOS_A.ROM;
FMT_FNT.ROM; FMT_DIC.ROM; FMT_F20.ROM, FMT_F20_A.ROM; MYTOWNS.ROM,
MYTOWNSUX.ROM, MYTOWNSM2.ROM, MYTOWNSFTV.ROM, MYTOWNSHR.ROM; MAR_EX0.ROM to
MAR_EX3.ROM (src/media/firmware.cpp:28-42). Without separate files the
Marty components are cut from MROM.M36 and MROM.M37, 2 MiB each
(src/media/firmware.cpp:497-508): OS at 0 and the first three extension
parts in M36; the fourth extension part, 20-dot font at 0x80000,
dictionary at 0x100000, font at 0x180000 and System ROM at 0x1C0000 in M37.
Each component must have its exact size or it is rejected
(src/media/firmware.cpp:530-612, src/common/defines.h:47-54): System
256 KiB, OS 512 KiB, Font 256 KiB, Dictionary 512 KiB, 20-dot Font 512 KiB,
Serial 32 bytes, Extension 2 MiB (four 512 KiB parts). System, OS, Font and
Dictionary are required; a missing 20-dot Font or Extension is replaced by
0xFF, a missing Serial ROM is generated (src/media/firmware.cpp:73-163,
src/media/firmware.cpp:258-261). The CRC32 of every component is looked up
in game_db.h (src/media/firmware.cpp:165-182, src/media/game_db.h:303-335);
an unknown CRC only produces a warning. The Free FM Towns set is known by
System 65DC3B1F, OS 43C18E92, Font 736D9CB1 and a blank Dictionary
504BF849. The Marty slices are known by System 937311F6, OS 2BC2AF96,
Extension E1A9FA72 and 20-dot Font 75660AAC.
The CMOS is written by the core next to the saves
(platforms/libretro/libretro.cpp:2753-2767); it is state, not a file to
obtain.
files:
- name: "fmtowns.zip"
description: "FM Towns Model 1/2 firmware set"
system: "fmtowns"
category: bios_zip
path: "geartowns/fmtowns.zip"
required: true
contents:
- { name: "fmt_sys.rom", size: 262144, crc32: "53319e23" }
- { name: "fmt_dos.rom", size: 524288, crc32: "112872ee" }
- { name: "fmt_fnt.rom", size: 262144, crc32: "955c6b75" }
- { name: "fmt_dic.rom", size: 524288, crc32: "b314c659" }
source_ref: "platforms/libretro/libretro.cpp:704-708, platforms/libretro/libretro.cpp:807-825, src/media/firmware.h:116, src/media/firmware.cpp:28-33, src/media/firmware.cpp:286-346, src/media/game_db.h:303-307"
note: >
Set for the Model 1/2, the machine Auto falls back to. The same four
files load from any subfolder of system/geartowns or from
system/geartowns itself. The core has no CRC for a Model 1/2 20-dot
Font; fmt_f20.rom is read when present.
- name: "fmtownsux.zip"
description: "FM Towns II UX firmware set"
system: "fmtowns"
category: bios_zip
path: "geartowns/fmtownsux.zip"
required: false
contents:
- { name: "fmt_sys_a.rom", size: 262144, crc32: "92f3fa67" }
- { name: "fmt_dos_a.rom", size: 524288, crc32: "22270e9f" }
- { name: "fmt_fnt.rom", size: 262144, crc32: "dd6fd544" }
- { name: "fmt_dic.rom", size: 524288, crc32: "82d1daa2" }
- { name: "mytownsux.rom", size: 32, crc32: "5cc7e6bc" }
source_ref: "src/media/firmware.h:118-119, src/media/firmware.cpp:28-34, src/media/game_db.h:309-314"
note: "Set for the UX, also used by the 1F/2F, 10F/20F, CX and UG."
- name: "fmtmarty.zip"
description: "FM Towns Marty firmware set"
system: "fmtowns"
category: bios_zip
path: "geartowns/fmtmarty.zip"
required: false
contents:
- { name: "mrom.m36", size: 2097152 }
- { name: "mrom.m37", size: 2097152 }
source_ref: "src/media/firmware.h:120, src/media/firmware.cpp:497-508, src/media/game_db.h:316-320"
note: >
The core checks the CRC32 of the slices it cuts from the two mask
ROMs, not of the files: System 937311F6, OS 2BC2AF96, Extension
E1A9FA72, 20-dot Font 75660AAC. The Marty 2 layout with separate
FMT_*.ROM and MAR_EX0.ROM to MAR_EX3.ROM files is read the same way.
- name: "fmtownshr.zip"
description: "FM Towns II HR firmware set"
system: "fmtowns"
category: bios_zip
path: "geartowns/fmtownshr.zip"
required: false
contents:
- { name: "fmthr_sys.rom", size: 262144, crc32: "8aeff982" }
- { name: "fmt_dos.rom", size: 524288 }
- { name: "fmt_fnt.rom", size: 262144 }
- { name: "fmt_dic.rom", size: 524288 }
- { name: "mytownshr.rom", size: 32, crc32: "c52f0e89" }
source_ref: "src/media/firmware.h:121, src/media/firmware.cpp:28-34, src/media/game_db.h:322-324"
note: "First choice for the HG; the HR itself is not emulated."
- name: "fmtownsftv.zip"
description: "FM Towns II Fresh TV firmware set"
system: "fmtowns"
category: bios_zip
path: "geartowns/fmtownsftv.zip"
required: false
contents:
- { name: "fmt_sys.rom", size: 262144, crc32: "afe4ebcf" }
- { name: "fmt_dos.rom", size: 524288 }
- { name: "fmt_fnt.rom", size: 262144 }
- { name: "fmt_dic.rom", size: 524288 }
- { name: "fmt_f20.rom", size: 524288, crc32: "9f55a20c" }
- { name: "mytownsftv.rom", size: 32, crc32: "a961aae7" }
source_ref: "src/media/firmware.h:122, src/media/firmware.cpp:28-34, src/media/game_db.h:326-329"
note: "Second choice for the HG; the MF/Fresh itself is not emulated."
+39 -30
View File
@@ -1,47 +1,56 @@
emulator: pokketstation
type: libretro
core_classification: official_port
source: "https://github.com/mentalfoundry/pokketstation"
upstream: "https://github.com/mentalfoundry/pokketstation"
profiled_date: "2026-09-17"
source_commit: "484933271b7d362e8e76f1121839c33e5d5ec83e"
core_version: "v1.12"
source: "https://github.com/mentalfoundry/Pokket"
upstream: "https://github.com/mentalfoundry/Pokket"
profiled_date: "2026-10-17"
source_commit: "de736cee392567d58e842f96afe77f707e694ce5"
core_version: "v1.23"
display_name: "Sony - PocketStation (pokketstation)"
cores: [pokketstation]
cores: ["pokketstation", "pokket"]
systems: [sony-pocketstation]
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.12 in the desktop frontend (frontends/desktop/main.c:40).
core, an SDL2 and Win32 desktop application built on Windows only
(frontends/desktop/CMakeLists.txt:1-16), a PS Vita port and an Emscripten build.
The libretro target is pokket_libretro (frontends/libretro/CMakeLists.txt:10-16).
Both the libretro core and the desktop application report POKKET_VERSION,
v1.23 from the project() line of the root CMakeLists.txt (CMakeLists.txt:4-5,
frontends/libretro/libretro.c:189-196).
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, .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.
read_bios opens <system>/pocketstation.bin, reads 16384 bytes and fails when
fewer are read; a longer file is accepted and truncated
(frontends/libretro/libretro.c:545-559). psemu_load_bios copies the image and
rejects any size other than PSEMU_BIOS_SIZE (core/src/psemu.c:92-99).
retro_load_game returns false when read_bios fails, and psemu_run executes
nothing while no BIOS is loaded: there is no HLE and no embedded copy
(frontends/libretro/libretro.c:586-595, core/src/psemu.c:808-812). The IR
Link subsystem runs two units in one core and loads the same file into both
(frontends/libretro/libretro.c:652-693).
Content (.mcr, .mcs, .pss, .mcd, .bin, .gme) is identified by its bytes,
not by the extension: a 128 KB image is a full card, a file opening with
123-456-STD followed by a whole number of 8 KB blocks up to a full card
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:113-140,
211-234, 326-347). 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
enables the date, time and volume override writes into kernel RAM. Any
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:782-792). SWI 0Fh FlashWriteSerial works on 061
and locks the CPU on 110.
enables the date, time and volume override writes into kernel RAM
(core/src/psemu.c:1150-1175). Any 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. SWI 0Fh FlashWriteSerial works on 061 and locks the CPU on
110 (docs/hardware-notes.md:1046-1056).
The desktop application takes the BIOS path from the command line, then
from the bios= key of settings.cfg beside the executable, then falls back
to bios.bin beside the executable; File > Load BIOS opens any path
(frontends/desktop/main.c:630-668, 1000-1035, 2380-2451). The Vita frontend
loads no BIOS yet (frontends/vita/main.c:31-33).
to bios.bin beside the executable; File > Load BIOS opens any path and
writes it to settings.cfg (frontends/desktop/main.c:653-700, 1216-1254,
3016-3020, 3071-3091). The Vita frontend loads no BIOS yet
(frontends/vita/main.c:31-33), and the Emscripten build leaves the BIOS to
the hosting page (frontends/web/README.md:35).
files:
- name: "pocketstation.bin"
@@ -50,7 +59,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:474-477, core/src/psemu.c:854-879, core/include/psemu/psemu.h:19"
source_ref: "frontends/libretro/libretro.c:545-559, frontends/libretro/libretro.c:586-595, core/src/psemu.c:92-99, core/src/psemu.c:808-812, core/src/psemu.c:1150-1175, 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;
+53 -13
View File
@@ -1,17 +1,23 @@
emulator: Xenia Edge
type: standalone
type: "standalone + libretro"
core_classification: community_fork
source: "https://github.com/has207/xenia-edge"
source:
standalone: "https://github.com/has207/xenia-edge"
libretro: "https://git.libretro.com/libretro/xenia-libretro"
upstream: "https://github.com/has207/xenia-edge"
source_commit: "fb1c5bf08b16dab5422136c44c593a9f516750f0"
profiled_date: "2026-09-17"
core_version: "edge"
source_commit:
standalone: "fb1c5bf08b16dab5422136c44c593a9f516750f0"
libretro: "552d508a563dec9a6d05042654de9f76f00e9ba5"
profiled_date: "2026-10-17"
core_version:
standalone: "edge"
libretro: "8dc77b0"
display_name: "Xenia Edge (Xbox 360)"
cores:
- xenia-edge
- "xenia-edge"
- "xenia_edge"
systems:
- microsoft-xbox-360
mode: standalone
notes: |
Xbox 360 emulator forked from Xenia Canary, with a wxWidgets front end, a
@@ -21,6 +27,34 @@ notes: |
XENIA-EDGE rule and runs `xenia_edge <rom>`; RetroDECK unpacks the AppImage
into a xenia-edge component and executes bin/xenia_edge.
The libretro core xenia_edge_libretro is built from libretro/xenia-libretro
on git.libretro.com (branch libretro, CORENAME xenia_edge in .gitlab-ci.yml),
mirrored as WizzardSK/xenia-libretro on GitHub. It carries the xenia-edge
tree merged from edge at 8dc77b09, the release named in upstream.version and
reported as library_version (libretro/CMakeLists.txt:74-78,
libretro/libretro.cpp:1906-1909). The core is one shared library linked from
the emulator's static libraries, without the wxWidgets app
(libretro/CMakeLists.txt:1-13, 104-130), and the top-level CMakeLists.txt
defines XENIA_LIBRETRO for every target of the tree. Everything it keeps
is under <system>/Xenia-Edge: storage root, content, cache, xenia.log, and
xbl_profilename.txt, which it creates with "Player" and reads to name the
profile it creates (libretro/libretro.cpp:1476-1503, 1526-1546). The frame
rate unlock list is compiled into the core and written there when missing
(libretro/CMakeLists.txt:15-33, libretro/libretro_gamedb.cc:36-51), and the
bundled patches of the running title are written to Xenia-Edge/patches with
their core option state before Xenia reads that folder at boot
(libretro/libretro.cpp:791-798). It reads no firmware, font or runtime from
disk. Vulkan comes from the frontend's instance
(libretro/libretro_vk_presenter.cc:42-62), Direct3D 12 runs on the system
runtime with the D3D12Core.dll check of d3d12_provider.cc compiled out under
XENIA_LIBRETRO, and the download prompts for missing runtimes are stubbed
out (libretro/libretro_headless_stubs.cc:22-27).
The Windows build embeds bin/x64/dxil.dll of the DXC release as a resource
(libretro/CMakeLists.txt:35-51, .ci/build-windows-cross.sh:61-80) and writes
it to Xenia-Edge/D3D12/dxil.dll when the copy there differs in size, then
points d3d12_runtime_path at that folder, where the D3D12 provider loads it
by full path (libretro/libretro.cpp:1437-1462, 1552-1559).
No Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules
registered at startup (src/xenia/emulator.cc:395-404), the XEX2 retail and devkit AES
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:67-72), and every
@@ -77,7 +111,8 @@ notes: |
files:
# -- Direct3D 12 runtime, Windows only --
- name: dxil.dll
- name: "dxil.dll"
mode: standalone
path: "D3D12/dxil.dll"
system: microsoft-xbox-360
required: true
@@ -98,9 +133,11 @@ files:
v1.9.2602.24, pinned at sha256
cf658aacf070d3045e31b8f1f8a696c2945f37c1095019481ef7c513368db3b4;
bin/arm64 on ARM64 builds. It is the single entry the installer extracts
from that archive.
from that archive. The libretro core writes its own embedded copy to
Xenia-Edge/D3D12/ in the system directory and loads it from there.
- name: D3D12Core.dll
- name: "D3D12Core.dll"
mode: standalone
path: "D3D12/D3D12Core.dll"
system: microsoft-xbox-360
required: true
@@ -116,7 +153,8 @@ files:
build/native/bin/arm64 on ARM64 builds. The package version has to match
the exported number.
- name: D3D12SDKLayers.dll
- name: "D3D12SDKLayers.dll"
mode: standalone
path: "D3D12/D3D12SDKLayers.dll"
system: microsoft-xbox-360
required: false
@@ -130,7 +168,8 @@ files:
# -- Vulkan runtime, Windows only --
- name: vulkan-1.dll
- name: "vulkan-1.dll"
mode: standalone
path: "Vulkan/vulkan-1.dll"
system: microsoft-xbox-360
required: false
@@ -147,7 +186,8 @@ files:
# -- Visual C++ runtime, Windows only --
- name: vc_redist.x64.exe
- name: "vc_redist.x64.exe"
mode: standalone
system: microsoft-xbox-360
required: false
validation: [signature]