Out Run Arcade Software Development Kit

This is a preview version of the Out Run SDK. It is in heavy beta. Any feedback is most welcome!
If you are experiencing hangs while running the samples in MAME, please see MAME compatibility issues.


The Out Run Arcade SDK allows you to write software for the Out Run arcade board using C (or C++, yes, it actually mostly works, but has a huge memory footprint). It provides startup code as well as functionality to interface the hardware components.


In addition, it has some samples to get you going. Here are pretentious screenshots.


Firstly, you can download the entire package including GCC binaries here.

Then please closely follow install.txt!

For now I recommend just putting everything in c:\outrun. Run 'setupenv.bat' first to add gcc to your path (not stored permanently, just for the open console).

The SDK has already been prebuilt, but you can run build_sdk.bat from the sdk directory to recreate the libs.

You can run 'make.bat' or 'make.bat clean' from any of the samples subdirectories (except /common/) to build or clean a sample. It'll generate both ROM images and binaries for the bootloader.

If you have MAME installed, you can either set the environment variable MAME_PATH to the MAME installation folder, or edit /bin/run.bat to include it. Default search locations are c:\mame and c:\outrun\mame.


And also have outrun.zip in the /roms/ subfolder. This is the regular original Rev. B ROM set.

Once built, you can use 'run.bat' or 'run.bat debug' to copy the EPR-*.* files to the MAME's /roms/outrun/ folder and start MAME either with or without debugging.

More will follow after I update and/or finalize the SDK and this placeholder page.

Important: MAME compatibility issues

Due to a change in the way the PPI8255 returns the (unemulated) ADC ready bit in MAME, the SDK is currently not compatible with newer MAME versions starting from 0.153. This results in a hang whenever the analog inputs are read using INPUT_ReadAnalogInput(true).

You can download older MAME versions from the Previous MAME Releases page.

Alternatively, as a workaround, you can make the following change to /sdk/src/cpu0/io.c: uint8_t INPUT_ReadAnalogInput (bool bWait)
     // We could wait for the PPI on port A here. I'm not sure whether this is set up in MAME.
     if (bWait)
         while (PPI_Read_Register (PPI_READ_PORT_A) & PPI_A_ADIR);
And rebuild the libraries using build_sdk.bat. This does cause possible timing issues with the actual arcade PCB. The next SDK (pre)release will have a 'fix' for this.

Thanks to DJCC for bringing this to my attention and narrowing down which MAME version introduced the change!

For compiling GCC yourself see Building the 68000 cross compiler.
For hooking up your PCB to a TV or power supply see Hooking a Sega Outrun arcade PCB up to an AT(X) power supply and SCART TV.