Zeitlos SOC/OS
35
stars
138
commits
C
primary language
Sep 11, 2026
updated

Zeitlos is a work-in-progress SOC (System-on-a-Chip) and OS (Operating System) developed in tandem and intended to provide a responsive graphical environment for using and developing timeless applications on FPGA computers.
The core applications allow Zeitlos to be used as an extensible multi-window network terminal with scripting and graphics.

Zeitlos is the successor to Zucker.
| Component | Features/Notes |
|---|---|
| CPU | 32-bit RISC-V (PicoRV32 or Zeitlos32) RV32IM @ 48MHz |
| GPU | Line rasterizer and blitter |
| MTU | Virtual addressing through Memory Translation Unit |
| Bus | 32-bit Wishbone |
| Main Memory | SDRAM, PSRAM or SRAM (1MB minimum) |
| Framebuffer | 640x480x1bpp (monochrome; white, green, or amber) |
| Viewport | Optional 320x240 pixel-doubled viewport |
| Video | VGA, DVI, DVI over HDMI, composite NTSC and PAL |
| Audio | 8 channel hardware mixer with stereo output |
| Storage | MicroSD |
| Network | Ethernet (SPI) and Ethernet MAC (for RMII PHY) |
| Entropy | Ring-oscillator TRNG |
| HID | USB keyboard + optional USB mouse |
| I/O | GPIO, SPI, 16550 UART |
Zeitlos doesn't have an MMU but instead has a single virtual address space that is remapped to a main memory address during context switches.
The Zeitlos kernel is located at 0x4000_0000 which is the beginning of main memory, and apps are loaded immediately after the kernel. However, each app executes at fixed address 0x8000_0000 which is a mirror of their actual address in the main memory. The translation base address register is set during context switches so that each app can access its own memory through 0x8000_0000.
With the MTU, there is no need for position independent code or complicated address relocation.
| App | Description |
|---|---|
| kernel | Kernel + kernel shell (serial console) |
| wm | Window manager + dock |
| net | Networking server |
| repl | App server + Lisp interpreter (subset of R4RS Scheme) |
| term | Terminal emulator (connects to services; VT100 emulation) |
| App | Description |
|---|---|
| text | Text editor |
| read | Text reader for files of unlimited size (with rendered Markdown) |
| draw | MacPaint-inspired drawing app |
| files | File browser |
| calc | Calculator |
| info | System info |
| clock | Analog and digital clock |
| settings | System settings |
| track | MOD audio file player |
| space3d | First-person 3D space shooter game |
| gpu3d | Spinning 3D cube demo + STL viewer |
Zeitlos will initially support ECP5, Artix-7, GateMate FPGAs.
The following boards are currently supported:
If you have an unsupported board and want to try Zeitlos, please open an issue.
An sdcard is optional. The core apps (wm, net, repl, term)
are programmed into flash alongside the kernel, so a freshly flashed
board boots straight to the graphical desktop with nothing else
attached. See Core apps in flash below.
Building Zeitlos requires FPGA tools (Yosys, nextpnr, and a bitstream packer for your FPGA family) and a RISC-V toolchain. Most of these are available as Debian/Ubuntu packages:
$ sudo apt install yosys nextpnr-ecp5 fpga-trellis fpga-trellis-database \
openfpgaloader
The RISC-V compiler is the one piece not to take from apt: Zeitlos is
built against newlib, and Ubuntu's gcc-riscv64-unknown-elf ships no C
library at all. Use the xPack prebuilt
toolchain
(GCC + binutils + newlib, no building required) and set RISCV_PREFIX
in sw/common/arch.mk to point at it.
See docs/toolchain.md for current upstream versions, the OSS CAD Suite bundle, GateMate boards, and the trade-offs between the RISC-V toolchain options.
Note that Zeitlos now builds rv32im (hardware multiply and divide) --
see docs/muldiv.md. Gateware and software must be
flashed together.
$ git clone https://github.com/machdyne/zeitlos
$ cd zeitlos
$ git submodule update --init --recursive
$ make BOARD=lakritz CABLE=dirtyJtag flash
The above command builds the SOC, BIOS, OS and apps, then writes the gateware, kernel, boot splash and core apps to flash.
The BIOS will automatically boot the kernel if no keys are pressed, and
the kernel starts wm, net and repl automatically -- you'll land
straight in the graphical desktop. See docs/welcome.md
for how to use it from there.
The mouse pointer tells you when it's ready. It is a Z while
the system is still starting up and an X once it isn't. The dock
won't launch anything while the Z is showing -- term connects to
repl the moment it starts, and launching it too early gives you a
blank window rather than a terminal. Wait for the X. See
docs/socctl.md.
An sdcard is only needed for storing files and for apps beyond the core four. Write the zeitlos image to one with:
curl -LO https://github.com/machdyne/zeitlos/releases/latest/download/zeitlos.img.gz
gzip -dc zeitlos.img.gz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync
Replace /dev/sdX with your sdcard's device node (check with lsblk first — writing to the wrong device will destroy its contents).
wm, net, repl and term are written to flash as part of a normal
make flash, immediately after the kernel. They are an underlay
beneath the filesystem, not a separate namespace: there is still exactly
one name for term, and run term behaves identically whether it came
from flash or from a card.
The rule is one line:
if the filesystem has it, use that; otherwise use the flash copy.
A file on the card wins, because the only way it got there was somebody
deliberately putting it there — which is what makes xf wm still work
as a single-app hot-swap during development, with no version scheme or
timestamps involved. ls lists the flash copies in a separate section,
skipping any that a real file is shadowing, so what you see is what
run would actually launch.
For iterating on the OS itself, make dev-flash rebuilds and reflashes
the kernel and core apps without touching the gateware:
$ make clean && make BOARD=obst dev-flash
See docs/flash_apps.md for the archive format
and the design reasoning.
The Zeitlos documentation will be the Timeless Computing book, which will be included in the default Zeitlos distribution. The later chapters will explain the system, list the API, etc.
The Zeitlos implementation portions of the book are currently located in the docs directory.
This project makes use of LLMs for code and documentation.
The contents of this repo are released under the Lone Dynamics Open License with the following exceptions:
138 commits
Hacker News (1)
C
61.9%
Verilog
30.0%
Makefile
3.2%
Python
1.9%
Zeitlos SOC/OS
35
stars
138
commits
C
primary language
Sep 11, 2026
updated

