feat: add 10 emulator profiles (119-series batch 3)

arduous (Arduboy AVR sim, no BIOS), boom3 (Doom 3, game data only),
directxbox (Xbox, mcpx + cromwell), doukutsu_rs (Cave Story, no BIOS),
meteor (GBA, full HLE), nxengine (Cave Story, Doukutsu.exe + data/),
tgbdual (Game Boy link, HLE), tic80 (fantasy console),
virtualxt (IBM XT, open BIOS embedded), sdlpal (Sword & Fairy, 13 .mkf)

125 total profiles.
This commit is contained in:
Abdessamad Derraz
2026-03-17 20:21:14 +01:00
parent ebc8e4413f
commit 6a778a09a3
10 changed files with 637 additions and 0 deletions

43
emulators/arduous.yml Normal file
View File

@@ -0,0 +1,43 @@
emulator: Arduous
type: libretro
source: "https://github.com/libretro/arduous"
cores:
- arduous
systems:
- arduboy
notes: |
Arduous is an Arduboy emulator built on simavr (ATmega32U4 AVR simulator)
with SSD1306 OLED display emulation, ported to libretro. It is distinct
from the Ardens core, which is a separate Arduboy emulator.
No BIOS, bootloader, or system files are required. The core operates as a
pure AVR simulator:
- The game content (.hex Intel HEX format) is parsed at load time via an
in-tree ihex reader (arduous.cpp:60-166) and written directly into the
simavr flash memory at the address specified in the hex file
(arduous.cpp:189). No separate bootloader is loaded.
- The MCU is hardcoded to atmega32u4 at 16 MHz (arduous.h:70-71).
simavr handles CPU initialization internally via avr_make_mcu_by_name().
- A commented-out loadFirmware() function (arduous.cpp:22-29) suggests
ELF firmware loading was considered but never implemented.
- EEPROM (1024 bytes), system RAM, and VRAM are exposed via the libretro
memory interface (RETRO_MEMORY_SAVE_RAM, RETRO_MEMORY_SYSTEM_RAM,
RETRO_MEMORY_VIDEO_RAM) but are not loaded from external files.
- The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. The
retro_load_game() function only reads the content data buffer passed
by the frontend (libretro.cpp:108-110).
- RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME is set to false (libretro.cpp:123),
meaning a game ROM is always required.
Supported ROM format: Intel HEX (.hex) only. The valid_extensions field
lists "hex". A TODO comment mentions .arduboy ZIP support but it is not
implemented.
files: []

24
emulators/boom3.yml Normal file
View File

@@ -0,0 +1,24 @@
emulator: boom3
type: libretro
source: "https://github.com/libretro/boom3"
cores: [boom3, boom3_xp]
systems: [doom3]
verification: existence
notes: >
Doom 3 source port based on dhewm3 (GPL Doom 3 engine). The core accepts
.pk4 extensions (retro_get_system_info sets valid_extensions = "pk4").
Content is loaded directly from the .pk4 file path - the engine extracts
the grandparent directory as fs_basepath (libretro.cpp:1097,1135-1136
via extract_directory called twice on info->path) and expects the standard
Doom 3 directory layout with base/ containing pak000.pk4 through pak008.pk4.
BASE_GAMEDIR is hardcoded to "base" (Licensee.h:58). The boom3_xp variant
compiles with _D3XP defined, which passes "+set fs_game d3xp" at startup
(libretro.cpp:538-544) to load the Resurrection of Evil expansion from a
d3xp/ subdirectory alongside base/. The filesystem code (FileSystem.cpp:2125)
scans for .pk4 files in the game directory and loads them in order, with
higher-numbered paks overriding lower ones. The core requires OpenGL
(RETRO_ENVIRONMENT_SET_HW_RENDER) and XRGB8888 pixel format. All required
files are commercial Doom 3 game data, not engine firmware. No BIOS or
system files are needed in the RetroArch system directory.
files: []

73
emulators/directxbox.yml Normal file
View File

