Files
libretro/emulators/virtualjaguar.yml
T
Abdessamad Derraz 2ea745a062 feat: virtualjaguar reads BIOS files now, so declare them
The profile said "No external BIOS files are required or loaded by this
core" and carried an empty file list. The core reads up to eleven names
from the system directory today.

Staging left retro_load_game for stage_cart_boot_rom, which tries a file
before the embedded array. BT_CUSTOM, a value the enum did not carry
when this was profiled, searches six cart boot ROM names across three
directories; BT_M_SERIES tries jagboot_m.rom. Both need 0x20000 bytes,
the size copied to jagMemSpace + 0xE00000.

The Jaguar CD BIOS is the larger addition: three name groups over five
directories, accepted at exactly 0x40000 bytes and recognised by CRC32
against 687068D5 retail and 55A0669C developer. The group order follows
virtualjaguar_cd_bios_type, then generic names, then the other type,
since a lone file of the wrong type still beats the embedded copy.

None is required, every path falls back to an embedded array. What they
buy is the real dump instead of the reimplementation. The collection
holds the cart boot ROM under boot.rom; both CD BIOSes and jagboot_m.rom
are absent and now show as gaps rather than as nothing at all.
2026-09-04 17:54:05 +02:00

197 lines
7.1 KiB
YAML

