< back to blog

Released: Joust SDL2 Port

Released: Joust SDL2 Port

Joust is now in the games archive. It's a native C11/SDL2 port of the 1982 Williams arcade game for Linux handhelds through PortMaster, Linux desktops, the Steam Deck and Windows. Release 0.1.0 is on GitHub.

// THE GAME

John Newcomer designed Joust for Williams Electronics in 1982. You ride a flying ostrich and joust with enemy knights on buzzards. The higher lance wins. Defeated riders leave eggs that hatch if you don't grab them, and the waves bring lava trolls, burning platforms and the pterodactyl. Two players can play at once, as a team or against each other.

// THE PORT

Instead of rewriting the game, the port runs the arcade ROM's own code on an emulated Williams board, with a 6809 main CPU and a 6808 sound CPU. The emulation is written in C and checked against MAME cycle for cycle. The test suite compares the ROM map, video and palette decoding, the blitter on every image in the ROM, the random number generator, and the board from power-on, frame by frame.

On top of that, the port adds:

$ cat features.txt
GFX ........ 8 presets, from classic pixels to HD glow with CRT scanlines (F3/F4/F5)
PADS ....... two pads for simultaneous two-player games
SAVES ...... the arcade's CMOS (settings, high scores) saved to disk
TEST CARD .. ROM status, input tester and the ROM's decoded images
PACKAGES ... Linux x86_64/aarch64, PortMaster, Windows

The port started from the shared code of the Robotron: 2084 port, including its platform layer, framebuffer, blitter and enhanced graphics.

// YOUR ROM SET

No ROM data is included. You need your own MAME joust set (joust.zip). The game finds it next to the program, through --rom, or through $JOUST_ROM. Files are matched by CRC, so MAME, older MAME and FBNeo sets all work. On PortMaster, put joust.zip in the joust/ folder.

git clone https://github.com/monkeyx-net/joust.git
cd joust
cmake -S . -B build && cmake --build build -j
build/joust --windowed --rom /path/to/joust.zip

See the Joust game page for the full controls, or get the source on GitHub.

$ < back to blog  |  RSS feed