@@ -0,0 +1,73 @@
emulator: DirectXBox
type: libretro
source: "https://github.com/libretro/libretro-directxbox"
cores:
- directxbox
systems:
- xbox
# DirectXBox is an experimental original Xbox emulator written from scratch for
# libretro. Status: alpha. Cromwell BIOS boots but cannot run games. Microsoft
# BIOS does not boot yet (ATA/OHCI unimplemented). No audio, no HW acceleration.
#
# BIOS loading (libretro.cpp:199-210):
# Paths are hardcoded relative to the system directory:
# mcpx_rom_str = <system_dir>/mcpx_1.0.bin
# bios_rom_str = <system_dir>/cromwell_1024.bin
# Both are passed to Xbox::LoadBootRoms(flash, mcpx).
# A commented-out alternative exists: xbox-3944.bin (Microsoft retail BIOS).
#
# LoadBootRoms (xbox.cpp:143-210):
# 1. Opens flash ROM, validates size is a multiple of 0x10000
# 2. Maps flash ROM to 0xFF000000-0xFFFFFFFF (mirrored to fill 16 MB)
# 3. Opens MCPX ROM, validates size is exactly 512 bytes
# 4. Overlays MCPX at the last 512 bytes of flash region
# If MCPX path is empty, step 3-4 are skipped (Debug/Chihiro machines).
# retro_load_game returns false if either file fails to load.
#
# Machine type (libretro_core_options.h:67-81):
# Core option "libretro-xbox_machine-type" selects hardware revision.
# Default "auto" detects from BIOS. Retail v1.0 uses McpxRomVersion::Mcpx1_0,
# all other retail revisions use Mcpx1_1. Debug and Chihiro use McpxRomVersion::None
# (no MCPX ROM needed).
#
# The .info file declares no firmware_count. Both files are mandatory for retail
# machine types. The core has no fallback or built-in replacement.
files:
- name: "mcpx_1.0.bin"
path: "mcpx_1.0.bin"
size: 512
required: true
note: >
Xbox MCPX ROM (secret boot ROM on the southbridge). Contains the initial
boot vector that loads the flash BIOS. Overlaid at the last 512 bytes of
the 16 MB flash region (0xFFFFFE00-0xFFFFFFFF). Only needed for retail
machine types; Debug and Chihiro skip this file.
source_ref: "src/xbox.cpp:186-206, src/libretro/libretro.cpp:202"
- name: "cromwell_1024.bin"
path: "cromwell_1024.bin"
required: true
note: >
Cromwell open-source Xbox BIOS (1024 KB variant). Loaded as the flash ROM
and mirrored across the 16 MB flash region at 0xFF000000. Size must be a
multiple of 0x10000. This is the only BIOS that currently boots in the
emulator. The Microsoft retail BIOS (xbox-3944.bin) is referenced in
commented-out code but does not work yet.
source_ref: "src/xbox.cpp:143-178, src/libretro/libretro.cpp:203-204"
notes:
status: >
Alpha stage. Only Cromwell BIOS boots. No commercial game compatibility.
Missing ATA (hard drive), OHCI (USB/controllers), audio, and GPU HW
acceleration. The core requires libvirt86 for x86 virtualization.
microsoft_bios: >
The source references xbox-3944.bin as an alternative flash ROM (Microsoft
retail BIOS, typically 256 KB). It is commented out in libretro.cpp:204
because ATA and OHCI hardware are not yet implemented, preventing the
Microsoft BIOS from completing boot.
machine_types: >
xbox_database.cpp defines retail v1.0 through v1.6, debug, and chihiro
variants. Each has different TV encoder (Conexant/Focus/XCalibur) and MCPX
revision (X2/X3) settings. The core option auto-detects from the loaded BIOS.

54
emulators/doukutsu_rs.yml Normal file
View File

