CP/M v2.23

English

Descripcion general

Linux y Windows son ahora los sistemas operativos estandar, pero hace anos todo comenzo cuando Digital Research creo el Control Program/Monitor (CP/M). CP/M fue uno de los primeros sistemas operativos reales para microcomputadoras, proporcionando medios comunes para ejecutar aplicaciones en diverso hardware. Desarrolle la placa de actualizacion de 80 columnas a color y el Rom Filing System con el objetivo primario de realizar CP/M en el MZ80A.

Finalmente decidi escribir mi propia version ROM del CBIOS y combinarla con el BDOS+CCP de CP/M v2.23.

Proceso de arranque CP/M

El arranque de CP/M ocurre en dos fases:

  1. Lectura de un sector de arranque invertido con el software de control AFI, verificacion del codigo 0x02 + “IPLPRO” en 0x0000
  2. Carga de CCP, BDOS y CBIOS a partir de 0x9C00

CBIOS

CP/M se compone de 3 modulos distintos: CCP, BDOS y CBIOS. El CBIOS se personaliza segun el hardware subyacente.
Metodo API Descripcion
BOOT Arranque en frio, inicializar todo el hardware.
WBOOT Arranque en caliente, recargar CCP+BDOS.
CONST Estado de la consola.
CONIN Entrada de consola.
CONOUT Salida de consola.
HOME Mover el cabezal del disco a la pista 0.
SELDSK Seleccionar un disco.
READ Leer un sector.
WRITE Escribir un sector.
SECTRN Traduccion de sector (logico a fisico).
ROM Direccion Descripcion
4K MROM 0xC000 - 0xCFFF CBIOS con API CP/M, rutinas de inicializacion, controlador ROM Disk.
2K Paged ROM Bank 8 Sonido, RTC, teclado.
2K Paged ROM Bank 9 E/S de pantalla y parser terminal ANSI.
2K Paged ROM Bank 10 Funcionalidad controlador de tarjeta SD.
2K Paged ROM Bank 11 Funcionalidad controlador de disquete.

*Caracteristicas*

  • Reloj en tiempo real con granularidad de 50ms
  • Teclado por interrupciones con buffer y repeticion automatica
  • Funcionalidad de terminal ANSI
  • Unidades de disquete configurables (1.44M, 720K, 320K)
  • Discos duros SD Card de 16MB configurables
  • Salida al monitor via SHIFT+GRAPH+BREAK

Instalacion y compilacion automatizadas (recomendado)

CP/M para el tranZPUter se ensambla y empaqueta como parte de la compilacion normal de TZFS, por lo que la forma mas facil de producir el CBIOS, la aplicacion MZF de CP/M y las imagenes de disco CP/M es el script de instalacion automatizada para su plataforma. Cada script es autocontenido -- copie unicamente el archivo correspondiente a su sistema operativo y ejecutelo. Instala los requisitos previos, clona el repositorio TZFS, descarga el paquete de contenido de ~110 MB (TZFS_Files.zip, que incluye el software CP/M) y puede ejecutar la compilacion por usted, sin necesidad de un conocimiento profundo de la cadena de herramientas. Los pasos manuales, herramienta por herramienta, mas abajo son para usuarios avanzados y recompilaciones parciales.
Script Plataforma Notas
setup_TZFS.sh macOS / Linux / WSL Instala un JRE de Java (ensamblador GLASS), una cadena de herramientas C + make (para compilar el submodulo cpmtools incluido), perl, git, y (en macOS) GNU coreutils y bash 4 mediante un tzfs_env.sh generado.
setup_TZFS_windows.ps1 Windows 10 / 11 – Git Bash nativo, sin WSL Usa winget para instalar Git for Windows y un JRE Temurin 17, y luego compila a traves de Git Bash. No se necesita compilador de C – se incluye un tools\cpmcp.exe precompilado.

macOS / Linux / WSL – setup_TZFS.sh

chmod +x setup_TZFS.sh
./setup_TZFS.sh

Windows 10 / 11 (Git Bash nativo) – setup_TZFS_windows.ps1, desde un prompt de PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_TZFS_windows.ps1

Los scripts respetan las variables de entorno TZFS_REPO_URL (por defecto https://git.eaw.app/eaw/TZFS.git) y TZFS_FILES_URL (ubicacion del paquete de contenido) para anular los avisos interactivos. La compilacion escribe la ROM de TZFS, el CBIOS/MZF de CP/M y las imagenes de disco CP/M en el directorio roms/; copielos a una tarjeta SD formateada en FAT32 con tools/copytosd.sh. Para el recorrido completo paso a paso, vea la Guia tecnica TZFS – Sistema de compilacion.

Compilacion de CPM

cd <software>
tools/assemble_cpm.sh

Formatos de disco

   diskdef MZ80A-A
     seclen 256
     tracks 40
     sectrk 32
     blocksize 2048
     maxdir 64
     boottrk 1
     os 2.2
   end

   diskdef MZ80A-1440
     seclen 512
     tracks 80
     sectrk 36
     blocksize 2048
     maxdir 128
     boottrk 0
     os 2.2
   end

   diskdef MZ80A-SDC16M
     seclen 512
     tracks 1024
     sectrk 32
     blocksize 8192
     maxdir 512
     boottrk 0
     os 2.2
   end

Extraer discos CP/M MZ80A

El Sharp MZ-80A almacena datos en formato invertido -- cada byte es el complemento bit a bit. Los datos brutos deben invertirse antes de que CPMTools pueda leerlos.
  samdisk copy <MZ80A DISK NAME>.DSK <MZ80A DISK NAME>.RAW --cyls=40 --head=2 --sectors=16 --size=256
  python3 -c "import sys; sys.stdout.buffer.write(bytes(~b & 0xFF for b in open('<MZ80A DISK NAME>.RAW','rb').read()))" > <MZ80A DISK NAME>_normal.RAW
  cpmls -f MZ80A-A <MZ80A DISK NAME>_normal.RAW

Guia del desarrollador

Una Guia del desarrollador CP/M completa esta disponible.

Licencias

Este diseno esta licenciado bajo la GNU Public Licence v3.