zOS (Z-Sistema Operativo)
zOS
Originalmente, los desarrollos de ZPUTA/zOS se dirigian solo a la arquitectura ZPU, y tenian dos metodos de ejecucion principales:
- como aplicacion arrancada por IOCP,
- de forma autonoma como firmware de inicio de la ZPU Evo.
Recientemente, zOS se ha portado a la arquitectura ARM Cortex-M4, para su uso con el Freescale K64F en el proyecto tranZPUterSW. Dado que el K64F es una CPU/SoC de arquitectura fija, solo existe un metodo de ejecucion: 'autonomo' -- almacenado en la flash integrada e iniciado cuando la CPU se enciende.
En zOS, toda la funcionalidad que no es del sistema operativo se almacena como aplicaciones en una tarjeta SD. Si no hay tarjeta SD disponible, es mejor utilizar ZPUTA, ya que ofrece la posibilidad de tener en cuenta los limitados recursos BRAM del FPGA al permitir habilitar/deshabilitar todas las funciones de ZPUTA dentro de la imagen cargada primariamente.
Para su funcionamiento, zOS requiere una conexion serial (fisica o USB virtual) con preferiblemente un paquete de emulacion de terminal ANSI/VT100. El requisito de un paquete de emulacion de terminal ANSI/VT100 es para que comandos como el editor o readline funcionen correctamente. Un terminal serial simple tambien funcionara, pero con funcionalidad de aplicacion limitada.
Un desarrollo de hardware mas reciente, el tranZPUter SW-700 v1.3, ve a zOS funcionando como sistema operativo host donde el teclado y la pantalla estan bajo su control directo. Para mantener la compatibilidad con las aplicaciones seriales, se ha desarrollado e integrado un emulador de terminal ANSI.
Uso del sistema operativo
Trabajando en algunos de mis proyectos en este repositorio, siempre tuve en mente que queria un entorno similar, incluso en un sistema embebido con recursos limitados, donde pudiera monitorizar, modificar o reparar sobre la marcha.
La interfaz del sistema operativo se escribio considerando que solo esta disponible un terminal textual serial. Algunos componentes como el editor requieren capacidades avanzadas, y para este proposito se eligio la probada emulacion VT100/ANSI como candidato adecuado. La interaccion es basada en teclado y texto (nada de bonitas interfaces GUI!).
Linea de comandos
El primer encuentro con el sistema operativo es un mensaje de inicio de sesion que muestra la CPU, version, etc. y presenta un prompt para la entrada de comandos:

| 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. |
Aplicaciones
Las tablas completas de comandos para IO de disco, buffer de disco, sistema de archivos, memoria, hardware, pruebas de rendimiento, ejecucion de programas, comandos diversos, aplicaciones y comandos tranZPUter son identicas a la version en ingles y se enumeran alli.
autoexec.bat
Detalles tecnicos
Organizacion de la memoria
IOCP Memory Map

zOS Memory Map

El mapa de memoria para el procesador K64F es similar, pero la Flash RAM y la RAM estan definidas de forma fija y no son variables como en la ZPU.

