Sega Saturn USB Flash Cartridge

Rev 2 PCB

An open-source developer cartridge with 256KB flash FROM and a USB port for data transfers.

Note: To program the cartridge you must be able to run a burned CD on your Saturn or program the flash chips before mounting them on the PCB.

The project (hardware and software) is distributed under the Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. Some parts of the software uses other licenses, see the individual files for details.

The cartridge uses an FTDI FT245R chip for USB connectivity. The project includes a very basic transfer tool for Unix-like systems that can be used to transfer data to and from the Saturn, and execute programs. The Saturn client is supplied as a ROM image that can be programmed onto the cartridge flash. The board includes an "unbricking" jumper that can be used to disconnect the flash during boot.

Building

The cartridge has been designed to be compatible with most inexpensive PCB manufacturers. The board is designed to fit into a normal Saturn cartridge shell, but it is also slightly (3 mm) narrower than real Saturn cartridges to be able to use the less expensive 10*10 cm board area. I had mine made at Seeed Studio, which was cheap but did take a few weeks. Assembling the board requires some skill in surface-mount soldering, but there's nothing very difficult on it.

Programming

The cartridge is mapped into the A-bus CS0 space. Accessing the FIFO registers works as follows:

#define USB_FIFO (*(volatile uint8_t*)(0x22100001))
#define USB_FLAGS (*(volatile uint8_t*)(0x22200001))

uint8_t ReadByte(void)
{
    while ((USB_FLAGS & 1) != 0) ;
    return USB_FIFO;
}

void SendByte(uint8_t byte)
{
    while ((USB_FLAGS & 2) != 0) ;
    USB_FIFO = byte;
}

Cartridge memory map (local addresses)
0x000000 - 0x0FFFFFFlash ROM, repeated every 256K
0x100000 - 0x17FFFFUSB FIFO register on every other odd byte(*)
0x200000 - 0x27FFFFUSB FIFO flags on every odd byte
(*) To work around a bug in the Saturn SCU, read access is possible only on addresses with the two least significant bits equal to %01

USB FIFO status register
76543210
PWREN#00000TXE#RXF#

Part list

The product links are only suggestions to help find the right parts. Equivalent parts from other manufacturers can be used.

PartValueFootprint
C1-C2, C4-C11100 nF0603
C34.7 µF0603
R1, R3-R410K0603
R24K70603
U1, U774HCT245SOIC-20
U274HCT138SOIC-16
U3-U4SST39SF010APLCC32
U574HCT32SO-14
U674AHC1G04SOT23-5
U8FT245RLSSOP28
X1SMT Mini USB B conn
JP10.1" headeroptional

Files

All project files are also available on GitHub.
28.07.2013 Added GitHub link
19.06.2012 Flashing tools added
10.06.2012 Page created
Back to main Sega page.

Creative
Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.