mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-11 12:33:53 -06:00
Three changes to the search-list model, one commit because the readers
and the profiles must move together for the schema to hold.
Set requirement in a groups map. pom2 falls back on apple2.rom for the
][ and the ][+, and on apple2e.rom for the //e it boots and for the
unenhanced //e: one required on the file could not say both. A profile
now declares groups: {name: {required}}, a member writes no required
of its own (schema and validate_schemas refuse one) and load_emulator_
profiles derives it, true when one of its sets is. group takes a name,
a list, or a map from set to rank where the rank differs per set. pom2
is grouped from SystemProfile.cpp and MainWindow.cpp:246-296 at its pin.
One member per required set under --required-only. The pick is the
first the code reads among the held members the region filter leaves,
by rank then declaration order; a set the platform declares a member
of is carried by that declaration. The emulator pack, verify
--emulator, the platform pack, its manifest and verify --platform read
alternatives.required_only_spares or core_file_spares.
variant_group is now selection_slot: files a core chooses between by
a rule other than first found (disc territory for PicoDrive and
Pizza Boy SC, the o2em_bios option, a WebAssembly probe in SWF
Player). Where the code takes any one, the field became a group:
ARMSX1 (ArmSxBackend.java:149-157, name order), ePSXe (load_bios
0x433540-0x433621 of the 2.0.5 Linux x64 binary, one configured path,
HLE when BiosHLE is set), FPse and FPse-NG, DXX-Rebirth's HOGs
(inferno.cpp:472-512). odin and zesarux carried it with no effect.
slot.py compares ranks only between candidates that share a set.
94 lines
3.1 KiB
YAML
94 lines
3.1 KiB
YAML
emulator: FreeChaF
|
|
type: libretro
|
|
core_classification: pure_libretro
|
|
source: "https://github.com/libretro/FreeChaF"
|
|
profiled_date: "2026-03-23"
|
|
source_commit: "76c7a84f1f7e80f3e6f2bba96fe100cb24e99124"
|
|
core_version: "1.0"
|
|
version_basis:
|
|
kind: file
|
|
path: "src/libretro.c"
|
|
pattern: 'library_version\s*=\s*"([^"]+)"'
|
|
display_name: "Fairchild - ChannelF (FreeChaF)"
|
|
cores:
|
|
- freechaf
|
|
systems:
|
|
- fairchild-channelf
|
|
|
|
notes: |
|
|
FreeChaF is a Fairchild Channel F emulator written for libretro.
|
|
|
|
BIOS loading is in src/libretro.c:186-208. The core first tries to load
|
|
sl90025.bin (Channel F II PSU1) at address 0x000. If that fails, it falls
|
|
back to sl31253.bin (original Channel F PSU1) at the same address. PSU2
|
|
(sl31254.bin) is always loaded at address 0x400.
|
|
|
|
Memory layout from src/memory.h:27-30:
|
|
0x000-0x3FF PSU1 ROM (sl31253 or sl90025)
|
|
0x400-0x7FF PSU2 ROM (sl31254)
|
|
0x800-0x1FFF cartridge ROM
|
|
0x2000+ VRAM
|
|
|
|
If either PSU ROM fails to load, the core switches to experimental HLE
|
|
(high-level emulation) for that PSU. A warning message is shown to the
|
|
user recommending real BIOS files. HLE state is tracked per-PSU via
|
|
hle_state.psu1_hle and hle_state.psu2_hle (src/channelf_hle.c).
|
|
|
|
The .info file declares all three firmware files as required (opt=false),
|
|
but the core does not abort on a missing BIOS. It falls back to HLE.
|
|
|
|
groups:
|
|
psu1:
|
|
required: false
|
|
|
|
files:
|
|
- name: "sl31253.bin"
|
|
system: fairchild-channelf
|
|
group: psu1
|
|
priority: 2
|
|
hle_fallback: true
|
|
note: "Channel F PSU1 ROM (original). Fallback if sl90025.bin is missing."
|
|
source_ref: "src/libretro.c:192"
|
|
|
|
- name: "sl31254.bin"
|
|
system: fairchild-channelf
|
|
required: false
|
|
hle_fallback: true
|
|
note: "Channel F PSU2 ROM. Always loaded at address 0x400."
|
|
source_ref: "src/libretro.c:202"
|
|
|
|
- name: "sl90025.bin"
|
|
system: fairchild-channelf
|
|
group: psu1
|
|
priority: 1
|
|
hle_fallback: true
|
|
note: "Channel F II PSU1 ROM. Tried first, preferred over sl31253.bin."
|
|
source_ref: "src/libretro.c:186"
|
|
|
|
platform_details:
|
|
bios_mapping:
|
|
target: "0x000-0x7FF in 64K memory space"
|
|
source_ref: "src/memory.h:27-29, src/memory.c:29-61"
|
|
note: |
|
|
MEMORY_loadSysROM_libretro() reads the file and copies it into
|
|
Memory[] at the given address offset. PSU1 is loaded at 0x000,
|
|
PSU2 at 0x400. The loader caps file size to (MEMORY_SIZE - address)
|
|
to prevent overflow. MEMORY_RAMStart is advanced past the loaded
|
|
ROM to protect it from writes.
|
|
|
|
hle_fallback:
|
|
source_ref: "src/channelf_hle.c"
|
|
note: |
|
|
When BIOS files are missing, FreeChaF uses HLE to emulate the
|
|
PSU routines in software. This is marked as experimental and may
|
|
cause compatibility issues with some games. Each PSU can
|
|
independently fall back to HLE.
|
|
|
|
load_priority:
|
|
source_ref: "src/libretro.c:186-198"
|
|
note: |
|
|
PSU1 loading order: sl90025.bin (Channel F II) first, then
|
|
sl31253.bin (original Channel F) as fallback. If both fail,
|
|
HLE is used. sl90025.bin is the preferred BIOS as it includes
|
|
Channel F II improvements.
|