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: "f9a3c89f58836cb2c45a42ad4edfac047050f30a" 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. The embedded arrays are the dumps themselves: jaguarBootROM and jaguarBootROM_M hash to the CRC32 values biosdb.c names Series K and Model M, jaguarCDBootROM and jaguarDevCDBootROM to the two values the CD BIOS test accepts (src/bios/jagbios.c, src/bios/jagbios_m.c, src/bios/jagcdbios.c, src/bios/jagdevcdbios.c, src/core/biosdb.c:20-21, libretro.c:4964-4965). A file changes what runs only under BT_CUSTOM, where any image of 0x20000 bytes is loaded and an unrecognised checksum is logged (libretro.c:5245-5284). 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] aliases: - boot.rom 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, as jagboot_m.rom, and only when biosType is BT_M_SERIES. A short read falls back to the embedded Model M array, which carries the same bytes as the Model M dump. analysis: embedded_bios: k_series_boot_rom: source_file: src/bios/jagbios.c header: src/bios/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/bios/jagbios_m.c header: src/bios/jagbios_m.h symbol: jaguarBootROM_M size: 131072 # 0x20000, 128 KB description: "Jaguar M-series boot ROM" biosdb_crc: "0xAE25BDF5" biosdb_name: "Model M boot ROM" cd_boot_rom: source_file: src/bios/jagcdbios.c header: src/bios/jagcdbios.h symbol: jaguarCDBootROM size: 262144 # 0x40000, 256 KB description: "Jaguar CD boot ROM" filedb_crc: "0x687068D5" filedb_name: "[BIOS] Atari Jaguar CD (World)" dev_cd_boot_rom: source_file: src/bios/jagdevcdbios.c header: src/bios/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 (Cartridges)" description: "Which BIOS a cartridge boots with: disabled is HLE, enabled runs the boot ROM." default: disabled source_ref: "libretro_core_options.h:588-600" bios_loading: mechanism: embedded load_address: "0xE00000" load_size: "0x20000" source_ref: "libretro.c:5339-5383, libretro.c:6332" 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.