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

boytacean (GB Rust, 6 boot ROMs embedded), emux_chip8 (no BIOS),
fake08 (PICO-8, Lua runtime compiled in), jaxe (CHIP-8, fonts hardcoded),
lowresnx (fantasy console), opentyrian (Tyrian freeware data),
openlara (Tomb Raider engine, game data), squirreljme (J2ME, 8 JARs),
vitaquake2 (Quake 2, 4 variants), xrick (data.zip sound pack)

145 total profiles.
This commit is contained in:
Abdessamad Derraz
2026-03-17 20:33:26 +01:00
parent 31501211de
commit a5553def94
10 changed files with 945 additions and 0 deletions

72
emulators/boytacean.yml Normal file
View File

@@ -0,0 +1,72 @@
emulator: Boytacean
type: libretro
source: "https://github.com/joamag/boytacean"
cores:
- boytacean
systems:
- nintendo-gb
- nintendo-gbc
notes: |
Boytacean is a Game Boy / Game Boy Color emulator written in Rust by Joao Magalhaes.
No external BIOS or boot ROM files are needed.
The core ships with multiple boot ROMs compiled directly into the binary as static
byte arrays in src/data.rs. For DMG mode the default is "DMG Bootix" (an open-source
boot ROM forked from SameBoy's Bootix project, 256 bytes). For CGB mode the default
is "CGB Boytacean" (a custom open-source CGB boot ROM, 2304 bytes). The original
Nintendo DMG, SGB, and CGB boot ROMs are also embedded as static arrays (DMG_BOOT,
SGB_BOOT, CGB_BOOT) but the defaults use the open-source replacements.
The libretro frontend (frontends/libretro/src/core.rs) calls instance.load(true) in
retro_load_game(), which routes through load_dmg() or load_cgb() depending on the
cartridge header. These call load_boot_static() which copies one of the embedded byte
arrays into MMU memory. There is no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY call, no
filesystem access for boot ROMs, and no core option to load external boot ROM files.
The .info file (boytacean_libretro.info) lists no firmware entries.
Boot ROM selection defaults:
- DMG: BootRom::DmgBootix (gb.rs:1389) - open-source, 256 bytes
- CGB: BootRom::CgbBoytacean (gb.rs:1398) - open-source, 2304 bytes
All boot ROM source code lives in src/boot/, forked from SameBoy and assembled
with rgbds. The compiled binaries are then converted to Rust const arrays in data.rs.
files: []
analysis:
embedded_boot_roms:
dmg_boot:
constant: DMG_BOOT
size: 256
description: "Original Nintendo DMG boot ROM (embedded, not default)"
source_ref: "data.rs:14-27"
sgb_boot:
constant: SGB_BOOT
size: 256
description: "Super Game Boy boot ROM (embedded, not default)"
source_ref: "data.rs:29-42"
dmg_bootix:
constant: DMG_BOOTIX
size: 256
description: "Open-source DMG boot ROM from Bootix project (default for DMG)"
source_ref: "data.rs:44-57"
mgb_bootix:
constant: MGB_BOOTIX
size: 256
description: "Open-source MGB (Game Boy Pocket) boot ROM from Bootix project"
source_ref: "data.rs:59-72"
cgb_boot:
constant: CGB_BOOT
size: 2304
description: "Original Nintendo CGB boot ROM (embedded, not default)"
source_ref: "data.rs:74-175"
cgb_boytacean:
constant: CGB_BOYTACEAN
size: 2304
description: "Custom open-source CGB boot ROM (default for CGB)"
source_ref: "data.rs:177-275"
filesystem_access: false
system_directory_used: false
boot_rom_source: "src/boot/ (assembly, forked from SameBoy)"

43
emulators/emux_chip8.yml Normal file
View File

@@ -0,0 +1,43 @@
emulator: "emux (CHIP-8)"
type: libretro
source: "https://github.com/libretro/emux"
cores:
- emux_chip8
systems:
- chip8
notes: |
emux is a multi-system emulator supporting CHIP-8, Game Boy, NES, and
Sega Master System as separate libretro cores. The CHIP-8 core
(emux_chip8) does not require any external BIOS or firmware files.
The CHIP-8 architecture has no real BIOS. The standard font/character
set (hex digits 0-F, 5 bytes each = 80 bytes) is hardcoded in
mach/chip8.c:40-57 as the char_mem[] array. On reset, this font data
is copied into the beginning of the 4 KB RAM (address 0x000-0x04F)
via memcpy in chip8_reset() at mach/chip8.c:105.
ROM loading: the game ROM is loaded via file_open(PATH_DATA, ...) in
chip8_init() at mach/chip8.c:68-74. On reset, ROM contents are copied
into RAM starting at address 0x200 (mach/chip8.c:113). The core
accepts .ch8, .bin, and .rom extensions (libretro/Makefile.rules:20).
Memory map from mach/chip8.c:17-20:
0x000-0x04F font/character data (hardcoded)
0x050-0x1FF unused
0x200-0xFFF program ROM + working RAM
The libretro frontend retrieves the system directory via
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (libretro/libretro.c:34) but
only uses it as a general config path, not for BIOS loading.
files: []
platform_details:
bios_mapping:
target: "none"
source_ref: "mach/chip8.c:40-57, mach/chip8.c:98-115"
notes: |
No external BIOS. The 80-byte character font is compiled into the
binary as char_mem[] and memcpy'd into RAM[0x000] on every reset.
This is standard CHIP-8 behavior -- all interpreters embed the font.

45
emulators/fake08.yml Normal file
View File

@@ -0,0 +1,45 @@
emulator: FAKE-08
type: libretro
source: "https://github.com/jtothebell/fake-08"
cores:
- fake08
systems:
- pico8
notes: |
FAKE-08 is an open-source PICO-8 compatible runtime for running .p8 and
.p8.png cartridges on platforms where the official PICO-8 binary is not
available (3DS, Vita, Switch, Wii U, various handhelds).
The core retrieves RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY in
retro_set_environment() (libretro.cpp:162-163) but never uses the value.
No file is loaded from the system directory. The PICO-8 boot sequence,
global Lua functions, and default cart menu are compiled directly into the
binary as string constants (p8GlobalLuaFunctions.h, DefaultCart.h).
When no ROM is passed (supports_no_game = true), the core queues its
built-in BIOS cart "__FAKE08-BIOS.p8" (libretro.cpp:751). This is not
an external file -- it is generated internally by the VM.
The core accepts .p8 (text) and .png (cartridge-as-image) formats
(libretro.cpp:258). Content is loaded either via the libretro data buffer
or full path depending on the _NEED_FULL_PATH_ compile flag.
files: []
platform_details:
cartridge_format:
extensions: "p8, png"
source_ref: "platform/libretro/libretro.cpp:258"
notes: |
.p8 is the PICO-8 text cartridge format containing Lua code, gfx,
gff, map, sfx, and music sections. .png is the cartridge-as-image
format where cart data is steganographically encoded in the image.
runtime:
source_ref: "source/vm.h, source/p8GlobalLuaFunctions.h"
notes: |
The FAKE-08 VM reimplements the PICO-8 API (128x128 screen, 16 colors,
4-channel audio, Lua scripting) entirely in C++. The built-in BIOS
provides a cart browser and error display. Audio runs at 22050 Hz
with save state support via custom serialization (libretro.cpp:517-736).

44
emulators/jaxe.yml Normal file
View File

@@ -0,0 +1,44 @@
emulator: JAXE
type: libretro
source: "https://github.com/libretro/jaxe"
cores:
- jaxe
systems:
- chip8
notes: |
JAXE is a CHIP-8, SCHIP, and XO-CHIP emulator by Kurtis Dinelle,
ported to libretro. Supports .ch8, .sc8, .xo8, and .hc8 ROMs.
No external BIOS or font files required. The core has firmware_count = 0
in jaxe_libretro.info and never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIR.
Font data is hardcoded in chip8_load_font() at src/chip8.c:119-168.
The standard 4x5 hex font (0-F, 80 bytes) is loaded at address 0x000,
and the SCHIP 8x10 big hex font (0-F, 160 bytes) follows immediately
after at address 0x050. Both are written directly into chip8->RAM[]
during chip8_reset() -> chip8_load_font().
Memory layout from include/chip8.h:42-45:
0x000-0x04F standard font (NUM_FONT_BYTES = 80)
0x050-0x0EF big font (NUM_BIG_FONT_BYTES = 160)
0x0F0-0x0FF stack (STACK_SIZE = 16)
0x100-0x10F audio buffer (AUDIO_BUF_SIZE = 16)
0x200+ program ROM (PC_START_ADDR_DEFAULT)
The fonts/dbgfont.ttf file in the repo is only used by the standalone
build (src/main.c:19) for the SDL debugger overlay, not by the
libretro core.
files: []
platform_details:
bios_mapping:
target: "none"
source_ref: "jaxe_libretro.info:13, src/chip8.c:119-168"
notes: |
All font/sprite data is compiled into the binary. The standard
CHIP-8 hex font (5 bytes per character, 16 characters) and the
SCHIP big hex font (10 bytes per character, 16 characters) are
stored as a static array in chip8_load_font() and copied into
RAM on every reset. No file I/O is performed for BIOS or fonts.

42
emulators/lowresnx.yml Normal file
View File

@@ -0,0 +1,42 @@
emulator: LowRes NX
type: libretro
source: "https://github.com/timoinutilis/lowres-nx"
cores:
- lowresnx
systems:
- lowresnx
notes: |
LowRes NX is a fantasy console simulating an imaginary 8/16-bit handheld.
It runs programs written in a custom BASIC dialect, loaded as .nx files.
The libretro port reads game content entirely through the retro_game_info
data buffer (need_fullpath = false, libretro_main.c:317). The .nx source
code is copied into memory at retro_load_game() (libretro_main.c:490)
and compiled by the built-in interpreter.
The boot intro sequence is compiled from bootIntroSourceCode, a string
constant embedded in boot_intro.c -- not loaded from any external file.
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 is required.
The virtual machine provides a 160x128 screen, 64 colors, 256 8x8
sprites, 4-channel sound, d-pad + 2 buttons, and a pause button.
files: []
platform_details:
cartridge_format:
extensions: "nx"
source_ref: "libretro_main.c:318"
notes: |
.nx files contain LowRes NX BASIC source code as plain text.
The interpreter compiles the source at load time.
runtime:
source_ref: "core/ (compiled into binary)"
notes: |
The entire LowRes NX runtime (CPU emulation, video chip, audio chip,
BASIC compiler/interpreter, boot intro) is compiled into the core
binary. No external dependencies at runtime. Version 1.2.

28
emulators/openlara.yml Normal file
View File

@@ -0,0 +1,28 @@
emulator: OpenLara
type: libretro
source: "https://github.com/libretro/OpenLara"
cores: [openlara]
systems: [tomb-raider]
verification: existence
notes: >
Open-source reimplementation of the classic Tomb Raider engine (TR1-TR4).
Supports PC (.PHD, .TR2, .TR4), PlayStation (.PSX), and Saturn (.SAT)
level formats. The core accepts phd|psx|tr2|sat extensions
(retro_get_system_info sets valid_extensions, main.cpp:246).
need_fullpath is true - the core resolves sibling game assets relative
to the content directory. retro_load_game (main.cpp:602) derives
contentDir from the loaded level file path and strips the level/
subdirectory if present, then passes a relative levelpath to the engine.
Game version is auto-detected by probing for known level files:
DATA/GYM.PHD (TR1 PC), PSXDATA/GYM.PSX (TR1 PSX), DATA/GYM.SAT
(TR1 Saturn), data/ASSAULT.TR2 (TR2 PC), DATA/ASSAULT.PSX (TR2 PSX),
data/JUNGLE.TR2 (TR3 PC), DATA/JUNGLE.PSX (TR3 PSX), data/angkor1.tr4
(TR4 PC) - see gameflow.h:1047-1071. Audio tracks are loaded from
audio/ subdirectories as .ogg files or cdaudio.wad containers
(gameflow.h:1248-1350). The system directory is used only to create
a cache folder at {system_dir}/openlara/cache/ (main.cpp:177-197).
No BIOS, firmware, or engine data files are required in the system
directory. All required data comes from the original game files loaded
as content.
files: []

475
emulators/opentyrian.yml Normal file
View File

@@ -0,0 +1,475 @@
emulator: OpenTyrian
type: libretro
source: "https://github.com/trapexit/libretro-opentyrian"
cores: [opentyrian]
systems: [tyrian]
verification: existence
notes: |
OpenTyrian is a source port of the DOS vertical scrolling shooter Tyrian,
ported to libretro. It loads the Tyrian 2.1 freeware game data directly.
Tyrian 1.x, 2.0, and Tyrian 2000 data files are NOT compatible.
The core's .info file sets supports_no_game = true. The core locates the
data directory by probing for tyrian1.lvl in several paths (file.c:33-58):
1. custom_data_dir (set via --data= CLI argument, params.c:120)
2. TYRIAN_DIR (compile-time constant, Makefile:5-8)
3. "data" (relative subdirectory)
4. "." (current working directory)
The first path containing tyrian1.lvl wins.
On startup (opentyr.c:270-388), the core:
- Scans for episodes by checking tyrian1.lvl through tyrian5.lvl
(episodes.c:270-277)
- Loads palette data from palette.dat (palette.c:45)
- Loads main shape tables from tyrian.shp (sprite.c:669-722, 12 sprite
banks packed in one file: fonts, interface, option sprites, game sprites,
weapon sprites, etc.)
- Loads sound effects from tyrian.snd and voice samples from voices.snd
(nortsong.c:112-134, opentyr.c:333)
- Loads music from music.mus (loudness.c:196)
- Loads help/item data from tyrian.hdt (helptext.c:184, episodes.c:60)
- Loads picture data from tyrian.pic (picload.c:32)
- Loads credits from tyrian.cdt (mainint.c:2002)
Each episode loads additional files dynamically (episodes.c:261-263):
- tyrianN.lvl (level data, N=1-5)
- levelsN.dat (episode level definitions)
- cubetxtN.dat (datacube text for story mode)
The game engine also loads shape files on demand:
- shapesX.dat where X is a character from a 34-entry lookup table
(lvlmast.c:23-27, tyrian2.c:3079). Characters used:
2,4,7,8,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,5,#,V,0,@,3,^,9
- newshX.shp loaded via JE_loadCompShapes (sprite.c:469-481) using the
same character set plus '~' for destruct mode (destruct.c:569) and
'1' for arrow/mouse cursor sprites (mainint.c:493,884,1462) and
'6' for explosion sprites (tyrian2.c:771)
Additional optional files:
- tyrianc.shp and voicesc.snd for Christmas mode (opentyr.c:301-309)
- tyrend.anm for ending animation (tyrian2.c:2473)
- tshp2.pcx loaded during gameplay (tyrian2.c:2757, pcxload.c:25)
- estsc.shp for ending sequence sprites (mainint.c:1995)
- demo.1 through demo.5 for demo playback (mainint.c:1781-1786)
All filenames must be lowercase on case-sensitive filesystems. The repo
includes lower-script.sh for batch renaming.
The Tyrian 2.1 freeware data is available at:
https://camanis.net/tyrian/tyrian21.zip
No separate BIOS or firmware is needed. The freeware game data set is the
sole system requirement.
files:
# -----------------------------------------------------------
# Core data files (required, loaded unconditionally at init)
# -----------------------------------------------------------
- name: "tyrian.shp"
system: tyrian
description: "Main shape tables (12 sprite banks: fonts, interface, options, game sprites)"
required: true
source_ref: "sprite.c:669-722 (JE_loadMainShapeTables)"
- name: "palette.dat"
system: tyrian
description: "Color palette data (all palettes used by the game)"
required: true
source_ref: "palette.c:45 (JE_loadPals)"
- name: "tyrian.hdt"
system: tyrian
description: "Help and item data (weapons, ships, shields, enemies, help text)"
required: true
source_ref: "episodes.c:60 (JE_loadItemDat), helptext.c:184 (JE_loadHelpText)"
- name: "tyrian.pic"
system: tyrian
description: "Picture data (menu backgrounds, cutscene images)"
required: true
source_ref: "picload.c:32 (JE_loadPic)"
- name: "tyrian.cdt"
system: tyrian
description: "Credits text (encrypted pascal strings)"
required: true
source_ref: "mainint.c:2002 (JE_drawCredits)"
- name: "tyrian.snd"
system: tyrian
description: "Sound effects"
required: true
source_ref: "nortsong.c:112, opentyr.c:333 (JE_loadSndFile)"
- name: "voices.snd"
system: tyrian
description: "Voice samples"
required: true
source_ref: "nortsong.c:134, opentyr.c:333 (JE_loadSndFile)"
- name: "music.mus"
system: tyrian
description: "Music data (all game tracks)"
required: true
source_ref: "loudness.c:196 (load_music)"
# -----------------------------------------------------------
# Episode level files (episode 1 required, 2-5 optional)
# -----------------------------------------------------------
- name: "tyrian1.lvl"
system: tyrian
description: "Episode 1 level data (also used as data directory detection marker)"
required: true
source_ref: "file.c:51 (data_dir probe), episodes.c:274 (JE_scanForEpisodes)"
- name: "levels1.dat"
system: tyrian
description: "Episode 1 level definitions"
required: true
source_ref: "episodes.c:263 (JE_initEpisode), tyrian2.c:2434"
- name: "cubetxt1.dat"
system: tyrian
description: "Episode 1 datacube text (in-game story lore)"
required: true
source_ref: "episodes.c:262 (JE_initEpisode), game_menu.c:1723"
- name: "tyrian2.lvl"
system: tyrian
description: "Episode 2 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels2.dat"
system: tyrian
description: "Episode 2 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt2.dat"
system: tyrian
description: "Episode 2 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian3.lvl"
system: tyrian
description: "Episode 3 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels3.dat"
system: tyrian
description: "Episode 3 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt3.dat"
system: tyrian
description: "Episode 3 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian4.lvl"
system: tyrian
description: "Episode 4 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels4.dat"
system: tyrian
description: "Episode 4 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt4.dat"
system: tyrian
description: "Episode 4 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian5.lvl"
system: tyrian
description: "Episode 5 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels5.dat"
system: tyrian
description: "Episode 5 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt5.dat"
system: tyrian
description: "Episode 5 datacube text"
required: false
source_ref: "episodes.c:262"
# -----------------------------------------------------------
# Shape data files (loaded per-level, character from lookup)
# -----------------------------------------------------------
- name: "shapes2.dat"
system: tyrian
description: "Level tileset shapes (character '2')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes3.dat"
system: tyrian
description: "Level tileset shapes (character '3')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes4.dat"
system: tyrian
description: "Level tileset shapes (character '4')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes5.dat"
system: tyrian
description: "Level tileset shapes (character '5')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes7.dat"
system: tyrian
description: "Level tileset shapes (character '7')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes8.dat"
system: tyrian
description: "Level tileset shapes (character '8')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes9.dat"
system: tyrian
description: "Level tileset shapes (character '9')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes0.dat"
system: tyrian
description: "Level tileset shapes (character '0')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesa.dat"
system: tyrian
description: "Level tileset shapes (character 'A')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesb.dat"
system: tyrian
description: "Level tileset shapes (character 'B')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesc.dat"
system: tyrian
description: "Level tileset shapes (character 'C')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesd.dat"
system: tyrian
description: "Level tileset shapes (character 'D')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapese.dat"
system: tyrian
description: "Level tileset shapes (character 'E')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesf.dat"
system: tyrian
description: "Level tileset shapes (character 'F')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesg.dat"
system: tyrian
description: "Level tileset shapes (character 'G')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesh.dat"
system: tyrian
description: "Level tileset shapes (character 'H')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesi.dat"
system: tyrian
description: "Level tileset shapes (character 'I')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesj.dat"
system: tyrian
description: "Level tileset shapes (character 'J')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesk.dat"
system: tyrian
description: "Level tileset shapes (character 'K')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesl.dat"
system: tyrian
description: "Level tileset shapes (character 'L')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesm.dat"
system: tyrian
description: "Level tileset shapes (character 'M')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesn.dat"
system: tyrian
description: "Level tileset shapes (character 'N')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapeso.dat"
system: tyrian
description: "Level tileset shapes (character 'O')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesp.dat"
system: tyrian
description: "Level tileset shapes (character 'P')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesq.dat"
system: tyrian
description: "Level tileset shapes (character 'Q')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesr.dat"
system: tyrian
description: "Level tileset shapes (character 'R')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapess.dat"
system: tyrian
description: "Level tileset shapes (character 'S')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapest.dat"
system: tyrian
description: "Level tileset shapes (character 'T')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesu.dat"
system: tyrian
description: "Level tileset shapes (character 'U')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesv.dat"
system: tyrian
description: "Level tileset shapes (character 'V')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
# -----------------------------------------------------------
# Compressed shape files (newshX.shp, loaded per-level)
# -----------------------------------------------------------
- name: "newsh1.shp"
system: tyrian
description: "Compressed sprites (arrows, mouse cursor)"
required: false
source_ref: "mainint.c:493,884,1462 (JE_loadCompShapes '1')"
- name: "newsh6.shp"
system: tyrian
description: "Compressed sprites (explosions)"
required: false
source_ref: "tyrian2.c:771 (JE_loadCompShapes '6')"
- name: "newsh~.shp"
system: tyrian
description: "Compressed sprites (destruct mode)"
required: false
source_ref: "destruct.c:569 (JE_loadCompShapes '~')"
# -----------------------------------------------------------
# Optional / special mode files
# -----------------------------------------------------------
- name: "tyrianc.shp"
system: tyrian
description: "Christmas mode shape tables (replaces tyrian.shp at Xmas)"
required: false
source_ref: "opentyr.c:301-309"
- name: "voicesc.snd"
system: tyrian
description: "Christmas mode voice samples (replaces voices.snd at Xmas)"
required: false
source_ref: "opentyr.c:301,333"
- name: "tyrend.anm"
system: tyrian
description: "Ending animation sequence"
required: false
source_ref: "tyrian2.c:2473 (JE_playAnim)"
- name: "tshp2.pcx"
system: tyrian
description: "Additional ship graphics (PCX image)"
required: false
source_ref: "tyrian2.c:2757, pcxload.c:25-29"
- name: "estsc.shp"
system: tyrian
description: "Ending sequence character sprites"
required: false
source_ref: "mainint.c:1995 (load_sprites_file EXTRA_SHAPES)"
- name: "demo.1"
system: tyrian
description: "Demo replay file 1"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.2"
system: tyrian
description: "Demo replay file 2"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.3"
system: tyrian
description: "Demo replay file 3"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.4"
system: tyrian
description: "Demo replay file 4"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.5"
system: tyrian
description: "Demo replay file 5"
required: false
source_ref: "mainint.c:1781-1786"

91
emulators/squirreljme.yml Normal file
View File

@@ -0,0 +1,91 @@
emulator: SquirrelJME
type: libretro
source: "https://github.com/SquirrelJME/SquirrelJME"
cores: [squirreljme]
systems: [j2me]
verification: existence
notes: |
Java ME 8 virtual machine for libretro. Runs J2ME MIDlets and older flip-phone games.
The core needs a class library JAR placed in RetroArch's system directory.
It searches for the JAR using a priority list: versioned-fast first, then versioned,
then unversioned variants. The first match wins.
Search order (from nanocoat/src/boot.c sjme_nvm_romNames[]):
1. squirreljme-{version}-fast.jar
2. squirreljme-{version}.jar
3. squirreljme-{version}-test.jar
4. squirreljme-{version}-slow.jar
5. squirreljme-{version}-slow-test.jar
6. squirreljme-fast.jar
7. squirreljme.jar
8. squirreljme-test.jar
9. squirreljme-slow.jar
10. squirreljme-slow-test.jar
Current version: 0.3.0. All firmware entries are marked optional in the .info file
because the core can launch its built-in modeless stars demo without a class library.
For actual J2ME software, one of these JARs is required.
The class library JAR is built from the SquirrelJME project itself (not a third-party
BIOS dump). It is open source under MPL-2.0.
files:
# -- Versioned JARs (v0.3.0, preferred) --
- name: "squirreljme-0.3.0-fast.jar"
description: "SquirrelJME class library v0.3.0 (fast/optimized build)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:102, squirreljme_libretro.info:firmware5"
note: "Highest priority versioned JAR. Optimized runtime, recommended for normal use."
- name: "squirreljme-0.3.0.jar"
description: "SquirrelJME class library v0.3.0 (standard build)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:103, squirreljme_libretro.info:firmware4"
note: "Standard versioned build. Second in search priority."
- name: "squirreljme-0.3.0-slow.jar"
description: "SquirrelJME class library v0.3.0 (slow/interpreter build)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:105, squirreljme_libretro.info:firmware6"
note: "Pure interpreter mode, no optimizations. Useful for debugging."
- name: "squirreljme-0.3.0-slow-test.jar"
description: "SquirrelJME class library v0.3.0 (slow build with tests)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:106, squirreljme_libretro.info:firmware7"
note: "Interpreter mode with built-in test suites."
# -- Unversioned JARs (fallback) --
- name: "squirreljme-fast.jar"
description: "SquirrelJME class library (fast/optimized, unversioned)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:107, squirreljme_libretro.info:firmware1"
note: "Highest priority unversioned JAR. Renamed from a versioned build."
- name: "squirreljme.jar"
description: "SquirrelJME class library (standard, unversioned)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:108, squirreljme_libretro.info:firmware0"
note: "Most common filename. If only one JAR is provided, use this name."
- name: "squirreljme-slow.jar"
description: "SquirrelJME class library (slow/interpreter, unversioned)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:110, squirreljme_libretro.info:firmware2"
note: "Pure interpreter, unversioned."
- name: "squirreljme-slow-test.jar"
description: "SquirrelJME class library (slow with tests, unversioned)"
required: false
bundled: false
source_ref: "nanocoat/src/boot.c:111, squirreljme_libretro.info:firmware3"
note: "Interpreter with tests, unversioned."

27
emulators/vitaquake2.yml Normal file
View File

@@ -0,0 +1,27 @@
emulator: vitaQuakeII
type: libretro
source: "https://github.com/libretro/vitaquake2"
cores: [vitaquake2, vitaquake2-rogue, vitaquake2-xatrix, vitaquake2-zaero]
systems: [quake2]
verification: existence
notes: >
Quake II engine source port. Four separate cores are built from the same codebase
via the basegame make variable: vitaquake2 (base game, baseq2), vitaquake2-rogue
(Ground Zero expansion, compiled with -DROGUE), vitaquake2-xatrix (The Reckoning,
compiled with -DXATRIX), and vitaquake2-zaero (Zaero mod, compiled with -DZAERO).
Each core validates that the content path contains its expected game directory name
(libretro.c:2073-2085,2173) and refuses to load mismatched content. The core
accepts .pak extensions (retro_get_system_info sets valid_extensions = "pak").
Content is loaded from the PAK file path - the parent of the game subdirectory
becomes basedir (libretro.c:2206-2209), then FS_InitFilesystem (files.c:778)
adds baseq2/ and loads pak0.pak through pak9.pak sequentially from each game
directory. For expansion cores, retro_run passes "+set game rogue|xatrix|zaero"
(libretro.c:2232-2239) so the engine loads both baseq2/ and the expansion
directory. PAK0_CHECKSUM 0x40e614e0 (files.c:30) matches the retail pak0.pak
but is only used for directory CRC validation, not as a load gate.
PAK files are game data (maps, textures, models, sounds) from the retail game,
not engine firmware. No files are required in the RetroArch system directory.
The core needs no BIOS or firmware. Optional CD music in OGG format can be
placed in a music/ subdirectory alongside the PAK files.
files: []

78
emulators/xrick.yml Normal file
View File

@@ -0,0 +1,78 @@
emulator: XRick
type: libretro
source: "https://github.com/libretro/xrick-libretro"
cores:
- xrick
systems:
- rick-dangerous
notes: |
XRick is an open-source reimplementation of the Rick Dangerous engine (Core Design, 1989),
ported to libretro. It is not a general-purpose emulator; it only plays Rick Dangerous.
The core sets need_fullpath = true, valid_extensions = "*|zip", and supports launching
without content (RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME = true, libretro-core.c:93-97).
Game data handling works in two modes (retro_load_game, libretro-core.c:312-360):
1. Content provided: the content path is passed directly as the -data argument
(line 318: snprintf "xrick" "-data" "%s"). Content can be data.zip or a directory.
2. No content (standalone): the core builds the path {system_dir}/xrick/data.zip
using fill_pathname_join_special_ext(RETRO_DIR, "xrick", "data", ".zip") at lines
324-326. If this file is missing, a "game files missing" error is displayed (line 337)
and loading fails.
The fallback data path at line 359 confirms the expected location:
snprintf(RPATH, ... "xrick" "-data" "%s/xrick/data.zip", RETRO_DIR)
All game graphics, maps, tile data, entity tables, and screen layouts are compiled directly
into the binary from dat_*.c source files (dat_ents.c, dat_maps.c, dat_picsPC.c,
dat_picsST.c, dat_screens.c, dat_snd.c, dat_spritesPC.c, dat_spritesST.c, dat_tilesPC.c,
dat_tilesST.c). Only the sound files are external.
data.zip contains 29 WAV files in a sounds/ subdirectory: sound effects (bombshht, bonus,
box, bullet, crawl, die, ent0-ent8, explode, gameover, jump, pad, sbonus1, sbonus2, stick,
walk) and music tracks (tune0 through tune5). The data.c module handles opening files from
either a .zip archive (via unzip.c) or a flat directory, selected by extension detection
(data.c:56-73).
xrick.c:23 shows the hardcoded fallback: data_setpath("data.zip") when no -data argument
is provided.
system_dir is obtained via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (libretro-core.c:185-189),
falling back to "." if unavailable.
The data.zip file ships in the xrick-libretro repository root and is the original xrick
0.21212 game data release from 2002 by BigOrno.
files:
- name: "xrick/data.zip"
system: rick-dangerous
description: "Rick Dangerous sound data (29 WAV files: sfx and music tracks)"
required: true
size: 1457440
md5: "a471e64e9f69afbe59c10cc94ed1b184"
sha1: "ecfc092fe6371dbf38e238a8ba5f90785b5db52d"
source_ref: "libretro-core.c:324-326 (path construction), libretro-core.c:328-357 (missing file error), libretro-core.c:359 (final path confirmation)"
notes: "Placed in system/xrick/data.zip. Contains sounds/ directory with 29 WAV files from the original xrick 0.21212 release. Without this file, standalone mode fails with 'XRick game files missing from frontend system directory'. Ships in the libretro repo root."
analysis:
content_type: game_engine
content_extensions: ["*", "zip"]
system_directory_used: true
supports_no_content: true
data_files_location: "system/xrick/data.zip (standalone) or content path (with content)"
compiled_in_data:
- "dat_ents.c (entity/NPC tables)"
- "dat_maps.c (level map data)"
- "dat_picsPC.c, dat_picsST.c (background images, PC and Atari ST)"
- "dat_screens.c (screen layout data)"
- "dat_snd.c (sound metadata/indices)"
- "dat_spritesPC.c, dat_spritesST.c (sprite graphics)"
- "dat_tilesPC.c, dat_tilesST.c (tile graphics)"
external_data:
sounds:
- "bombshht.wav, bonus.wav, box.wav, bullet.wav, crawl.wav, die.wav"
- "ent0.wav through ent8.wav (9 entity sound effects)"
- "explode.wav, gameover.wav, jump.wav, pad.wav"
- "sbonus1.wav, sbonus2.wav, stick.wav, walk.wav"
- "tune0.wav through tune5.wav (6 music tracks)"