zOS (Z-Betriebssystem)
zOS
Urspruenglich zielten die ZPUTA/zOS-Entwicklungen nur auf die ZPU-Architektur ab, und sie hatten zwei primaere Ausfuehrungsmethoden:
- als von IOCP gebootete Anwendung,
- eigenstaendig als ZPU Evo Startup-Firmware gebootet.
Kuerzlich wurde zOS auf die ARM Cortex-M4-Architektur portiert, fuer die Verwendung mit dem Freescale K64F im tranZPUterSW-Projekt. Da der K64F eine feste Architektur-CPU/SoC ist, existiert nur eine Ausfuehrungsmethode: 'eigenstaendig' -- gespeichert im Onboard-Flash und gestartet, wenn die CPU eingeschaltet wird.
In zOS wird alle Nicht-OS-Funktionalitaet als Anwendungen auf einer SD-Karte gespeichert. Wenn keine SD-Karte vorhanden ist, ist es besser, ZPUTA zu verwenden, da es die Moeglichkeit bietet, begrenzte FPGA-BRAM-Ressourcen zu beruecksichtigen, indem alle Funktionen von ZPUTA innerhalb des primaer geladenen Images aktiviert/deaktiviert werden koennen.
Zum Betrieb benoetigt zOS eine serielle Verbindung (physisch oder USB-virtuell) mit vorzugsweise einem ANSI/VT100-Terminal-Emulator-Paket. Die Anforderung eines ANSI/VT100-Terminal-Emulationspakets dient dazu, dass Befehle wie der Editor oder Readline korrekt funktionieren. Ein einfaches serielles Terminal funktioniert ebenfalls, jedoch mit eingeschraenkter Anwendungsfunktionalitaet.
Eine neuere Hardware-Entwicklung, der tranZPUter SW-700 v1.3, sieht zOS als Host-Betriebssystem arbeiten, bei dem Tastatur und Display unter seiner direkten Kontrolle stehen. Um die Abwaertskompatibilitaet mit den seriellen Anwendungen zu wahren, wurde ein ANSI-Terminal-Emulator entwickelt und eingebettet.
Verwendung des Betriebssystems
Bei der Arbeit an einigen meiner Projekte in diesem Repository hatte ich immer im Sinn, dass ich eine aehnliche Umgebung wollte, auch auf einem eingebetteten System mit begrenzten Ressourcen, in der ich ueberwachen, aendern oder im laufenden Betrieb reparieren konnte.
Die Betriebssystemschnittstelle wurde unter Beruecksichtigung geschrieben, dass nur ein serielles textbasiertes Terminal verfuegbar ist. Einige Komponenten wie der Editor benoetigen erweiterte Faehigkeiten, und zu diesem Zweck wurde die bewerte VT100/ANSI-Emulation als geeigneter Kandidat gewaehlt. Die Interaktion erfolgt tastatur- und textbasiert (keine huebschen GUI-Schnittstellen!).
Kommandozeile
Die erste Begegnung mit dem Betriebssystem ist eine Anmeldemeldung, die CPU, Version usw. anzeigt und eine Eingabeaufforderung fuer Befehlseingaben ausgibt:

| Key | Action |
|---|---|
| CTRL-A | Go to start of line. |
| CTRL-B | Move cursor one position to the left. |
| CTRL-C | Abort current line and return CTRL-C to calling application. |
| CTRL-D | Not defined in shell, passed to running application. |
| CTRL-E | Go to end of line. |
| CTRL-F | Move cursor one position to the right. |
| CTRL-K | Clear the line. |
| CTRL-N | Recall next historized command. |
| CTRL-P | Recall previous historized command. |
| HOME | Go to start of line. |
| END | Go to end of line. |
| DEL | Delete character under cursor. |
| BACKSPACE | Delete character to left of cursor. |
| ARROW UP | Recall previous historized command. |
| ARROW DOWN | Recall next historized command. |
| ARROW RIGHT | Move cursor one position to the right. |
| ARROW LEFT | Move cursor one position to the left. |
| Command | Action |
|---|---|
| !<number> | Recall and execute given historised command identified by <number>. |
| hist[ory] | List the history buffer. |
Anwendungen
Die vollstaendigen Befehlstabellen fuer Disk-IO, Disk-Buffer, Dateisystem, Speicher, Hardware, Leistungstests, Programmausfuehrung, diverse Befehle, Anwendungen und tranZPUter-Befehle sind identisch mit der englischen Version und werden dort aufgelistet.
autoexec.bat
Technische Details
Speicherorganisation
IOCP Memory Map

zOS Memory Map

Die Speicherbelegungskarte fuer den K64F-Prozessor ist aehnlich, aber Flash-RAM und RAM sind fest definiert und nicht variabel wie bei der ZPU.

