zOS (Z-Sistema Operativo)
zOS
Originariamente, gli sviluppi di ZPUTA/zOS miravano solo all'architettura ZPU, e avevano due metodi di esecuzione primari:
- come applicazione avviata da IOCP,
- in modalita’ autonoma come firmware di avvio della ZPU Evo.
Recentemente, zOS e' stato portato sull'architettura ARM Cortex-M4, per l'uso con il Freescale K64F nel progetto tranZPUterSW. Poiche' il K64F e' un CPU/SoC ad architettura fissa, esiste un solo metodo di esecuzione: 'autonomo' -- memorizzato nella flash onboard e avviato quando la CPU si accende.
In zOS, tutta la funzionalita' non-OS e' memorizzata come applicazioni su una scheda SD. Se non e' disponibile una scheda SD, e' meglio utilizzare ZPUTA, in quanto offre la possibilita' di tenere conto delle limitate risorse BRAM dell'FPGA consentendo di abilitare/disabilitare tutte le funzioni di ZPUTA all'interno dell'immagine caricata primariamente.
Per il funzionamento, zOS richiede una connessione seriale (fisica o USB virtuale) con preferibilmente un pacchetto di emulazione terminale ANSI/VT100. Il requisito di un pacchetto di emulazione terminale ANSI/VT100 serve affinche' comandi come l'editor o readline funzionino correttamente. Un semplice terminale seriale funzionera' comunque, ma con funzionalita' applicativa limitata.
Un piu' recente sviluppo hardware, il tranZPUter SW-700 v1.3, vede zOS funzionare come sistema operativo host dove tastiera e display sono sotto il suo controllo diretto. Per mantenere la compatibilita' con le applicazioni seriali, e' stato sviluppato e integrato un emulatore di terminale ANSI.
Utilizzo del sistema operativo
Lavorando su alcuni dei miei progetti in questo repository, ho sempre avuto in mente di volere un ambiente simile, anche su un sistema embedded con risorse limitate, in cui potessi monitorare, modificare o riparare al volo.
L'interfaccia del sistema operativo e' stata scritta considerando che e' disponibile solo un terminale testuale seriale. Alcuni componenti come l'editor richiedono capacita' avanzate, e a questo scopo e' stata scelta la collaudata emulazione VT100/ANSI come candidato adatto. L'interazione e' basata su tastiera e testo (nessuna bella interfaccia GUI!).
Riga di comando
Il primo incontro con il sistema operativo e’ un messaggio di accesso che mostra CPU, versione, ecc. e presenta un prompt per l’inserimento dei comandi:

| 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. |
Applicazioni
Le tabelle complete dei comandi per IO su disco, buffer disco, file system, memoria, hardware, test di prestazione, esecuzione programmi, comandi vari, applicazioni e comandi tranZPUter sono identiche alla versione inglese e sono elencate li’.
autoexec.bat
Dettagli tecnici
Organizzazione della memoria
IOCP Memory Map

zOS Memory Map

La mappa di memoria per il processore K64F e’ simile, ma la Flash RAM e la RAM sono definite in modo fisso e non variabile come nella ZPU.