@@ -0,0 +1,54 @@
emulator: "doukutsu-rs"
type: libretro
source: "https://github.com/DrGlaucous/doukutsu-rs-libretro"
cores:
- doukutsu_rs
systems:
- cavestory
# doukutsu-rs (d-rs) is an open-source reimplementation of the Cave Story
# (Doukutsu Monogatari) engine in Rust, ported to libretro by Dr. Glaucous.
# It plays the original freeware Cave Story and Cave Story+ (Steam/Switch).
#
# The core does NOT use RetroArch's system directory for any BIOS or firmware.
# get_system_directory() is defined in libretro.rs:1255 but never called by
# the core (the import is commented out in core.rs:28).
#
# Instead, the core loads game data relative to the content path provided by
# the frontend. The target is either a Doukutsu.exe (freeware) or a directory
# containing a data/ subfolder (core.rs:226-233):
#
# content_path = "/path/to/Doukutsu.exe" (or directory for CS Switch)
# resource_dir = parent_of(content_path) + "/data/"
#
# The data/ directory must contain the freeware Cave Story game assets:
# npc.tbl, mrmap.bin, *.png, Stage/, Npc/, org/ (music), *.tsc (scripts)
#
# These are the original Pixel game files from Doukutsu.exe, extracted by
# the doukutsu-rs/game-data repo (CSE2E-converted freeware data). They are
# copyrighted by Daisuke "Pixel" Amaya but freely redistributable for
# non-commercial use.
#
# Internal engine data (fonts, organya wavetables, gamecontrollerdb.txt,
# touch overlay, lightmap) is compiled into the core binary via
# include_bytes! in builtin_fs.rs, so nothing extra is needed in system/.
#
# The .info file (doukutsu_rs_libretro.info) declares:
# supported_extensions = "exe|dll|so"
# needs_fullpath = true
# supports_no_game = true
# notes = "(!) drs requires data ROM 'Cave Story (en).zip'."
# "|(!) Load Content 'Doukutsu.exe', Also works with all other ports of CS"
#
# No firmware entries are declared in the .info file.
# Valid extensions: exe, dll, so (loads the original game binary as content path)
notes: |
No BIOS or firmware files required in the system directory.
The core reads game data from a data/ subfolder next to the loaded content.
Users must provide the Cave Story freeware game files (Doukutsu.exe and its
data/ directory) or a Cave Story+ installation as the content to load.
All engine-internal resources (fonts, wavetables, controller mappings) are
built into the core binary.
files: []

55
emulators/meteor.yml Normal file
View File

@@ -0,0 +1,55 @@
emulator: Meteor GBA
type: libretro
source: "https://github.com/libretro/meteor-libretro"
cores:
- meteor
systems:
- nintendo-gba
notes: |
Meteor is a Game Boy Advance emulator by Philippe Daouadi (2009-2011).
The libretro port does NOT load or use any external BIOS file. The core has
a complete HLE BIOS implementation (ameteor/source/bios.cpp) that handles
GBA SWI calls directly in C++. When no real BIOS is loaded (HasBios() returns
false), Cpu::SoftwareInterrupt() dispatches SWI calls to the HLE handlers
instead of executing the BIOS ROM (ameteor/source/cpu.cpp:244-311).
The standalone frontends (GTK, text) expose LoadBios() for optional real BIOS
loading, but the libretro port (libretro/libretro.cpp) never calls LoadBios()
and never queries RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. The retro_load_game()
function only loads the ROM via LoadRom().
HLE SWI coverage: SoftReset (0x00), RegisterRamReset (0x01), Halt (0x02),
IntrWait (0x04), VBlankIntrWait (0x05), Div (0x06), DivArm (0x07),
Sqrt (0x08), ArcTan (0x09), ArcTan2 (0x0A), CpuSet (0x0B),
CpuFastSet (0x0C), BgAffineSet (0x0E), ObjAffineSet (0x0F),
LZ77UnCompWram (0x11), LZ77UnCompVram (0x12), HuffUnComp (0x13),
RLUnCompWram (0x14), RLUnCompVram (0x15).
Missing from HLE: Stop (0x03), BitUnPack (0x10), Diff8bitUnFilter (0x16-0x17),
Diff16bitUnFilter (0x18), SoundBias (0x19), SoundDriverInit (0x1A-0x1F),
MidiKey2Freq (0x1F), SoundDriverVSyncOff/On (0x28-0x29), GetBiosChecksum (0x0D).
The BIOS memory region (0x00000000-0x00003FFF, 16 KB) is allocated only if
LoadBios() is called. Memory reads to this region return BIOS protection values
(0x0E for 8-bit, 0xF00E for 16-bit, 0xE1B0F00E for 32-bit) when no BIOS is
loaded and PC is outside the BIOS area.
Bios000h() (entry point) initializes stack pointers and jumps to 0x08000004,
matching real GBA hardware boot sequence. In the libretro port, retro_reset()
resets all units except BIOS and ROM memory.
files: []
platform_details:
gba:
bios_size: 16384 # 0x4000
hle_bios: true
source_ref: "ameteor/source/bios.cpp, ameteor/source/cpu.cpp:244-311"
notes: |
Full HLE BIOS. The libretro port never loads an external BIOS file.
Cpu::SoftwareInterrupt() checks HasBios() -- if false (always in libretro),
SWI calls are routed to C++ reimplementations. If a real BIOS were loaded
(standalone only), execution would go through the actual BIOS ROM code via
SoftwareInterrupt() -> branch to 0x08.

