Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/andrewrk/clashos

multiplayer arcade game for bare metal Raspberry Pi 3 B+
https://github.com/andrewrk/clashos

aarch64 kernel raspberry-pi zig

Last synced: about 1 month ago
JSON representation

multiplayer arcade game for bare metal Raspberry Pi 3 B+

Awesome Lists containing this project

README

        

# ClashOS

A work-in-progress multiplayer arcade game that runs directly on the
Raspberry Pi 3 B+ hardware, written entirely in [Zig](https://ziglang.org/).

## 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.

## Building

```
zig build
```

## Testing

### QEMU

```
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, `cat` 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 `-Dgdb` to both `zig build` commands.

### Actual Hardware

1. Mount an sdcard with a single FAT32 partition.
2. Copy `boot/*` to `/path/to/sdcard/*`.
3. `zig build`
4. Copy `clashos.bin` to `/path/to/sdcard/kernel7.img`.

For further changes repeat steps 3 and 4.

## Roadmap

* 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

## Documentation

### 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

Where `/dev/ttyUSB0` 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
```