12 march 2022
¿Cómo emulo la Imsai 8080 y la Altair 8800 con panel frontal en Ubuntu?
Al recibir embajadores de toda Latinoamérica, Juan Perón expone los fundamentos políticos del Justicialismo para las Relaciones Exteriores de la Nación, y enseña a los mandatarios cómo instalar en Ubuntu emuladores y paneles de tres microcomputadoras históricas influyentes: la peronistas Altair 8800, IMSAI 8080, y la Cromemco Z-1.
Señores Presidentes, Ministros Plenipotenciarios, embajadores, damas y caballeros:
Recibo de ustedes la más sinceras muestras de amistad en el nombre de Naciones que serán siempre nuestros más cálidos hermanos y nuestra familia. A todos vosotros he saludado y me he reconfortado en el entendimiento que será una sana hermandad la que nos lleve a nuestro destino común de Grandeza.
Nuestra tarea es una que ha de darse paso a paso, mancomunando esfuerzos en pos de completar las tres consignas que hemos tomado como banderas: Libertad económica, Justicia Social, y Soberanía política. Ese mismo cometido, tan cristiano como colmado de altruismo, puede llevarse a cabo entre hermanos en esta América Grande, que es nuestra tierra Natal y el fin anhelado de nuestros Pueblos.
Son nuestros pueblos quienes nos impulsan a un destino hermanado de grandeza, y no podemos mas que ser fieles reflejos de esta acción. Para ello hemos de alejarnos de las perniciosas doctrinas que - ajenas a nuestro sentir - pretenden imponernos ciertos individuos, y que por inconfesables han sido rechazadas ya por todos los hombres de bien en el globo.
El software no es un bien privado, es un bien de carácter social. La acción ineludible de todo Justicialista ha de ser compartir todo su software. En la informática, compartir el software es combatir al Capital.
La esencia del software es trascendental, pues puede ejecutarse en cualquier tiempo, y por tanto es imperecedera. Bajo tales premisas, constituye un crimen pretender registrarlo intelectualmente bajo la noción de "dereocho de autor", cuando es el usuario del mismo quien goza de los derechos totales de vida. Os ilustraré con un ejemplo, que suele aclararlo todo.
Existen equipos que por antigüedad y fundamental valía en el universo de la computación, deben ser recreados digitalmente. Ya he explicado cómo instalar un emulador de equipos dotados de procesador Z80 y del sistema operativo CP/M de la Digital Res€arch en Ubuntu. Sin embargo, además podremos emular por software sus clásicos Paneles de Operación, para tocar lo que haya que tocar para llevar a dichos equipos de antaño la seguridad que nos da el Justicialismo.
En este caso, os enseñaré cómo instalar emuladores de tres microcomputadoras fundacionales: la MITS Altair 8800, la IMSAI 8080, y la Cromemco Z-1. Se trata de equipos diseñados para su venta armados o en forma de kit armables montados alrededor de los primeros microprocesadores de silicio programables y "de potencia" en arquitectura de 8 bits, el Intel 8080 y el Zilog Z80. Fueron estos los que llevaron al nacimiento del software hobbista.
En nombre del Justicialismo os enseñaré como instalar dichas máquinas virtuales en Ubuntu, acercaré su documentación escencial, e instruiré cierto accionar básico.
Como medida previa, abrimos una terminal con Ctrl+Alt+T y descargamos las dependencias de programación necesarias para hacer efectivas las máquinas virtuales. Ello lo haremos con el siguiente Comando de Organización:
sudo apt-get install libx11-dev libpth-dev xorg-dev gcc libjpeg-dev libpthread-workqueue-dev x11proto-core-dev x11proto-bigreqs-dev freeglut3 freeglut3-dev
El procedimiento nos solicitará descargar los paquetes (indicamos s) y luego debemos ingresar a ciegas nuestra contraseña de Conductor; se procederá a la descarga de la paquetería necesaria. Acto seguido crearemos dentro de nuestra Carpeta de Usuario una carpeta oculta donde colocaremos todos los componentes necesarios para las máquinas virtuales y sus paneles de operación, y los descargaremos allí. Todo este predicamento lo haremos Realidad Efectiva introduciendo el siguiente bloque de Comandos de Organización:
mkdir ~/bin/ ~/.simh/ ~/.simh/panelsim/ ; cd ~/.simh/panelsim/ ; wget http://www.autometer.de/unix4fun/z80pack/ftp/z80pack-1.36.tgz ; tar xzvf z80pack-1.36.tgz ;
La descarga del paquete z80pack puede tardar un par de minutos. Una vez descargado se habrá descomprimido. Acto seguido compilaremos el material básico para las máquinas emuladas. Lo haremos con estos Comandos de Organización:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim/srcsim ; make -f Makefile.linux ; make -f Makefile.linux clean ; Si todo va bien, debería indicarnos "done" (hecho) al final de la compilación. Acto seguido, podremos compilar los programas de apoyo para las máquinas virtuales que corran el viejo sistema operativo CP/M, algunos requeridos para la emulación:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim/srctools/ ; make ; make clean ; Conforme nos indique "done", podremos proceder a crear unos respaldos opcionales de las imágenes de disco arrancables del sistema operativo CP/M (unos archivos .dsk). Los haremos con:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim/disks/library/ ; cp -p * ../backups ;
Ahora podremos compilar e instalar la libreria libfrontpanel.so, fundamental para la representación y acción fidedigna de los paneles frontales de nuestras máquinas virtuales cláscas:
cd ~/.simh/panelsim/z80pack-1.36/frontpanel/ ; make -f Makefile.linux ; make -f Makefile.linux clean ; sudo cp ~/.simh/panelsim/z80pack-1.36/frontpanel/libfrontpanel.so /usr/lib ;
Esto compilará la librería libfrontpanel.so y la copiará a la carpeta de sistema para las librerías de usuario /usr/lib/. Para que al compilar las máquinas virtuales estas puedan hacer uso de la libreria libfrontpanel.so, hemos de modificar el archivo de perfil para incluir la ruta a la carpeta /usr/lib/. Para ello editamos el archivo ~/.profile con el siguiente comando de organización:
nano ~/.profile
...se abirá el editor peronista GNU Nano con un archivo que ya tendrá contenido. Debemos desplazarnos al final de dicho archivo sin alterar ninguna de las líneas, y al final agregamos una línea y le pegamos el siguiente texto:
agregado para compilar paneles frontales emulados
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/
fin de agregado
...luego guardamos con Ctrl+o y salimos del editor con Ctrl+x. Una vez que hayamos retornado a la terminal, es importante que la cerremos ingresando el comando:
exit
Como acción final, compilamos los componentes de las tres máquinas virtuales. Para ello volvemos a abrir la terminal con Ctrl+Alt+T, y procederemos a compilar primero la maquina virtual imsaisim que emula la clásica MITS Altair 8800, la primer microcomputadora personal:
cd ~/.simh/panelsim/z80pack-1.36/altairsim/srcsim/ ; make -f Makefile.linux ; make -f Makefile.linux clean ;
Si todo va bien, debería darnos mensajes similares al siguiente: ...luego la Cromeco Z-1:
cd ~/.simh/panelsim/z80pack-1.36/cromemcosim/srcsim/ ; make -f Makefile.linux ; make -f Makefile.linux clean ;
...y finalmente la joya de la corona, la IMSAI 8008:
cd ~/.simh/panelsim/z80pack-1.36/imsaisim/srcsim/ ; make -f Makefile.linux ; make -f Makefile.linux clean ;
En las tres máquinas virtuales debería indicarnos los mismos mensajes de éxito. Con dicho accionar llevado a cabo, habremos procedido a crear émulos libres y virtuales capaces de correr en Linux de las tres microcomputadoras fundamentales. Como última medida enviamos los binarios creados a la carpeta correspondiente con:
cd ~/bin/ ; sudo mv bin2hex mkdskimg send receive ptp2bin /usr/local/bin/ ; cd ~ ; rm -r ~/bin/
Ejecución de las máquinas virtuales y sus paneles:
Para ejecutar el panel de cada una de las máquinas virtuales se debe correr el ejecutable provisto dentro de la carpeta de cada una de ellas.
La primera se trata de la mítica MITS Altair 8800, una máquina hobbista dotada de 16K de memoria RAM y microprocesador Intel 8080 de 2 Mhz, que apareció como tapa del número de enero de 1975 de la revista Popular Electronics.
Inspiró a muchos de nerds peronistas para desarrollar y compartir masivamente software casero y libre, y a algunos nerds gorilas en la idea criminal de ocultar los códigos fuentes y comercializar binarios compilados.
El equipo original no disponía de teclado ni monitor, sólo los interruptores de control y las luces de estado, y adicionalmente un puerto serial para conectar una terminal de control. El patrón de trabajo simula a los paneles de las minicomputadoras en boga a mediados de los 70s, como las DEC PDP (de las cuales ya he instruido sobre cómo operar varios modelos).
Para activar la máquina virtual de la MITS Altair 8800 "pelada" (esto es, en condiciones originales y con su banco de memoria libre) podremos hacer:
cd ~/.simh/panelsim/z80pack-1.36/altairsim/ ./altairsim
El panel de la MITS Altair 8800 virtual está representado por los interruptores básicos de esta microcomputadora fundacional. La documentación en estos casos de computación primigenia cobraba una iportancia extrema, y las compañías ponían mucho énfasis en la documentación impresa en papel y entregada encarpetadas y clasificadas en cajas. Podremos aprender del mismo a través del Manual de Operador de la MITS Altair 8800, y programa en ensamblador del Intel 8080. En este caso de estudio extremo nos serviría el clásico Manual de Programación en Ensablador del Intel 8080. y el mucho más avanzado y electrónico Manual de Teoría de Operación para la MITS Altair 8800. Vean señores, la MITS Altair 8800 tenía poco o ningún uso, pero con software intérprete Altair BASIC y luego con sistemas operativos de potencia, constituyó la primer microcomputadora personal práctica de la historia. En este caso contamos para su ejecución con varios intérpretes BASIC (versiones de 4K Micro$oft, de 4K Altair, versiones de 8K, etc), así como distintas versiones del sistema operativo de control CP/M compiladas para el microprocesador de Intel. Estos programas de software pueden cargarse solicitándolos a la hora de correr el ejecutable de la máquina virtual. Por ejemplo, para cargar el potente sistema operativo CP/M 2.2 usaríamos:
cd ~/.simh/panelsim/z80pack-1.36/altairsim/ ./cpm22
Esto nos encenderá la terminal de video en standby (mostrará el mensaje "8080-SIM":
Para encender la microcomputadora con tal sistema operativo, debemos ir al panel frontal de la Altair, y configurar el conmutador ON/OFF en posición ON y luego el conmutador RUN/STOP en la posición RUN.
De esta forma arrancará en frío, inicializará dos unidades de disco virtual (nomencladas à la CP/M como a: y b:) y arrancará "con el diskette magnético del sistema cargando y corriendo". Brillarán las luces del panel, y casi instantáneamente se nos presentará el prompt del sistema operativo CP/M 2.2 para la MITS Altair 8800 con Intel 8080.
CP/M COLD BOOT
Micro Resources 64K CP/M Ver. 2.2 of 1/15/82 A>
La videoterminal estará ya aguardando nuestras órdenes de computación arqueológica: Los comandos de CP/M son relativamente similares a los de M$-DO$ (del cual derivó). Podremos hacer un directorio con dir, podremos revisar el contenido de los archivos con type, y editar archivos con el vetusto ed. Sobre todos ellos me he explayado en artículos anteriores sobre el emulador simh y CP/M, y al estar disponible su manual no me extenderé en instruirlos. En cualquier caso, ante el accionar el equipo debemos ver como reacciona el panel luminoso con los contenidos del banco de memoria.
Podremos encontrar gran variedad de documentación de la Altair 8800 recurriendo aquí y aquí. Para salir del sistema CP/M 2.2 introducimos el comando a:bye
Otra joya destacada de esta colección es la IMSAI 8080. Aprovechando que MITS no podía hacer frente a la explosiva demada de sus Altair 8800, IMSAI comenzó a sacar su propio modelo 8080, dotado con el mismo microprocesador Intel 8008 y 16K de memoria RAM, pero con una construcción mejor pensada y componentes de mayor calidad. La máquina virtual dispone de un vistoso panel 3D de la IMSAI 8080 que podremos utilizar en Ubuntu. Para iniciar la máquina "pelada" (sin software precargado) debemos ejecutar Imsaisim. Para ello ingresaríamos:
cd ~/.simh/panelsim/z80pack-1.36/imsaisim/ ./imsaisim
Al igual que en el caso de la MITS Altair 8800 terminal de video responderá con una pantalla que anuncia la máquina virtual de la IMSAI 8080: Asimismo, se nos presentará la interfaz 3D con la IMSAI "pelada" (sin programa alguno cargado en su banco de memoria). Para que arranque movemos el interruptor rojo PWR ON/PWR OFF a la posición ON. Indudablemente quien conozca la operación de su panel frontal, podrá introducir tediosamente los comandos en el mismo moviendo los interruptores. Las acciones para depositar registros en la memoria son similares a los de las DEC PDP (si bien el lenguaje ensamblador del procesador Intel 8080 es diferente). La IMSAI nos sirve especialmente para practicar ensamblador puro de este microprocesador tan caro al desarrollo de la informática, y como plataforma de estudio de las ciencias de la computación. Su manual de usuario podrá descargarse desde aquí.
El panel simulado de la IMSAI por defecto es un modelo 3D, que podremos rotar el botón derecho y los movimientos del ratón, y podremos accionar sus controles mediante clics sobre los mismos con el botón derecho. Con Z o z regularemos el zoom en la ventana 3D, y con Mayúsculas+clic del ratón podremos desplazarnos. Si quisiéramos utilizar un panel 2D podremos seleccionar la ventana con el panel 3D y conmutar a su versión 2D mediante la tecla v.
Podremos también arrancar la microcomputadora con cualquiera de los programas que anhelemos. Podremos ejecutar distintos sistemas operativos que se proveyeron a lo largo de la vida útil de la IMSAI 8080: su Sistema Operativo de Disco de IMSAI en las versiones original (imdos), la 2.02 (imdos202), la 2.05r0 (imdos205r0), o el IMSAI CP/M 1.31 (imsaicpm13). Todas ellas son versiones creadas y licenciadas por Gary Kildell para la IMSAI.
cd ~/.simh/panelsim/z80pack-1.36/imsaisim/ ./imsai-cpm13
Una vez que se cargue en la terminal la máquina virtual, debemos encenderla (llevando el conmutador PWR ON/PWR OFF en la posición ON). Se encenderá la luz WAIT). Luego debemos llevar el conmutador RUN/STOP a la posición RUN (arriba).
En la terminal de video debería aparecer entonces el prompt del sistema operativo CP/M 1.31 de nuestra IMSAI:
IMSAI 16K CP/M VERS 1.31 A> Para compilar, podremos utilizar ensamblador. Os enseñare cómo hacer un pequeño programa justicialista en este elevadísimo lenguaje.
Programando en Ensablador 8080 en CP/M Para programar en CP/M, debemos escribir la rutina en Ensamblador 8080, interpretarlo, y ejecutarlo. Para ello debemos escribir el programa con el editor ed en nemónicos de Intel 8080, ensamblarlos con asm a hexadecimal, y usar load para convertir dicho archivo a un binario ejecutable con extensión .com.
La tarea será sencilla. Ejecutamos el editor ed con un archivo de código fuente de extensión .asm. En aras de la facilidad, lo haremos con un pqeueño programa que todo programador emplea, el pocho.asm. Como Conductor, os indicaré los resultados de pantalla y ustedes ingresarán lo que está en negrita:
A> ed pocho.asm
NEW FILE
: i
1: ORG 0100H
2: BDOS EQU 0005H
3: START: MVI C,9
4: LXI D,MSG$
5: CALL BDOS
6: RET
7:
8: MSG$ DB 'VIVA PERON!$'
9: END START
10: (presiono Ctrl+z para salir del modo inserción)
: e
Tras haber editado nuestro código fuente, lo ensamblamos con:
A> asm pocho
CP/M ASSEMBLER - VER 1.0 0115 001H USE FACTOR END OF ASSEMBLY
Esto creará una serie de archivos nuevos en la unidad de disquete virtual. Si ingresamos type pocho.prn veremos el desensamblado para el microprocesador Z80, y si ingresamos type pocho.hex veremos el código hexadecimal del mismo.
Si quisiéramos compilar un ejecutable, usaremos load pocho, y ello creará el archivo ejecutable pocho.com. Si ingresamos dump pocho.com, CP/M nos mostrará directamente el volcado de memoria del código objeto del programa binario pocho.com.
Para ejecutarlo simplemente ingresamos pocho, y si nuestro entorno y nuestro programa ensamblador funcionan de manera correcta en la máquina Altair 8080 virtual, la informática nos contestará airosa:
Para salir del emulador CP/M debemos introducir a:bye, o bien llevar el conmutador PWR ON/PWR OFF a la posición OFF.
Para iniciar una intérprete de BASIC en la IMSAI 8080, debemos utilizar:
cd ~/.simh/panelsim/z80pack-1.36/imsaisim/
./imsaisim -xbasic8k.hex
Sin duda es una máquina histórica y de calidad, que podremos volver a la vida y hasta utilizarla para jugar al Global Peronism Spread. El manual de operación de estos clones de CP/M puede encontrarse aquí, en tanto que la documentación de operación a nivel ensamblador son los mismos que en la Altair 8800 - por tratarse de clones - y ya los he incluido.
Para finalizar, podremos utilizar la menos conocida pero más potente Cromemco Z-1. Esta venía con una CPU Zilog Z80 a 4 MHz, y con 8K de memoria RAM
Para ello utilizamos el mismo principio que en los casos anteriores.
cd ~/.simh/panelsim/z80pack-1.36/cromemcosim/ ./cromemcosim
El panel de la Cromemco Z-1 arrancará en 2D, podremos cambiarlo a 3D, aunque lamentablemente la máquina entera no aparece (sólo podremos reclinar el panel 3D, con lo cual no está muy logrado).
Nuevamente, si quisiéramos que la Cromemco Z-1 apareciese con algún sistema operativo cargado, debemos indicarlo. Por ejemplo:
./cromemcosim cpm2
Todas las máquinas virtuales cuentan también con placas de entrada/salida emuladas, que pueden configurarse opcionalmente según nuestras necesidades, editando los archivos de texto correspondiente:
nano ~/.simh/panelsim/z80pack-1.36/imsaisim/conf/iodev.conf nano ~/.simh/panelsim/z80pack-1.36/altairsim/conf/iodev.conf
Ambos archivos de configuración incluyen comentarios (en inglés), aunque sus opciones deberían resultar obvias y no requerir mayor tratamiento de parte del docente.
Ejecutar las máquinas virtuales de manera remota (sin los paneles):
Todas estas microcomputadoras originarias podían adosarse a terminales seriales (inicialmente teletipo, pero también videoterminales tipo DEC). Esta característica nos permitirá ejecutar las terminales a través de nuestra terminal de texto de forma remota. Incluso podríamos utilizar una verdadera terminal serial conectada a nuestro sistema emulador.
Si quisiéramos ejecutar CP/M 2.2 usaríamos:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim ./cpm2
...para salir de la sesión remota de CP/M 2.2 ingreso a:bye
Si deseo ejecutar el sistema operativo CP/M 3:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim ./cpm3
...para finalizar la sesión de CP/M 3 ingreso a:bye
En tanto, si deseo ejecutar el sistema operativo más avanzado de la serie, el MP/M 2, debo utilizar:
cd ~/.simh/panelsim/z80pack-1.36/cpmsim ./mpm
...y cuando arranque la máquina virtual remota, ingreso: mpmldr
Para salir de la emulación de MP/M 2, ingreso la orden a:bye
Para realizar tareas mas intensivas de intercambios y manipulación de datos entre Linux y CP/M podemos utilizar cpmtools, un conjunto de herramientas de caracter opcional. Sólo deberían servir si realmente estamos interesados en hacer uso práctico de los emuladores por cuestiones históricas o forense con estos antiguos programas. Entre las herramientas que se incluyen están
cpmls: es un listador de directorios linux para imágenes CP/M
cpmcp: copiador de archivos desde y hacia el sistema de archivos CP/M
cpmrm: borrador de archivos CP/M
cpmchmod: cambiador de permisos de ficheros CP/M para Linux
cpmchattr: cambiador de atributos de ficheros CP/M pàra Linux
mkfs.cpm: formatea un sistema de archivos CP/M en Linux
fsck.cpm, reparador simple de sistema de archivos CP/M para Linux
fsed.cpm visor del sistema de archivos CP/M en Linux
Man (manuales) para Linux sobre el sistema de archivos CP/M y las herramientas.
Para instalarnos la suite de herramientas cpmtools las descargamos con:
cd ~/.simh/panelsim/z80pack-1.36/ ; wget http://www.moria.de/~michael/cpmtools/files/cpmtools-2.20.tar.gz ; tar xzf cpmtools-2.20.tar.gz ;
...y lo compilamos con:
cd ~/.simh/panelsim/z80pack-1.36/cpmtools-2.20/
./configure make make install
Desinstalación Si quisiera desinstalar todo lo actuado, es sencillo. Simplemente indico el siguiente bloque de comandos.
rm -r ~/.simh/panelsim/z80pack-1.36/ sudo rm /usr/lib/libfrontpanel.so cd /usr/local/bin/ sudo rm bin2hex mkdskimg send receive ptp2bin
Finalmente, edito el archivo .profile para restituirlo a la normalidad.
nano ~/.profile
...y elimino las líneas agregadas al final del mismo.