64
emulators/nxengine.yml Normal file
View File

@@ -0,0 +1,64 @@
emulator: NXEngine
type: libretro
source: "https://github.com/libretro/nxengine-libretro"
systems: [cave-story]
notes: |
NXEngine is an open-source reimplementation of the Cave Story (Doukutsu
Monogatari) engine by Studio Pixel. It is not an emulator but a source port
that loads the original freeware game data directly.
The core requires the original freeware Cave Story distribution placed in
{system_dir}/nxengine/. When launched without a content file, it looks for
Doukutsu.exe at that path (libretro.cpp:254-259). When launched with a .exe
content file, it uses the parent directory of that file instead
(libretro.cpp:244).
At startup (main.cpp:66-90), the core opens Doukutsu.exe and extracts from
it: ORG music files (extractorg.c), PXT sound effects (extractpxt.c), stage
tile attributes (extractstages.c), bitmap graphics, and the wavetable
(cachefiles.c:484). These are kept in memory, not written to disk.
The data/ directory must exist alongside Doukutsu.exe with the full game
asset tree: 30 root-level files (sprites, backgrounds, script tables),
36 NPC sprite sheets in data/Npc/, and 333 stage files in data/Stage/
(maps .pxm, tile attributes .pxa, entity lists .pxe, scripts .tsc, and
tileset images via Prt*.pbm). The core verifies data/ exists by checking
for data/npc.tbl (main.cpp:47-63).
The core also reads endpic/ bitmaps for ending sequences, extracted from
Doukutsu.exe at runtime (cachefiles.c:460-484).
All required files ship in the datafiles/ directory of the libretro repo
itself, since Cave Story is freeware. No separate BIOS or firmware is
needed. The entire freeware distribution is the "system" requirement.
sprites.sif has a compiled-in fallback (sprites_sif.h) and is the only
data file that can be missing without a fatal error (cachefiles.c:515-521).
Valid content extension: .exe (retro_get_system_info, libretro.cpp:96).
files:
- name: "Doukutsu.exe"
system: cave-story
description: "Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)"
required: true
size: 1478656
md5: "38695d3d69d7a0ada8178072dad4c58b"
sha1: "bb2d0441e073da9c584f23c2ad8c7ab8aac293bf"
source_ref: "main.cpp:77-78 (opened for extraction), libretro.cpp:258 (existence check)"
notes: "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable.dat from this binary at each launch."
- name: "data/npc.tbl"
system: cave-story
description: "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)"
required: true
source_ref: "main.cpp:50 (existence check for data/ directory validation)"
notes: "Located in system/nxengine/data/. The core uses this file to verify the data directory is present."
- name: "data/"
system: cave-story
description: "Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)"
required: true
source_ref: "cachefiles.c:38-480 (complete file list loaded at init)"
notes: "Must contain root assets (Arms.pbm, MyChar.pbm, etc.), Npc/ (36 sprite sheets), and Stage/ (333 map/script/tileset files). All files from the original freeware release."

199
emulators/sdlpal.yml Normal file
View File