Interfaccia dell'applicazione
Come la maggior parte dei sistemi operativi, zOS fornisce un’API che un’applicazione opportunamente compilata puo’ utilizzare per ridurre le proprie dimensioni e complessita’ e riutilizzare le funzioni all’interno del sistema operativo come la connessione seriale.
Piuttosto che progettare un set API personalizzato, era piu’ sensato esporre i metodi all’interno di zOS per l’uso dell’applicazione, ad esempio printf. Un’applicazione che chiama printf per visualizzare l’output sul terminale chiama effettivamente printf all’interno di zOS. Questo viene ottenuto creando una tabella di salto a un vettore fisso all’interno di zOS.
La tabella completa dei vettori API (93 vettori inclusi Character I/O, I/O formattato, operazioni sul file system, I/O su disco, gestione della memoria, operazioni sul bus Z80 e altro) e’ identica alla versione inglese e viene elencata completamente li’.
Il prototipo del template dell’applicazione e’:
uint32_t app(uint32_t param1, uint32_t param2)
Il codice di ritorno dell'applicazione a zOS e' un intero a 32 bit senza segno. 0 indica esecuzione riuscita, 0xFFFFFFFF indica un errore.
Configurazione e compilazione automatizzate (consigliato)
build.sh, che assembla/compila IOCP, zOS e le app per una determinata CPU in un unico passaggio. Sono coinvolte due toolchain e gli script di configurazione le forniscono entrambe:
| Toolchain | CPU di destinazione | Origine |
|---|---|---|
ZPU zpu-elf-gcc 3.4.2 |
Small Medium Flex Evo EvoMin (ZPU) |
installata in /opt/zpu (da ZPU_TOOLCHAIN_URL) |
ARM arm-none-eabi |
K64F (Kinetis / Teensy 3.5) |
inclusa nel repository in tools/arm (nessuna installazione) |
Poiche’ entrambe le toolchain sono binari Linux / cross, la compilazione viene eseguita nativamente su Linux, in Docker su macOS (immagine zos-build:latest) e tramite WSL1 su Windows:
| Script | Piattaforma | Note |
|---|---|---|
setup_zOS.sh |
Linux (nativo) / macOS (Docker) | Installa gli strumenti di build di base + la toolchain ZPU; su macOS compila all’interno dell’immagine Docker zos-build:latest. |
setup_zOS_windows.cmd |
Windows 10 / 11 | Launcher da doppio clic che richiama lo script PowerShell sottostante. |
setup_zOS_windows_native.ps1 |
Windows 10 / 11 (WSL1) | Configura WSL1 ed esegue al suo interno la configurazione Linux. |
setup_zOS_wsl1.sh |
all’interno di WSL1 | Il passo di configurazione Linux richiamato automaticamente nella distribuzione WSL1. |
Linux / macOS — setup_zOS.sh
chmod +x setup_zOS.sh
./setup_zOS.sh
Windows 10 / 11 — setup_zOS_windows_native.ps1 — doppio clic su setup_zOS_windows.cmd, oppure da un prompt PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_zOS_windows_native.ps1
La configurazione clona ZOS_REPO_URL (predefinito https://git.eaw.app/eaw/zOS.git) in ~/zOS. Una volta terminata, si compila zOS con (build.sh seleziona automaticamente native / Docker / WSL1 per l’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/ e build/SD/ — la ROM di avvio (BOOT.ROM / BOOTTINY.ROM), il boot loader IOCP_<func>_<addr>.bin e il file .bin di zOS, oltre ai binari delle app in bin/ pronti per essere copiati su una scheda SD formattata FAT.
Override utili delle variabili d’ambiente:
| Variabile | Scopo |
|---|---|
ZOS_REPO_URL |
Repository da clonare (predefinito https://git.eaw.app/eaw/zOS.git). |
ZOS_DIR |
Compila all’interno di un checkout esistente invece di clonare. |
ZPU_TOOLCHAIN_URL |
Posizione del tarball della toolchain zpu-elf-gcc 3.4.2 installata in /opt/zpu. |
ZOS_BUILD_IMAGE |
Immagine Docker usata per la compilazione su macOS (predefinita zos-build:latest). |
ZOS_ASSUME_YES=1 |
Accetta tutti i prompt in modo non interattivo (installazioni automatiche / CI). |
build.sh — e' documentata nella sezione Build del software immediatamente sotto.
Build del software
Questa sezione mostra come costruire un kernel zOS di base. Il punto di partenza per il build di zOS e’ lo script ‘build.sh’, che contiene tutta la logica necessaria.
Percorsi
La tabella completa dei percorsi, l’elenco degli strumenti e la documentazione del build tree sono identici alla versione inglese e sono descritti in dettaglio li’.
Strumenti
Tutto lo sviluppo e’ stato effettuato su Linux, in particolare Debian/Ubuntu. Oltre alla catena di build standard Linux, e’ necessario il seguente software:
- ZPU GCC ToolChain - La toolchain GCC per lo sviluppo sulla ZPU. Installare in /opt o una directory comune simile.
- Arduino - L’ambiente di sviluppo Arduino, non realmente necessario tranne quando si aggiungono funzioni alla versione K64F di zOS.
- Teensyduino - Le estensioni Arduino per Teensy3 per lavorare con la scheda Teensy3.5.
La struttura completa del build tree, i parametri di build.sh e gli esempi si trovano nella versione inglese.