emulator: Virtual Jaguar
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/virtualjaguar-libretro"
upstream: "http://shamusworld.gotdns.org/git/virtualjaguar"
profiled_date: "2026-09-04"
source_commit: "03ced5f"
core_version: "v2.1.0"
display_name: "Atari - Jaguar (Virtual Jaguar)"
cores:
- virtualjaguar
systems:
- atari-jaguar
notes: |
The boot ROMs are still compiled in, generated by bin2c, but the core no
longer only uses them. Staging moved out of retro_load_game into
stage_cart_boot_rom, which reads a file first and falls back to the
embedded array (libretro.c:5339-5382). BT_M_SERIES tries jagboot_m.rom in
the system directory; BT_CUSTOM, a value the enum did not carry before,
searches six names across the system directory and two subdirectories
(libretro.c:5293-5337). Either way the file has to be 0x20000 bytes, the
size copied to jagMemSpace + 0xE00000; anything shorter is a short read and
the embedded Series K takes over.
The Jaguar CD BIOS is the larger change. stage_cd_bios calls
load_external_cd_bios, which walks three name groups over five directories
(libretro.c:5049-5158). The group order follows the
virtualjaguar_cd_bios_type option, then generic names, then the other type,
because a lone file of the wrong type still beats the embedded copy: the
user put it there deliberately. A candidate is accepted at exactly 0x40000
bytes and recognised by CRC32 against two constants
(libretro.c:4964-4965,4971-5048).
The "BIOS" core option (virtualjaguar_bios, disabled by default) still
controls whether the boot ROM is executed at startup. When enabled, the
boot ROM entry point is copied to jaguarMainRAM
(src/core/jaguar.c:1466-1468). When disabled, jaguarRunAddress is written
directly, skipping the boot animation.
Nothing here is required: every path falls back to an embedded copy, and a
file only replaces it. What the files buy is the real dump rather than the
reimplementation, which is why they are collected.
files:
- name: "[BIOS] Atari Jaguar CD (World).j64"
system: atari-jaguar
required: false
size: 262144
crc32: "687068d5"
validation: [size, crc32]
aliases:
- "[BIOS] Atari Jaguar CD (World).rom"
- "[BIOS] Atari Jaguar CD (World).bin"
- "jaguarcd_bios.bin"
- "jagcd_bios.bin"
- "jaguarcd.bin"
- "jagcd.bin"
- "Jaguar CD BIOS.rom"
- "Jaguar CD BIOS.bin"
description: "Jaguar CD retail BIOS, replacing the embedded copy"
source_ref: "libretro.c:4964, libretro.c:4971-5048, libretro.c:5049-5158, libretro.c:5159-5175"
note: >-
Searched in the system directory and under Atari - Jaguar,
Atari - Jaguar CD, jaguar and jaguarcd. Accepted at exactly 262144
bytes and recognised by its CRC32; a file of the right size whose
checksum matches neither constant is counted as rejected and the
embedded BIOS is used. The generic names are tried after the type the
virtualjaguar_cd_bios_type option selects.
- name: "[BIOS] Atari Jaguar Developer CD (World).j64"
system: atari-jaguar
required: false
size: 262144
crc32: "55a0669c"
validation: [size, crc32]
aliases:
- "[BIOS] Atari Jaguar Developer CD (World).rom"
- "[BIOS] Atari Jaguar Developer CD (World).bin"
description: "Jaguar CD developer BIOS, selected by virtualjaguar_cd_bios_type"
source_ref: "libretro.c:4965, libretro.c:5049-5158"
note: >-
Same search and the same size and checksum test as the retail BIOS.
Whichever type the option does not select is still tried last.
- name: jagboot.rom
system: atari-jaguar
required: false
size: 131072
validation: [size]
aliases:
- boot.rom
- boot0.rom
- "[BIOS] Atari Jaguar (World).j64"
- "[BIOS] Atari Jaguar Stubulator '94 (World).j64"
- "[BIOS] Atari Jaguar Stubulator '93 (World).j64"
description: "Cart boot ROM read when the BIOS type is set to custom"
source_ref: "libretro.c:5293-5337, libretro.c:5339-5356"
note: >-
Reached only through BT_CUSTOM. Searched in the system directory and
under Atari - Jaguar and jaguar. No checksum is tested; a read shorter
than 131072 bytes leaves the embedded Series K in place.
- name: jagboot_m.rom
system: atari-jaguar
required: false
size: 131072
validation: [size]
description: "Model-M cart boot ROM, read when the BIOS type is Model M"
source_ref: "libretro.c:5358-5380"
note: >-
Read from the system directory only, under that exact name, and only
when biosType is BT_M_SERIES. A short read falls back to the embedded
Model M array.
analysis:
embedded_bios:
k_series_boot_rom:
source_file: src/jagbios.c
header: src/jagbios.h
symbol: jaguarBootROM
size: 131072 # 0x20000, 128 KB
description: "Jaguar K-series boot ROM"
filedb_crc: "0xFB731AAA"
filedb_name: "[BIOS] Atari Jaguar (World)"
m_series_boot_rom:
source_file: src/jagbios2.c
header: src/jagbios2.h
symbol: jaguarBootROM2
size: 131072 # 0x20000, 128 KB
description: "Jaguar M-series boot ROM"
cd_boot_rom:
source_file: src/jagcdbios.c
header: src/jagcdbios.h
symbol: jaguarCDBootROM
size: 262144 # 0x40000, 256 KB
description: "Jaguar CD boot ROM"
filedb_crc: "0x687068D5"
filedb_name: "[BIOS] Atari Jaguar CD (World)"
stubulator_93:
source_file: src/jagstub1bios.c
header: src/jagstub1bios.h
symbol: jaguarDevBootROM1
size: 131072 # 0x20000, 128 KB
description: "Jaguar Stubulator '93 dev BIOS"
filedb_crc: "0xE60277BB"
filedb_name: "[BIOS] Atari Jaguar Stubulator '93 (World)"
stubulator_94:
source_file: src/jagstub2bios.c
header: src/jagstub2bios.h
symbol: jaguarDevBootROM2
size: 131072 # 0x20000, 128 KB
description: "Jaguar Stubulator '94 dev BIOS"
filedb_crc: "0x8D15DBC6"
filedb_name: "[BIOS] Atari Jaguar Stubulator '94 (World)"
dev_cd_boot_rom:
source_file: src/jagdevcdbios.c
header: src/jagdevcdbios.h
symbol: jaguarDevCDBootROM
size: 262144 # 0x40000, 256 KB
description: "Jaguar Developer CD boot ROM"
filedb_crc: "0x55A0669C"
filedb_name: "[BIOS] Atari Jaguar Developer CD (World)"
bios_type_enum:
source_ref: "src/core/settings.h:61"
values:
- BT_K_SERIES
- BT_M_SERIES
- BT_STUBULATOR_1
- BT_STUBULATOR_2
- BT_CUSTOM
core_option:
key: virtualjaguar_bios
label: "BIOS"
description: "Use the Jaguar BIOS, required for some games."
default: disabled
source_ref: "libretro_core_options.h:123"
bios_loading:
mechanism: embedded
load_address: "0xE00000"
load_size: "0x20000"
source_ref: "libretro.c:5339-5382, libretro.c:6295"
selection_logic: "BT_CUSTOM reads a file, BT_M_SERIES tries jagboot_m.rom, otherwise the embedded array"
external_loading: true
note: |
jagBootPath and CDBootPath struct fields are never set in the libretro
port. The standalone Virtual Jaguar GUI uses them but that code path
is not compiled into the libretro core.