@@ -0,0 +1,199 @@
emulator: SDLPAL
type: libretro
source: "https://github.com/sdlpal/sdlpal"
cores:
- sdlpal
systems:
- sdlpal
# SDLPAL is an open-source reimplementation of the classic Chinese RPG
# "Xian Jian Qi Xia Zhuan" (Sword and Fairy / PAL) by SoftStar Inc.
#
# It does NOT include any game data. The original game files are proprietary
# and must be obtained separately (e.g. from the Steam release).
#
# The core accepts a .cfg file pointing to the game directory (needs_fullpath).
# When launched without a game (supports_no_game = true), it looks for data
# in <system_dir>/sdlpal/ (libretro.c:201-204).
#
# Data file search (util.c:728-781, UTIL_CheckResourceFiles):
# Required: 13 common .mkf archives + message file (word.dat or m.msg)
# Optional: sound files (voc.mkf, sounds.mkf), music files (midi.mkf, mus.mkf)
#
# Additional optional files loaded at runtime:
# desc.dat - object descriptions (global.c:204, DOS version only)
# mus.mkf - MIDI music archive (audio.c:305)
#
# All files are game data, not BIOS or firmware. No system files are needed
# beyond the original game resource files.
notes: |
No BIOS or firmware required. SDLPAL is a game engine that needs the
original PAL (Sword and Fairy) game data files to run.
Place game files in <system_dir>/sdlpal/ or point a .cfg file at the
game directory. The game is available on Steam (app 1546570).
The core supports both DOS (original 1995) and Win95 (1998 remake)
versions of the game data. It auto-detects which version is present.
files:
# ================================================================
# Required game data archives (proprietary, not distributable)
# util.c:733-737 - UTIL_CheckResourceFiles common_files[]
# ================================================================
- name: "abc.mkf"
path: "sdlpal/abc.mkf"
required: true
source_ref: "util.c:734, battle.c:879, global.c:55"
note: >
Animation/battle character data archive. Required for battle scenes
and character animations.
- name: "ball.mkf"
path: "sdlpal/ball.mkf"
required: true
source_ref: "util.c:734, global.c:177"
note: >
Ball/magic effect graphics archive.
- name: "data.mkf"
path: "sdlpal/data.mkf"
required: true
source_ref: "util.c:734, global.c:178"
note: >
Core game data archive containing scripts, events, and game logic.
- name: "f.mkf"
path: "sdlpal/f.mkf"
required: true
source_ref: "util.c:734, global.c:179"
note: >
Face/portrait graphics archive for character dialog.
- name: "fbp.mkf"
path: "sdlpal/fbp.mkf"
required: true
source_ref: "util.c:735, global.c:175"
note: >
Full-screen background picture archive (cutscenes, title screen).
- name: "fire.mkf"
path: "sdlpal/fire.mkf"
required: true
source_ref: "util.c:735, global.c:180"
note: >
Fire/spell effect graphics archive.
- name: "gop.mkf"
path: "sdlpal/gop.mkf"
required: true
source_ref: "util.c:735, res.c:234"
note: >
GOP (game object palette/graphics) archive.
- name: "map.mkf"
path: "sdlpal/map.mkf"
required: true
source_ref: "util.c:735, res.c:233, global.c:55"
note: >
Map tile and layout data archive for all game locations.
- name: "mgo.mkf"
path: "sdlpal/mgo.mkf"
required: true
source_ref: "util.c:736, global.c:176"
note: >
Map graphic object (sprite overlay) archive.
- name: "pat.mkf"
path: "sdlpal/pat.mkf"
required: true
source_ref: "util.c:736, palette.c:53"
note: >
Palette data archive for color management.
- name: "rgm.mkf"
path: "sdlpal/rgm.mkf"
required: true
source_ref: "util.c:736, global.c:181"
note: >
RGM graphics archive.
- name: "rng.mkf"
path: "sdlpal/rng.mkf"
required: true
source_ref: "util.c:736, rngplay.c:402"
note: >
RNG animation/cutscene sequence archive.
- name: "sss.mkf"
path: "sdlpal/sss.mkf"
required: true
source_ref: "util.c:737, global.c:182"
note: >
SSS data archive.
# ================================================================
# Message/text data (one of these is required)
# util.c:739-741 - msg_files[]
# ================================================================
- name: "word.dat"
path: "sdlpal/word.dat"
required: true
source_ref: "util.c:741, text.c:719, global.c:197"
note: >
Game text/dialog data file (DOS version). Contains all in-game text
strings. Either word.dat or m.msg is needed depending on game version.
- name: "m.msg"
path: "sdlpal/m.msg"
required: false
source_ref: "util.c:740"
note: >
Alternative message file format. Used by some game distributions
instead of word.dat. The core checks for a configured message file
first, then falls back to word.dat.
# ================================================================
# Sound effect files (optional, at least one recommended)
# util.c:743 - sound_files[]
# ================================================================
- name: "voc.mkf"
path: "sdlpal/voc.mkf"
required: false
source_ref: "util.c:743, sound.c:969"
note: >
VOC format sound effects archive (DOS version). One of voc.mkf or
sounds.mkf is needed for sound effects.
- name: "sounds.mkf"
path: "sdlpal/sounds.mkf"
required: false
source_ref: "util.c:743, sound.c:964"
note: >
WAV format sound effects archive (Win95 version). Alternative to
voc.mkf with higher quality audio.
# ================================================================
# Music files (optional, at least one recommended)
# util.c:744 - music_files[]
# ================================================================
- name: "midi.mkf"
path: "sdlpal/midi.mkf"
required: false
source_ref: "util.c:744, midi.c:78, midi_tsf.c:68"
note: >
MIDI music archive. Used when Music type is set to MIDI.
- name: "mus.mkf"
path: "sdlpal/mus.mkf"
required: false
source_ref: "util.c:744, audio.c:305"
note: >
RIX/OPL music archive. Default music source for the game. Contains
FM synthesizer music data played through OPL emulation.