Interfaz de la aplicacion
Como la mayoria de los sistemas operativos, zOS proporciona una API que una aplicacion debidamente compilada puede utilizar para reducir su tamano y complejidad y reutilizar funciones dentro del sistema operativo como la conexion serial.
En lugar de disenar un conjunto de API personalizado, era mas sensato exponer los metodos dentro de zOS para uso de la aplicacion, por ejemplo printf. Una aplicacion que llama a printf para mostrar la salida en el terminal realmente llama a printf dentro de zOS. Esto se logra creando una tabla de saltos en un vector fijo dentro de zOS.
La tabla completa de vectores API (93 vectores incluyendo Character I/O, I/O formateado, operaciones de sistema de archivos, I/O de disco, gestion de memoria, operaciones de bus Z80 y mas) es identica a la version en ingles y se enumera completamente alli.
El prototipo de la plantilla de la aplicacion es:
uint32_t app(uint32_t param1, uint32_t param2)
El codigo de retorno de la aplicacion a zOS es un entero de 32 bits sin signo. 0 indica ejecucion exitosa, 0xFFFFFFFF indica un error.
Configuracion y compilacion automatizadas (recomendado)
build.sh, que ensambla/compila IOCP, zOS y las apps para una CPU elegida en una sola pasada. Intervienen dos cadenas de herramientas y los scripts de configuracion proporcionan ambas:
| Cadena de herramientas | CPU objetivo | Origen |
|---|---|---|
ZPU zpu-elf-gcc 3.4.2 |
Small Medium Flex Evo EvoMin (ZPU) |
instalada en /opt/zpu (desde ZPU_TOOLCHAIN_URL) |
ARM arm-none-eabi |
K64F (Kinetis / Teensy 3.5) |
incluida en el repositorio en tools/arm (sin instalacion) |
Dado que ambas cadenas de herramientas son binarios Linux / cruzados, la compilacion se ejecuta de forma nativa en Linux, en Docker en macOS (imagen zos-build:latest) y mediante WSL1 en Windows:
| Script | Plataforma | Notas |
|---|---|---|
setup_zOS.sh |
Linux (nativo) / macOS (Docker) | Instala las herramientas base de compilacion + la cadena de herramientas ZPU; en macOS compila dentro de la imagen Docker zos-build:latest. |
setup_zOS_windows.cmd |
Windows 10 / 11 | Lanzador de doble clic que invoca el script de PowerShell siguiente. |
setup_zOS_windows_native.ps1 |
Windows 10 / 11 (WSL1) | Configura WSL1 y ejecuta la configuracion de Linux dentro de ella. |
setup_zOS_wsl1.sh |
dentro de WSL1 | El paso de configuracion de Linux invocado automaticamente dentro de la distribucion WSL1. |
Linux / macOS — setup_zOS.sh
chmod +x setup_zOS.sh
./setup_zOS.sh
Windows 10 / 11 — setup_zOS_windows_native.ps1 — haz doble clic en setup_zOS_windows.cmd, o desde un simbolo de PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_zOS_windows_native.ps1
La configuracion clona ZOS_REPO_URL (por defecto https://git.eaw.app/eaw/zOS.git) en ~/zOS. Una vez finalizada, compila zOS con (build.sh selecciona automaticamente nativo / Docker / WSL1 segun el 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/ y build/SD/ — la ROM de arranque (BOOT.ROM / BOOTTINY.ROM), el cargador de arranque IOCP_<func>_<addr>.bin y el .bin de zOS, ademas de los binarios de aplicacion bin/ listos para copiar a una tarjeta SD formateada en FAT.
Modificaciones utiles de variables de entorno:
| Variable | Proposito |
|---|---|
ZOS_REPO_URL |
Repositorio a clonar (por defecto https://git.eaw.app/eaw/zOS.git). |
ZOS_DIR |
Compilar dentro de una copia de trabajo existente en lugar de clonar. |
ZPU_TOOLCHAIN_URL |
Ubicacion del tarball de la cadena de herramientas zpu-elf-gcc 3.4.2 instalada en /opt/zpu. |
ZOS_BUILD_IMAGE |
Imagen Docker usada para la compilacion en macOS (por defecto zos-build:latest). |
ZOS_ASSUME_YES=1 |
Acepta todos los prompts de forma no interactiva (instalaciones desatendidas / CI). |
build.sh — esta documentada en la seccion Build del software inmediatamente debajo.
Build del software
Esta seccion muestra como construir un kernel zOS basico. El punto de partida para el build de zOS es el script ‘build.sh’, que contiene toda la logica necesaria.
Rutas
La tabla completa de rutas, la lista de herramientas y la documentacion del arbol de build son identicas a la version en ingles y se describen en detalle alli.
Herramientas
Todo el desarrollo se realizo en Linux, en particular Debian/Ubuntu. Ademas de la cadena de build estandar de Linux, se necesita el siguiente software:
- ZPU GCC ToolChain - La cadena de herramientas GCC para el desarrollo en la ZPU. Instalar en /opt o un directorio comun similar.
- Arduino - El entorno de desarrollo Arduino, no realmente necesario excepto cuando se anaden funciones a la version K64F de zOS.
- Teensyduino - Las extensiones Arduino para Teensy3 para trabajar con la placa Teensy3.5.
La estructura completa del arbol de build, los parametros de build.sh y los ejemplos se encuentran en la version en ingles.