Skip to content

IrataJaguar - RetroBIOS

Type standalone
Classification Other
Source http://www.arts-union.ru/node/23
Upstream closed-source
Version 1.0.7
Profiled 2026-08-11
Cores iratajaguar
Systems atari-jaguar
Author Maxim Grishin (Altmer)
Technical notes

Atari Jaguar emulator for Android, the Android build of Maxim Grishin's Phoenix Emu Project. The native library is libphoenixcore.so and reports PhoenixEmuProject core 2.8.21; the same core carries the author's desktop builds and his three other Android emulators, Real3DOPlayer, NumPadPlayer and GearMasterPlayer. The build read here is the free package the author publishes himself, IrataJaguar_free_1.0.7.zip holding app-release.apk md5 a3e019d32203908d49e8220a79d8b570, package ru.vastness.altmer.iratajaguar versionName 1.0.7, minSdk and targetSdk 23, signed CN=MAXIM GRISHIN O=AltmerSoft L=Tula C=RU issued 2017-06-12, sha256 f268dda6844e4f6013731f7ec7adbbb89a22cf06c9753e85c184b889dc81a758. No source has been published. The Android slices are stripped, so the readings below were taken against the desktop 2.8.JAG build from the same site, which keeps its symbol table, and each was confirmed against the Android x86_64 slice; the arm64-v8a, armeabi-v7a and x86 slices carry the same signature bytes at 0x9f7e8, 0x83988 and 0xba848. ref: app-release.apk META-INF/CERT.RSA, AndroidManifest.xml, http://www.arts-union.ru/node/23, ph28jag-lin-x64.zip PhoenixEmuProject

One directory holds the cartridges and the BIOS together. MainActivity walks the external storage roots for a subdirectory named jaguar and offers the first one it finds, the settings tab lets the user pick another, and the choice is kept in the preference dumps. countGames scans that directory for the extensions bin, rom, jag, cof and j64 and hands every candidate to the library, which caches what it found in configs.xml under the private storage path as Library/CARTRIDGE and Library/BIOS entries carrying path, size, fast-md5, md5 and sh1. Those hashes are the cache key; nothing compares them against a known value. nameOfBios returns the single BIOS the library holds and the game list shows it as its first row, shifting the game indices by one. ref: MainActivity.java:257-273, 382-392, 447, 517, 99-100, 557-561, libphoenixcore.so countGames 0x8a1e0-0x8a5e6 (extensions 0x8a2ed-0x8a4b5), libphoenixcore.so 0xa4600-0xa4d4f (BIOS branch 0xa478f, entry write 0xa483e)

The BIOS is recognised by content, not by name. platformJaguar::getConfig declares two data elements, CARTRIDGE taking jag, cof and j64 and BIOS taking j64, and createDumpAdapter builds dumpAdapterJaguarROM with its bios flag set for everything that is not the CARTRIDGE element. That constructor reads the first 0x2000 bytes and compares the first twelve against bios_sign, 00 00 00 00 00 E0 00 08 41 F9 00 F0, the 68000 reset vector a Jaguar boot ROM opens with: stack pointer zero, program counter 00E00008, then the LEA that follows it. Every candidate is tried as BIOS before cartridge. Nothing past those twelve bytes is examined, so no length and no hash gates the file. ref: platformJaguar::getConfig 0x8ce080 (CARTRIDGE 0x8ce082, extensions 0x8ce115-0x8ce147, BIOS 0x8ce197, extension 0x8ce1f2), dumpLibrary::createDumpAdapter 0x4f9600 (0x4fa37e-0x4fa402 cartridge, 0x4fa4e7-0x4fa4fc bios flag set), dumpAdapterJaguarROM::dumpAdapterJaguarROM 0x8d3c20 (read 0x8d3c88, memcmp 0x8d4259-0x8d426f), bios_sign 0x99d7a0, libphoenixcore.so 0x48162-0x482c3

A cartridge does not boot without it. The platform constructor gives the BIOS 1 MB at 0xE00000 and the cartridge 8 MB at 0x800000, zeroes both, then pulls each through the frontend by data element index, 0 for the cartridge and 1 for the BIOS, byte swapping what comes back. When the BIOS read returns bytes and the cartridge is not an executable image, the first eight bytes of the BIOS are copied over DRAM 0, which is where cpu68K::Reset fetches the supervisor stack pointer and the program counter. Without a BIOS those eight bytes stay zero and the 68000 starts at 0 in cleared DRAM. The two images that skip it carry their own entry point: a JAGR header at offset 0x1c, whose body the constructor copies into DRAM itself, and a COFF image whose first word is 0x0150, the cof extension the config declares. Neither is a cartridge dump. There is no HLE path, and platform3DO::noBios has no platformJaguar counterpart in the same binary. ref: platformJaguar::platformJaguar 0x8d03d0 (buffers zeroed 0x8d0a35-0x8d0a8b, cartridge 0x8d0aa7, BIOS 0x8d0bc7-0x8d0be1, reset vector copy 0x8d0c0b-0x8d0c2e, JAGR 0x8d0aec-0x8d0b74, COFF 0x8d0b98 and 0x8d16b9), cpu68K::Reset 0x8c9e90, platformJaguar::read32_cpu 0x8cc1a0 (BIOS window 0x8cc1d4-0x8cc286), platformJaguar::read16 0x8cbdc0

A launcher can bypass the scan. MainActivity reads the intent extras rom and bios and passes them to the core as ext-rom and ext-bios, the paths used in place of the library, and switches to the reduced layout when either is present. EmulatorActivity, the activity registered for android.intent.action.VIEW, takes only lunchMode and lockOrient and replays whatever the library already holds. ref: MainActivity.java:480-481, 421-424, EmulatorActivity.java:33-35, 45, AndroidManifest.xml, libphoenixcore.so nativeOnCreate 0x8b2a2-0x8b562

1 files | 1 required, 0 optional | 1 in repo, 0 missing

[BIOS] Atari Jaguar (World).j64 required in repo
Atari Jaguar boot ROM

  • System: atari-jaguar
  • Validation: signature
  • Source: dumpAdapterJaguarROM::dumpAdapterJaguarROM 0x8d3c20, bios_sign 0x99d7a0, platformJaguar::getConfig 0x8ce197-0x8ce209, platformJaguar::platformJaguar 0x8d0bc7-0x8d0c2e
  • Platforms: retrobat
  • The emulator spells no filename for it. Any file the directory scan reaches whose first twelve bytes are 00 00 00 00 00 E0 00 08 41 F9 00 F0 is taken as the BIOS, so more than one boot ROM revision answers; the name carried here is the catalogue name of the retail dump, crc32 FB731AAA, under the extension the BIOS data element declares. Read into a 1 MB window at 0xE00000 and byte swapped, and its first eight bytes are copied over DRAM 0 to give the 68000 its reset vector. A longer file is read up to that bound rather than rejected.

Generated on 2026-08-23T16:12:06Z