Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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+
- Host: GitHub
- URL: https://github.com/andrewrk/clashos
- Owner: andrewrk
- Created: 2017-02-03T22:09:14.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-01-26T14:50:06.000Z (almost 5 years ago)
- Last Synced: 2024-12-09T08:52:09.671Z (about 2 months ago)
- Topics: aarch64, kernel, raspberry-pi, zig
- Language: Zig
- Homepage:
- Size: 2.62 MB
- Stars: 219
- Watchers: 15
- Forks: 19
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zig - andrewrk/clashos
- awesome-zig - clashos🗒️multiplayer arcade game for bare metal Raspberry Pi 3 B+
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
```