by andrewrk

andrewrk / clashos

multiplayer arcade game for bare metal Raspberry Pi 3 B+

139 Stars 12 Forks Last release: Not found 64 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


A work-in-progress multiplayer arcade game that runs directly on the Raspberry Pi 3 B+ hardware, written entirely in Zig.

Current Status

"Hello World" OS using the MiniUART. ~Tested and working on real hardware.~ It has regressed on real hardware, and I haven't fixed it yet.


zig build



zig build qemu

Debugging with GDB

zig build qemu -Dgdb

In another terminal:

gdb zig-cache/clashos-dbg -ex 'target remote localhost:1234'

Sending a New Kernel Image via Serial

While the Raspberry Pi is running, you can use

zig build upload -Dtty=/dev/ttyUSB0

If using QEMU, use

zig build qemu -Dpty
and note the tty path. In another terminal window,
the tty path. In yet another terminal window, you can use the
zig build upload
command above, with the tty path provided by QEMU. This is compatible with using GDB with QEMU, just make sure to pass the
to both
zig build

Actual Hardware

  1. Mount an sdcard with a single FAT32 partition.
  2. Copy
  3. zig build
  4. Copy

For further changes repeat steps 3 and 4.


  • Interface with the file system
  • Get rid of dependency on binutils objcopy
  • Interface with the video driver
  • Get a simple joystick and button and use GPIO
  • Sound (should it be the analog or over HDMI)?
  • Make the game
  • Build arcade cabinets


EZSync 012 USB Cable

  • Black: Pin 6, Ground
  • Yellow: Pin 8, BCM 14, TXD / Transmit
  • Orange: Pin 10, BCM 15, RXD / Receive

How to view the serial data


is the device that represents the serial-to-USB cable:
sudo screen /dev/ttyUSB0 115200 cs8

Memory Layout

0x0000000 (  0 MiB) - boot entry point
0x0001000           - shortExceptionHandlerAt0x1000 function
0x0001100           - kernelMainAt0x1100 function
0x8000000 (128 MiB) - top of kernel stack, and bootloader_main function
0x8800000 (136 MiB) - top of bootloader stack

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.