diff --git a/emulators/arduous.yml b/emulators/arduous.yml new file mode 100644 index 00000000..160561eb --- /dev/null +++ b/emulators/arduous.yml @@ -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: [] diff --git a/emulators/boom3.yml b/emulators/boom3.yml new file mode 100644 index 00000000..b39d4920 --- /dev/null +++ b/emulators/boom3.yml @@ -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: [] diff --git a/emulators/directxbox.yml b/emulators/directxbox.yml new file mode 100644 index 00000000..2a5ee3a1 --- /dev/null +++ b/emulators/directxbox.yml @@ -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 = /mcpx_1.0.bin +# bios_rom_str = /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. diff --git a/emulators/doukutsu_rs.yml b/emulators/doukutsu_rs.yml new file mode 100644 index 00000000..dadea819 --- /dev/null +++ b/emulators/doukutsu_rs.yml @@ -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: [] diff --git a/emulators/meteor.yml b/emulators/meteor.yml new file mode 100644 index 00000000..70a54fb8 --- /dev/null +++ b/emulators/meteor.yml @@ -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. diff --git a/emulators/nxengine.yml b/emulators/nxengine.yml new file mode 100644 index 00000000..30f4a3dd --- /dev/null +++ b/emulators/nxengine.yml @@ -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." diff --git a/emulators/sdlpal.yml b/emulators/sdlpal.yml new file mode 100644 index 00000000..60bb96bc --- /dev/null +++ b/emulators/sdlpal.yml @@ -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 /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 /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. diff --git a/emulators/tgbdual.yml b/emulators/tgbdual.yml new file mode 100644 index 00000000..30d0d842 --- /dev/null +++ b/emulators/tgbdual.yml @@ -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: [] diff --git a/emulators/tic80.yml b/emulators/tic80.yml new file mode 100644 index 00000000..c1fec2fe --- /dev/null +++ b/emulators/tic80.yml @@ -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). diff --git a/emulators/virtualxt.yml b/emulators/virtualxt.yml new file mode 100644 index 00000000..6c3cd7a9 --- /dev/null +++ b/emulators/virtualxt.yml @@ -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.