Files
libretro/emulators/o2em.yml
T
Abdessamad Derraz 315dab82b7 feat: give each set its requirement and one pick
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.
2026-11-09 18:19:32 +01:00

99 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
emulator: O2EM
type: libretro
core_classification: community_fork
core: o2em_libretro
cores: [o2em_libretro]
source: "https://github.com/libretro/libretro-o2em"
upstream: "https://sourceforge.net/projects/o2em/"
profiled_date: "2026-03-24"
source_commit: "679d6fec04963f6e70a7ec217e3d0ebb1fe472fc"
core_version: "1.18"
version_basis:
kind: file
path: "libretro.c"
pattern: 'info->library_version\s+=\s+"([^"]+)'
display_name: "Magnavox - Odyssey2 / Philips Videopac+ (O2EM)"
systems:
- odyssey2
- videopac
notes: |
Libretro port of O2EM, an Odyssey2/Videopac emulator by Daniel Boris
and André de la Rocha. Port by Arlindo M. de Oliveira.
One BIOS ROM selected via o2em_bios core option (default o2rom.bin).
Loaded into rom_table[0] (1024 bytes), identified by CRC32. The CRC32 sets
the model (vpp and bios), and an unknown one still loads with vpp=0.
ref: libretro.c:194-226
vpp=1 for Videopac+ variants (g7400.bin, jopac.bin).
Core fails to load without the selected BIOS.
Voice module ("The Voice" speech synthesis add-on) emulation via WAV
samples in system/voice/. 9 banks × 128 samples, named {bank}{sample}.WAV
(e.g. E480.WAV). Compiled with HAVE_VOICE=1 on most platforms. Optional:
core works without samples, speech is silently skipped.
BIOS loading: load_bios() at libretro.c:150-229.
BIOS selection: libretro_core_options.h:52-64.
Voice loading: init_voice() at src/voice.c:39-91, called from libretro.c:1060-1067.
files:
- name: "o2rom.bin"
system: odyssey2
required: true
selection_slot: "o2em-bios"
min_size: 1024
md5: "562d5ebf9e030a40d6fabfc2f33139fd"
sha1: "b2e1955d957a475de2411770452eff4ea19f4cee"
crc32: "8016a315"
validation: [size]
note: >
Odyssey2 BIOS (G7000 NTSC), vpp=0. The default value of o2em_bios, so
the core opens it unless another BIOS is chosen. retro_load_game fails
when the chosen file cannot be opened or holds fewer than 1024 bytes.
Only the first 1024 bytes are read.
source_ref: "libretro_core_options.h:52-64, libretro.c:1143-1147, libretro.c:989, libretro.c:1043-1044, libretro.c:160-189"
- name: "c52.bin"
system: videopac
required: false
selection_slot: "o2em-bios"
min_size: 1024
md5: "f1071cdb0b6b10dde94d3bc8a6146387"
sha1: "a6120aed50831c9c0d95dbdf707820f601d9452e"
crc32: "a318e8d6"
validation: [size]
note: "Videopac G7000 European BIOS. vpp=0, auto-sets PAL. Opened only when o2em_bios names it."
source_ref: "libretro_core_options.h:52-64, libretro.c:1149-1155, libretro.c:1043-1044"
- name: "g7400.bin"
system: videopac
required: false
selection_slot: "o2em-bios"
min_size: 1024
md5: "c500ff71236068e0dc0d0603d265ae76"
sha1: "5130243429b40b01a14e1304d0394b8459a6fbae"
crc32: "e20a9f41"
validation: [size]
note: "Videopac+ G7400 European BIOS. vpp=1. Opened only when o2em_bios names it."
source_ref: "libretro_core_options.h:52-64, libretro.c:1156-1161, libretro.c:1043-1044"
- name: "jopac.bin"
system: videopac
required: false
selection_slot: "o2em-bios"
min_size: 1024
md5: "279008e4a0db2dc5f1c048853b033828"
sha1: "54b8d2c1317628de51a85fc1c424423a986775e4"
crc32: "11647ca5"
validation: [size]
note: "Videopac+ G7400 French BIOS (JoPac). vpp=1. Opened only when o2em_bios names it."
source_ref: "libretro_core_options.h:52-64, libretro.c:1162-1167, libretro.c:1043-1044"
- name: "voice/"
type: directory
required: false
category: game_data
note: "The Voice speech synthesis WAV samples. 9 banks (E4, E8-EF) × 128 samples."
source_ref: "src/voice.c:38-90, libretro.c:1060-1068"