29
emulators/tgbdual.yml Normal file
View File

@@ -0,0 +1,29 @@
emulator: TGB Dual
type: libretro
source: "https://github.com/libretro/tgbdual-libretro"
cores:
- TGB Dual
systems:
- nintendo-gb
- nintendo-gbc
notes: |
TGB Dual is a Game Boy / Game Boy Color emulator by GIGO and Hii with
link cable support for two Game Boy units side by side.
No BIOS or boot ROM files are required or supported. The core does not
call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY for firmware loading and does
not attempt to open any files from the system directory.
In cpu.cpp:57, the program counter is initialized to 0x100 (post-boot ROM
entry point), and cpu::reset() sets all registers to their post-boot
values directly (AF=0x01B0 for DMG, 0x11B0 for CGB). This means the
core completely bypasses the boot ROM sequence via HLE register setup.
The load_rom() path in libretro.cpp passes ROM data directly to the gb
class without any BIOS file concatenation or boot ROM mapping.
Supported extensions: gb, dmg, gbc, cgb, sgb.
Library version: v0.8.3.
files: []

44
emulators/tic80.yml Normal file
View File

@@ -0,0 +1,44 @@
emulator: TIC-80
type: libretro
source: "https://github.com/libretro/TIC-80"
cores:
- tic80
systems:
- tic80
notes: |
TIC-80 is a fantasy computer for making, playing and sharing tiny games.
The libretro port wraps the nesbox/TIC-80 engine as a submodule.
The core loads .tic cartridge files (and .png for cart-as-image format)
entirely through the libretro data buffer (need_fullpath = false,
tic80_libretro.c:340). Content bytes are passed directly to tic80_load()
at retro_load_game() (tic80_libretro.c:1152).
The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. There is no
code path that reads any file from the system directory. No BIOS, firmware,
or boot ROM exists for this platform -- TIC-80 is a self-contained virtual
machine with all system resources built into the engine binary.
The TIC-80 VM provides 80x45 tilemap, 240x136 screen, 256 8x8 sprites,
4 channels of sound, and supports Lua, Moonscript, JavaScript, Wren,
Fennel, Squirrel, Ruby, Python, and Janet as scripting languages.
files: []
platform_details:
cartridge_format:
extensions: "tic, png"
source_ref: "tic80_libretro.c:339"
notes: |
.tic is the native cartridge format containing code, sprites, map,
sound, and music data. .png support allows loading cartridges
encoded as cover images (code stored in PNG metadata).
runtime:
source_ref: "nesbox/TIC-80 (submodule at core/)"
notes: |
The entire TIC-80 runtime (CPU, GPU, APU, scripting engines) is
compiled into the core binary. No external dependencies at runtime.
State serialization uses TIC_PERSISTENT_SIZE * 4 bytes of pmem()
data (tic80_libretro.c:1203-1243).

