I recently decided to pick up a project I've always wanted to work on: emulating Jaguar CD games by replacing the Atari-installed CD BIOS with a custom BIOS that doesn't require the CD unit, but instead can load games via a large external memory such as SD card. And I thought it would be especially appropriate to announce this in light of the upcoming Jaguar SD cart project. Welcome to Jaguar CD Unleashed (JagCDU).
Yes, this is Mystery Project #3 which didn't remain a mystery for very long, because the basic feature is working now. I thought I would announce here to let other developers and gamers alike know what I'm working on, how it works, and what is left to do.
What works right now?
A multi-track CD game which fits within the 6MB cartridge ROM space and only requires simple reads from CD to a designated RAM buffer is working in emulation.
The simple CD_read function which normally moves data from CD to a provided buffer in Jaguar RAM now does a m68k memory copy instead. This is actually a fairly fast operation, faster than most Jaguar CD reads would be. The CD tracks have been mapped to the 6MB cartridge ROM space, so that means the largest CD game right now can be just shy of 6MB in size.
Eventually the 6MB limit will be removed once I have a way to load data from external storage. Supporting streaming data will be a bigger challenge, since it requires custom HW on the other side of the I2S link.
What games are supported?
- Protector SE + Protector Resurgence (1 boot track)
- Frog Feast (1 boot track + 2 data tracks, but the last 2 tracks are filler and encryption, respectively)
- CGE 5th slide show (1 boot track + 4 data tracks)
Other "boot track only" games such as Native should be supported but have not been tested yet. I need to find more multi-track games which fit within 6MB to properly test the emulation. Note that session 0 which contains audio-only tracks is completely ignored at the moment.
What new software is required to support JagCDU?
- jagcdu.s – Replacement CD BIOS file which installs at $3000.
- jagcdub.s – Simple boot code which runs from cartridge ROM and installs the JagCDU TOC at $2c00 and the JagCDU BIOS at $3000 and the boot track in Jaguar RAM.
- testcdu.s – Test program which is very similar to the JagFree code included in Protector SE. It executes a number of CD BIOS calls to confirm proper function. It's not technically "required software," but it sure is useful in debugging BIOS calls.
In addition, the JagCDU TOC is a modified and extended version of the existing CD TOC. The timecodes have been simplified to essentially match the track number, and a secondary TOC (using the same track index as the first TOC) provides the descriptor of where the file is actually located.
What new hardware is required to support JagCDU?
JagCDU is a software emulation project, so it requires something like SainT's proposed Jaguar SD cart to actually work for end users. JagCDU is not a stand-alone product.
Current status of BIOS functions
- BIOS_VER @ $3004 = 5.00
- CD_ack – Supported. Hard-coded to always clear err_flag.
- CD_getoc – Supported as a no-op, since JagCDUB always installs the TOC upon boot.
- CD_init – Not supported.
- CD_initf – Not supported.
- CD_initm – Supported. Needs to be simplified.
- CD_jeri – Not supported. Requires external microprocessor / HW to support I2S interface connected to external storage.
- CD_mode – Supported as a no-op.
- CD_mute – Not supported.
- CD_osamp – Not supported.
- CD_paus – Supported as a no-op.
- CD_ptr – Supported for CD_read.
- CD_read – Partially supported. D1 partition marker is supported. D2 circular buffer is not supported. Just seek bit is not supported. Requires prior call to CD_initm currently.
- CD_setup – Supported. Only clears err_flag.
- CD_spin – Supported as a no-op.
- CD_stop – Supported as a no-op.
- CD_switch – Not supported.
- CD_umute – Not supported.
- CD_upaus – Supported as a no-op.
- CD_uread – Supported as a no-op.
Edited by Songbird, Mon Aug 8, 2016 6:14 PM.