Zeitlos is a work-in-progress SOC (System-on-a-Chip) and OS (Operating System) developed in tandem and intended to provide a responsive graphical environment for using and developing timeless applications on FPGA computers.
The core applications allow Zeitlos to be used as an extensible multi-window network terminal with scripting and graphics.

Zeitlos is the successor to Zucker.
| Component | Features/Notes |
|---|---|
| CPU | 32-bit RISC-V (PicoRV32 or Zeitlos32) RV32IM @ 48MHz |
| GPU | Line rasterizer and blitter |
| MTU | Virtual addressing through Memory Translation Unit |
| Bus | 32-bit Wishbone |
| Main Memory | SDRAM, PSRAM or SRAM (1MB minimum) |
| Framebuffer | 640x480x1bpp (monochrome; white, green, or amber) |
| Viewport | Optional 320x240 pixel-doubled viewport |
| Video | VGA, DVI, DVI over HDMI, composite NTSC and PAL |
| Audio | 8 channel hardware mixer with stereo output |
| Storage | MicroSD |
| Network | Ethernet (SPI) and Ethernet MAC (for RMII PHY) |
| Entropy | Ring-oscillator TRNG |
| HID | USB keyboard + optional USB mouse |
| I/O | GPIO, SPI, 16550 UART |
Zeitlos doesn't have an MMU but instead has a single virtual address space that is remapped to a main memory address during context switches.
The Zeitlos kernel is located at 0x4000_0000 which is the beginning of main memory, and apps are loaded immediately after the kernel. However, each app executes at fixed address 0x8000_0000 which is a mirror of their actual address in the main memory. The translation base address register is set during context switches so that each app can access its own memory through 0x8000_0000.
With the MTU, there is no need for position independent code or complicated address relocation.
| App | Description |
|---|---|
| kernel | Kernel + kernel shell (serial console) |
| wm | Window manager + dock |
| net | Networking server |
| repl | App server + Lisp interpreter (subset of R4RS Scheme) |
| term | Terminal emulator (connects to services; VT100 emulation) |
| App | Description |
|---|---|
| text | Text editor |
| read | Text reader for files of unlimited size (with rendered Markdown) |
| draw | MacPaint-inspired drawing app |
| files | File browser |
| calc | Calculator |
| info | System info |
| clock | Analog and digital clock |
| settings | System settings |
| track | MOD audio file player |
| space3d | First-person 3D space shooter game |
| gpu3d | Spinning 3D cube demo + STL viewer |
Zeitlos will initially support ECP5, Artix-7, GateMate FPGAs.
The following boards are currently supported:
If you have an unsupported board and want to try Zeitlos, please open an issue.
An sdcard is optional. The core apps (wm, net, repl, term)
are programmed into flash alongside the kernel, so a freshly flashed
board boots straight to the graphical desktop with nothing else
attached. See Core apps in flash below.
Building Zeitlos requires FPGA tools (Yosys, nextpnr, and a bitstream packer for your FPGA family) and a RISC-V toolchain. Most of these are available as Debian/Ubuntu packages:
$ sudo apt install yosys nextpnr-ecp5 fpga-trellis fpga-trellis-database \
openfpgaloader
The RISC-V compiler is the one piece not to take from apt: Zeitlos is
built against newlib, and Ubuntu's gcc-riscv64-unknown-elf ships no C
library at all. Use the xPack prebuilt
toolchain
(GCC + binutils + newlib, no building required) and set RISCV_PREFIX
in sw/common/arch.mk to point at it.
See docs/toolchain.md for current upstream versions, the OSS CAD Suite bundle, GateMate boards, and the trade-offs between the RISC-V toolchain options.
Note that Zeitlos now builds rv32im (hardware multiply and divide) --
see docs/muldiv.md. Gateware and software must be
flashed together.
$ git clone https://github.com/machdyne/zeitlos
$ cd zeitlos
$ git submodule update --init --recursive
$ make BOARD=lakritz CABLE=dirtyJtag flash
The above command builds the SOC, BIOS, OS and apps, then writes the gateware, kernel, boot splash and core apps to flash.
The BIOS will automatically boot the kernel if no keys are pressed, and
the kernel starts wm, net and repl automatically -- you'll land
straight in the graphical desktop. See docs/welcome.md
for how to use it from there.
The mouse pointer tells you when it's ready. It is a Z while
the system is still starting up and an X once it isn't. The dock
won't launch anything while the Z is showing -- term connects to
repl the moment it starts, and launching it too early gives you a
blank window rather than a terminal. Wait for the X. See
docs/socctl.md.
An sdcard is only needed for storing files and for apps beyond the core four. Write the zeitlos image to one with:
curl -LO https://github.com/machdyne/zeitlos/releases/latest/download/zeitlos.img.gz
gzip -dc zeitlos.img.gz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync
Replace /dev/sdX with your sdcard's device node (check with lsblk first — writing to the wrong device will destroy its contents).
wm, net, repl and term are written to flash as part of a normal
make flash, immediately after the kernel. They are an underlay
beneath the filesystem, not a separate namespace: there is still exactly
one name for term, and run term behaves identically whether it came
from flash or from a card.
The rule is one line:
if the filesystem has it, use that; otherwise use the flash copy.
A file on the card wins, because the only way it got there was somebody
deliberately putting it there — which is what makes xf wm still work
as a single-app hot-swap during development, with no version scheme or
timestamps involved. ls lists the flash copies in a separate section,
skipping any that a real file is shadowing, so what you see is what
run would actually launch.
For iterating on the OS itself, make dev-flash rebuilds and reflashes
the kernel and core apps without touching the gateware:
$ make clean && make BOARD=obst dev-flash
See docs/flash_apps.md for the archive format
and the design reasoning.
The Zeitlos documentation will be the Timeless Computing book, which will be included in the default Zeitlos distribution. The later chapters will explain the system, list the API, etc.
The Zeitlos implementation portions of the book are currently located in the docs directory.
This project makes use of LLMs for code and documentation.
The contents of this repo are released under the Lone Dynamics Open License with the following exceptions:
Hacker News (1)
138 commits
C
61.9%
Verilog
30.0%
Makefile
3.2%
Python
1.9%