52
emulators/virtualxt.yml Normal file
View File

@@ -0,0 +1,52 @@
emulator: VirtualXT
type: libretro
source: "https://github.com/libretro/virtualxt"
systems: [ibm-pc]
# VirtualXT is a Turbo PC/XT emulator (Intel 8088/186). Written in Odin.
# All BIOS ROMs are embedded at compile time via #load() directives in
# src/frontend/core.odin. No external BIOS files are required at runtime.
# The default machine setup (setup_default_machine) loads these embedded ROMs:
# - BIOS: GLaBIOS 0.2.6 or Turbo XT BIOS 3.1 (user selects via core option)
# - VGA BIOS: vgabios.bin (loaded when VGA video mode is selected)
# - Disk Extension: vxtx.bin (always loaded)
# - RTC BIOS: GLaTICK 0.8.4 (loaded when RTC is enabled)
# Core option "virtualxt_bios" selects between GLaBIOS and TurboXT at startup.
# Core option "virtualxt_video" selects CGA or VGA (VGA loads vgabios.bin).
# Core option "virtualxt_rtc" selects GLaTICK or none (loads GLaTICK_0.8.4_AT.ROM).
# INI config files (.ini extension) can reference external ROM paths, but the
# standard usage path does not require any files in the system directory.
# Embedded BIOS files (shipped inside the compiled core binary):
#
# GLABIOS.ROM 8192 bytes md5:bbeb6f7e2175732eebc3f0b49976347a sha1:701bb8ab0f9797581f795394a5c09eb147ff93d2
# pcxtbios.bin 8192 bytes md5:336bf8888a22075caa09e2e8e4d96a3b sha1:f7b73e441fd7b582a493837658fa17407e851d7c
# vgabios.bin 32768 bytes md5:9c80b0a0784dcf80f84c35b1cc8db81b sha1:251d85a90d3df3d116c30568167587ee3819f623
# vxtx.bin 2048 bytes md5:c6c7eef021e5e40503cb5ae860f02fde sha1:ccd27f24e5d7bd7d14b336be5b79b7ef8ba6e6be
# GLaTICK_0.8.4_AT.ROM 2048 bytes md5:06ead46b977ffb4a056844e2965653eb sha1:025c5d6d9391698488cebad11623ee239ce070a2
# Source references:
# src/frontend/core.odin:295-370 - BIOS embedding via #load("bios:...", []byte)
# src/frontend/options.odin:55 - core option "virtualxt_bios" (GLaBIOS|TurboXT)
# src/modules/rom/rom.odin:42-67 - load_from_file (INI path only)
# bios/ - open-source BIOS files (GLaBIOS, TurboXT, vgabios)
files: []
notes:
bios_approach: >
VirtualXT embeds all BIOS ROMs into the core binary at compile time using
Odin's #load() directive. The bios/ directory in the source tree contains
open-source replacements: GLaBIOS (GPL), Turbo XT BIOS 3.1, and vgabios.
No proprietary IBM PC/XT BIOS is needed.
ini_config: >
When loading an .ini file, the core can instantiate ROM modules with external
file paths (rom.odin handles string values for "mem" via load_from_file).
This is an advanced usage path; standard operation needs no external files.
supported_extensions: "img, ini, exe, com"
supported_features: >
Intel 8088/186 CPU, CGA/VGA graphics, EMS memory, ethernet adapter,
host file sharing (RIFS2), GDB server, floppy and hard disk images.