Anwendungsschnittstelle
Wie die meisten Betriebssysteme stellt zOS eine API bereit, die eine entsprechend kompilierte Anwendung nutzen kann, um ihre Groesse und Komplexitaet zu verringern und Funktionen innerhalb des Betriebssystems wie die serielle Verbindung wiederzuverwenden.
Anstatt einen benutzerdefinierten API-Satz zu entwerfen, war es sinnvoller, Methoden innerhalb von zOS fuer die Anwendung freizugeben, z.B. printf. Eine Anwendung, die printf aufruft, um Ausgaben auf dem Terminal anzuzeigen, ruft tatsaechlich printf innerhalb von zOS auf. Dies wird durch Erstellen einer Sprungtabelle an einem festen Vektor innerhalb von zOS ermoeglicht.
Die vollstaendige API-Vektortabelle (93 Vektoren einschliesslich Character-I/O, formatierter I/O, Dateisystem-Operationen, Festplatten-I/O, Speicherverwaltung, Z80-Bus-Operationen und mehr) ist identisch mit der englischen Version und wird dort vollstaendig aufgelistet.
Die Anwendungsvorlage verwendet den Prototypen:
uint32_t app(uint32_t param1, uint32_t param2)
Der Rueckgabecode der Anwendung an zOS ist eine 32-Bit-Ganzzahl ohne Vorzeichen. 0 bedeutet erfolgreiche Ausfuehrung, 0xFFFFFFFF zeigt einen Fehler an.
Automatische Einrichtung und Erstellung (empfohlen)
build.sh gesteuert, das IOCP, zOS und die Apps fuer eine gewaehlte CPU in einem einzigen Durchgang assembliert/kompiliert. Zwei Toolchains sind beteiligt und die Einrichtungsskripte stellen beide bereit:
| Toolchain | Ziel-CPU | Quelle |
|---|---|---|
ZPU zpu-elf-gcc 3.4.2 |
Small Medium Flex Evo EvoMin (ZPU) |
installiert nach /opt/zpu (aus ZPU_TOOLCHAIN_URL) |
ARM arm-none-eabi |
K64F (Kinetis / Teensy 3.5) |
im Repository unter tools/arm mitgeliefert (keine Installation) |
Da beide Toolchains Linux- / Cross-Binaerdateien sind, laeuft die Erstellung nativ unter Linux, in Docker unter macOS (Image zos-build:latest) und via WSL1 unter Windows:
| Skript | Plattform | Hinweise |
|---|---|---|
setup_zOS.sh |
Linux (nativ) / macOS (Docker) | Installiert die Basis-Build-Tools + die ZPU-Toolchain; unter macOS erfolgt die Erstellung im zos-build:latest Docker-Image. |
setup_zOS_windows.cmd |
Windows 10 / 11 | Per Doppelklick startbarer Launcher, der das untenstehende PowerShell-Skript aufruft. |
setup_zOS_windows_native.ps1 |
Windows 10 / 11 (WSL1) | Richtet WSL1 ein und fuehrt die Linux-Einrichtung darin aus. |
setup_zOS_wsl1.sh |
innerhalb WSL1 | Der Linux-Einrichtungsschritt, der automatisch innerhalb der WSL1-Distribution aufgerufen wird. |
Linux / macOS — setup_zOS.sh
chmod +x setup_zOS.sh
./setup_zOS.sh
Windows 10 / 11 — setup_zOS_windows_native.ps1 — Doppelklick auf setup_zOS_windows.cmd, oder von einer PowerShell-Eingabeaufforderung:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_zOS_windows_native.ps1
Die Einrichtung klont ZOS_REPO_URL (Standard https://git.eaw.app/eaw/zOS.git) nach ~/zOS. Sobald sie fertig ist, erstellen Sie zOS mit (build.sh waehlt automatisch nativ / Docker / WSL1 fuer den Host):
./build.sh -C Evo -O zos # zOS for the Evo ZPU
./build.sh -C K64F -O zos # zOS for the K64F (ARM Cortex-M4)
./build.sh -h # all options (-C CPU, -I IOCP, -O os, -o os ver, addresses, sizes ...)
build/ und build/SD/ — das Boot-ROM (BOOT.ROM / BOOTTINY.ROM), der IOCP_<func>_<addr>.bin-Bootloader und die zOS-.bin, dazu die bin/-App-Binaerdateien, bereit zum Kopieren auf eine FAT-formatierte SD-Karte.
Nuetzliche Umgebungsvariablen-Ueberschreibungen:
| Variable | Zweck |
|---|---|
ZOS_REPO_URL |
Zu klonendes Repository (Standard https://git.eaw.app/eaw/zOS.git). |
ZOS_DIR |
Erstellung innerhalb eines vorhandenen Checkouts statt Klonen. |
ZPU_TOOLCHAIN_URL |
Speicherort des zpu-elf-gcc 3.4.2 Toolchain-Tarballs, installiert nach /opt/zpu. |
ZOS_BUILD_IMAGE |
Docker-Image fuer die macOS-Erstellung (Standard zos-build:latest). |
ZOS_ASSUME_YES=1 |
Alle Abfragen nicht-interaktiv bestaetigen (unbeaufsichtigte / CI-Installationen). |
build.sh-Flag-Matrix — im Abschnitt Software Build direkt darunter dokumentiert.
Software-Build
Dieser Abschnitt zeigt, wie ein einfacher zOS-Kernel erstellt wird. Der Ausgangspunkt fuer den Build von zOS ist das ‘build.sh’-Skript, das die gesamte erforderliche Logik enthaelt.
Pfade
Die vollstaendige Pfadtabelle, Werkzeugliste und Build-Tree-Dokumentation sind identisch mit der englischen Version und werden dort detailliert beschrieben.
Werkzeuge
Alle Entwicklung erfolgte unter Linux, insbesondere Debian/Ubuntu. Neben der Standard-Linux-Buildchain wird folgende Software benoetigt:
- ZPU GCC ToolChain - Die GCC-Toolchain fuer die ZPU-Entwicklung. Installation in /opt oder einem aehnlichen gemeinsamen Verzeichnis.
- Arduino - Die Arduino-Entwicklungsumgebung, nicht wirklich erforderlich, ausser wenn Funktionen zur K64F-Version von zOS hinzugefuegt werden.
- Teensyduino - Die Teensy3 Arduino-Erweiterungen fuer die Arbeit mit dem Teensy3.5 Board.
Die vollstaendige Build-Tree-Struktur, build.sh-Parameter und Beispiele finden Sie in der englischen Version.