A minimalist Unix-like system running on a Game Boy (SM83 CPU), in colour. It boots straight into jash, its little shell.
- jash — uHART83's shell: ~12 commands —
pwd,ls,cd,mkdir,rm,cat,whoami,date,uptime,df,motd,fortune,help - Micro VFS — in-RAM hierarchical filesystem:
/bin,/etc,/home,/root,/tmp, with/etc/motd,/etc/hostname,/etc/os-release - Colour — auto-detects Game Boy Color: rainbow palettes, black paper with vivid ink (a Unix terminal look). Falls back to crisp grayscale on a classic DMG — the same ROM runs on both
- On-screen keyboard — D-pad + A/B/Start/Select drive a soft keyboard, so the shell reads typed lines with only the Game Boy's 8 buttons
- Boot sequence — APU jingle, splash title, then jash
Requires the GBDK-2020 toolchain (lcc targeting SM83):
cd src
lcc -Wm-yc -Wm-yn"uHART83" -o uhart83.gb \
main.c vfs.c jash.c tty.c sound.c splash.c colors.c
-Wm-yc marks the ROM as Game Boy Color compatible (also boots on DMG).
In an emulator (PyBoy shown; any GB/GBC emulator works):
./run.sh # opens PyBoy in CGB mode (needs: pip install pyboy pillow)
Or load uhart83.gb in BGB / SameBoy / Mesen, or flash it to a flashcart
and run it on real Game Boy hardware.
| Game Boy | Action |
|---|---|
| D-pad | move the on-screen keyboard cursor |
| A | type the selected character |
| B | backspace |
| Start | run the typed command |
| Select | toggle letters / digits layer |
| File | Role |
|---|---|
main.c |
boot + shell loop |
jash.c |
the shell — command parser & built-ins |
vfs.c |
in-RAM hierarchical filesystem |
tty.c |
terminal output + on-screen keyboard |
colors.c |
Game Boy Color rainbow palettes |
splash.c |
boot splash + jingle |
sound.c |
APU beep (channel 1) |
hart83.h |
shared types and subsystem contracts |
spike/ holds standalone experiments kept for reference.
The animation above is jash-gameboy.mp4 (full quality) composited into a
Game Boy Color bezel — boot jingle, splash, then jash running help, ls,
fortune, and friends.
Unlicense — public domain.
F E R M I ∞ H A R T <contact@fermihart.com>



