Mostrando entradas con la etiqueta Imsai 8080. Mostrar todas las entradas
Mostrando entradas con la etiqueta Imsai 8080. Mostrar todas las entradas

domingo, 15 de mayo de 2016

¿Cómo emulo el panel de una DEC PDP-8/I y una DEC PDP-11/20 en Ubuntu?

¡Trabajadores!

Todo trabajador ha de contar con tiempo para el ocio y la diversión. Todos aquél pasatiempo que atenue nuestro corazón será positivo.

Entre los míos se encuentra andar en motoneta con mi gorro "pochito" y emular equipos computacionales de antigua factura. 
Esto es así pues me permite entender a un nivel elevado el funcionamiento de diferentes técnicas y tecnologías de programación, necesario conocimiento para ejercer las artes y promover las Ciencias de la Computación.

Previamente he realizado una serie de monografías clasificadas bajo la etiqueta "simh" en la cual he avezador a la Masa en el arte de utilizar el emulador libre de hardware vetusto Simh, y sobre cómo operar los paneles de control de las clásicas minicomputadoras PDP de la Digital Equipment Corporation (DEC).

Gracias a la gente de Blinkenbones se ha simplificado la instalación de las mismas, pues ahora se provee un único instalador para hacer trabajar todo el sistema tanto y facilitar su instalación. Asimismo se deja de lado la multiarquitectura para ofrecer compilaciones de 32 y de 64 bits (e incluso para Raspberry Pi.

Esto nos facilitará la tarea pues ahora de un sólo tirón podremos instalar todos los paneles para las diferentes microcomputadoras, junto con sus manuales de operación y guiones que facilitarán el trabajo con ellos. Todo lo podremos hacer rápidamente desde la Consola Terminal de Linux.

Para ello abrimos una con Ctrl+Alt+T e ingresamos los comandos de Organización que correspondan:

Primero instalamos dependencias:

sudo dpkg --add-architecture i386 ;
sudo apt-get update ;
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 ;
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 ;
sudo apt-get install libpcap0.8:i386 ;
sudo apt-get install libxext6:i386 libxtst6:i386 libxi6:i386 ;

sudo apt install openjdk-8-jre ;

Luego creamos un directorio para los paneles y nos dirigimos a el:

mkdir ~/.simh/ ~/.simh/panelsim/ ;
cd ~/.simh/panelsim/ ;



El siguiente paso variará de acuerdo a si nuestro sistema GNU con Linux actual es de 32 o de 64 bitios:
  • Si dispongo de Ubuntu de 64 bits debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.6/panelsim_ubuntu-x64.tgz ;
tar -xvf panelsim_ubuntu-x64.tgz -z ;
  • ...en tanto, si dispongo de Ubuntu de 32 bits - en tanto - debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.6/panelsim_ubuntu-x86.tgz ;
tar -xvf panelsim_ubuntu-x64.tgz -z ;


Conforme hayamos descargado todo y descomprimido, por única vez debo preparar el resto del sistema, lo podré hacer con el comando:

sudo ./prepare.sh

Tras introducir nuestra contraseña, el programa revisará si tenemos instalados todos los componentes necesarios (rpcbind, Java, y otros). Si faltase alguno nos propondrá instalarlo mediante el siguiente mensaje.
'rpcbind' not found, I'm going to install it. OK? Enter = yes, ^C = no.


Para instalar los componentes necesarios presionamos Enter.

Configuramos el lanzador de Java 8 pues de momento no funciona con Java 11):

sudo update-alternatives --config java

El sistema nos mostrará las versiones que tenemos instaladas ahora, y nos permitirá optar entre ellas. Por ejemplo, la pantalla nos demuestra que tenemos tres opciones para la alternativa Java:

Existen 2 opciones para la alternativa java (que provee /usr/bin/java).

  Selección   Ruta                                            Prioridad  Estado
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      modo automático
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      modo manual
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      modo manual

Pulse para mantener el valor por omisión [*] o pulse un número de selección:


En este caso, debemos presionar "2" para elegir la JDK de versión 8.

DEC PDP-8/I con juego ADVENTURE:

La DEC PDP-8/I fue una de las variantes de la PDP-8 original (la primer microcomputadora exitosa, en arquitectura de 12 bits). Introducida en 1968, mejoraba a la original de 1965 en el empleo de circuitos integrados de escala media "Flip-Chips" con lógica transistor-transistor, en lugar de la lógica diodo-transistor anterior. Se distinguió como un equipo ingeniado especialmente para lograr un bajo coste (para la época) y permitir la mayor cantidad de funcionalidades posibles.

Se la podía armar en un gabinete del tamaño de una heladera, que podía contener la unidad central de proceso con su panel de mando, el perforador/lector "veloz" de cintas de papel PC01 o PC04 y diferente instrumental y accesorios.
Para manipular el contenido del banco de memoria núcleo de hasta 4K, y para hacer uso básico de los periféricos de entrada/salida, se empleaban los conmutadores del panel frontal.


A través de su sistema operativo DEC OS8, La PDP-8/I se conectaba a una terminal teletipo como la ASR33 capaz de recibir las órdenes del operador, e imprimían los resultados de los programas y el entorno operativo en papel continuo. Muy posteriormente se agregaron videoterminales con monitores de tubos de rayos catódicos.

Como memoria de masa empleaba cintas de papel perforado, que contenían el software libre. Estos se podían copiarse libremente con la unidad perforadora/lectora, la cual era imprescindible para no tener que ingresar los programas con los conmutadores toda vez que se encendía el equipo..

Para activar el panel de la PDP-8/I, conmutar el uso de periféricos de terminal teletipo y "cargar" la cinta de papel perforado en el lector, cargar en el banco de memoria de núcleo la clásica aventura de texto "Colossal Cave Adventure" y correr dicho programa, podremos usar los siguientes Comandos de Organización:
cd ~/.simh/panelsim/
sudo ./pdp8i_os8advent.sh





DEC PDP-11/20 con BASIC en tira de papel perforado

En este caso contaremos con una representación funcional del panel de la mainframe DEC PDP-11/20 de 1973, que empleaba bus UNIBUS. Se trata de la unidad central de proceso de la minicomputadora con una arquitectura de de 16 bits, con microprocesador KA11 sin microcódigo (pues empleaba lógica transistorizada soldada), sin operaciones de coma flotante, ni memoria protegida. La PDP-11/20 podía direccionar hasta 64 kilobytes de memoria.
De este equipo contaremos con una reproducción lo mejor emulada posible, teniendo en cuenta - de nuevo - que la lógica soldada a punto es incapaz de emularse completamente en un emulador digital por razones obvias. Estéticamente contaremos con el modelo tardío de panel con sus incónicos colores lilas y púrpuras (el primero de 1970 era un esquema a dos tonos de verde).

Conmutadores

Los conmutadores del panel de la PDP-11/20 tienen la misma forma que los de la DEC PDP-8/e. Los conmutadores POWER/LOCK, LOAD ADDR, EXAM, DEPOSIT, LOAD, ENABLE/HALT y START operan de la misma manera que en la PDP-11/40. El conmutador S-INST/S-CYCLE en tanto carece de función real: SimH no puede avanzar paso a paso en lógica soldada. Cada función CONT (continuar) en modo HALT avanza un solo paso de instrucción.

El conmutador con llave puede rotarse en sentido antihorario haciendo clic a la izquierda del centro de la llave, y en sentido horario haciendo clic en la parte derecha de la llave. Poniéndolo en "LOCK" desactivamos todos los conmutadores. Y si se lo disponemos en "OFF" se detiene la simulación en SimH (casi).

Muchos de ustedes se preguntarán ¿si la PDP-11/20 era una minicomputadora de 16 bits, porqué cuenta con 18 conmutadores de direccionamiento en su panel frontal? Esto es así pues los ingenieros de DEC previeron los bits 17 y 16 como reserva para futuras expansiones de memorias que nunca vieron la luz. Se planeó expandir el espacio de direccionamiento de los 64 Kilobytes originales hasta los 256 Kilobytes.

Aún así la PDP-11 vivió mucho más de lo planificado. El rango de direccionamiento del bus UNIBUS estaba limitado a unos 18 bits, pero con un bus de memoria local se podían direccionar hasta 22 bits. En 1978 la se introdujo la nueva DEC VAX con una arquitectura mucho más expandida, por lo que abandonaron los planes de extender la PDP-11 y se la dejó morir por falta de memoria durante los siguientes 20 años.

Lámparas

Las lámparas ADDRESS y DATA funcionan como en todos los paneles de las máquinas DEC PDP, si bien en la PDP-11/20 se trataban realmente de lámparas  incandescentes (en modelos posteriores se las reemplazarían por diodos emisores de luz, mucho más confiables).

Nuevamente, la PDP-11/20 es una máquina de 16 bits, por lo tanto de la misma manera que con los conmutadores, las lámparas ADDRESS 17 y 16 carecen de función, pero siempre permanecen encendidas si se configura una dirección de memoria en la página de E/S, de modo que las direcciones 177777..160000 se mostrarán como 777777..760000.

La PDP-1/20 carecía de memoria virtual. Por lo tanto no existen espacio de datos MMU ni I/D, ni selector de modo KERNEL/SUPER/USER que aparecería en modelos posteriores.

Aún así existen algunos indicadores en la mitad derecha del panel que nos ayudan a rastrear el procesamiento interno durante el modo "paso de un solo ciclo". Esto realmente sólo se necesitaba al depurar errores en la circuitería. Como se mencionó, la CPU 11/20 no implementaba microcódigo, sino que hacía uso de lógica soldada; de modo que en lugar de un flujo microprogramado, se ejecutan un opcode en fases fijas, cada una de ellas caracterizada por diferentes señales de ciclaje. Estas se indican con las lamparas:
  • FETCH: carga un opcode de la memoria
  • EXECUTE: corre los datos desde los registros a través del ALU y los anota de vuelta.  
  • SOURCE/DESTINATION, ADDRESS: ciclos de memoria adicional para acceder a los operando desde la memoria y datos del índice. 
SimH no simulará nada de esta operatoria, de modo que se nospresentará un patrón fijo de lámparas brillando cuando se active la función RUN como reproducción meramente estética. El modo de ciclos a paso simple tampoco está implementado.

La DEC PDP-11/20 representa un esquema de uso clásico de principios de los 1973, con perforador/lector de cintas de papel, terminal teletipo, e intérprete BASIC de 4 kilobytes almacenado en cinta de papel perforado.

El proceso de carga no requería sistema operativo, y consistía en leer dos cintas, una con un cargador absoluto, y luego el intérprete de BASIC.

El proceso en el lector "veloz" de cintas de papel perforado podía durar un par de minutos. En nuestro caso nos llevará poco menos de unos segundos en el emulador. Para hacer todo el procedimiento, podremos usar los siguientes Comandos de Organización:

cd ~/.simh/panelsim/
sudo ./pdp1120_papertape_basic.sh

...si tuviésemos una terminal teletipo, esta imprimiría los datos de conexión en la resma de papel continuo:


...tras hacernos cargo de la información de status, al final debería imprimirse el prompt del BASIC:

PDP-11 BASIC, VERSION 007A
*O 


...debemos entonces presionamos Enter para darle inicio al intérprete BASIC de 4K, y la PDP-11/20 debería indicarnos:
READY

Recordemos que todas las órdenes en lenguaje BASIC DEC11 deben ser tipeadas en mayúsculas (debemos activar Bloq Mayús). pues este equipo no disponía de minúsculas. No proceder de esta manera nos devolvería un error.

Podremos introducir un programa en BASIC para evaluar el uso de dicho intérprete en la PDP-11/20. Por ejemplo, podremos pegarle en la consola el siguiente programa para buscar números primos:

10 REM PRIMOS.BAS CALCULAR NROS PRIMOS
15 PRINT "PDP-11/20 CON 4K DE RAM"
16 PRINT "PROGRAMA NUMEROS PRIMOS"
17 PRINT "COPYLEFT UBUNTU PERONISTA"
20 PRINT "LIMITE";
30 INPUT L
40 PRINT 2;
50 REM PRUEBA SOLO NROS IMPARES N
60 FOR N = 3 TO L STEP 2
70 REM DIVIDE SOLO POR D = 3, 5, 7, ...
80   FOR D = 3 TO SQR(N+1) STEP 2
90     IF N/D = INT(N/D) THEN GOTO 130
100 NEXT D
110 PRINT N;".";
120 GOTO 140
130 PRINT "..";
140 NEXT N
145 PRINT "NO HAY MAS NROS PRIMOS"
150 END
160 REM FINAL DEL PROGRAMA


...Una vez introducido el programa en la memoria de la PDP-11/20, podremos listarlo con LIST y correrlo (en la jerga, darle ejecución) con RUN. Nos pedirá un número máximo para buscar los primos (por ejemplo, podríamos poner 999). El programa procesará la matemática requerida y nos devolverá todos los números primos.


Para escribir programas en BASIC DEC11, nos será útil contar con el Manual de Programación BASIC DEC-11-AJPB-D PDP-11.

Otros equipos antiguos emulados en Ubuntu

Ahora bien, hemos de tener en cuenta que el paquete de emuladores que hemos instalado cuenta también con otras minicomputadoras DEC clásicas y también otros sistemas operativos, naturalmente más potentes en los equipos que siguieron. En particular, también me he extendido sobre otros equipos emulados. En aras de la sencillez y el orden - que es base del progreso sostenido- os indicaré cronológicamente y muy brevemente sobre las características de dichos sistemas, y también indicaré cómo ejecutar los emuladores de paneles en este artículo:

DEC PDP-11/40: 
Se trata de la minicomputadora de 18 bits de 1973, con lógica micro codificada en silicio en un procesador KB11 y hasta 128 kilowords de memoria. Me he extendido sobre ella en este artículo.
Se trata de un equipo clásico de que existieron numerosos clones y sistemas operativos. Podremos emularla con su sistema operativo DEC RT-11SJ o con el UNIX V6 de Bell Labs. Para darles inicio puedo ejecutar los siguientes comandos:

cd ~/.simh/panelsim/

sudo ./pdp1140_rt11.sh

Para poder operar el panel de dicho equipo RT11SJ podremos visitar el artículo específico ya mencionado.

...también podremos correrla con Unix V6.

cd ~/.simh/panelsim/

sudo ./pdp1140_unixv6.sh

Cuando aparezca el prompt "@", hemos de ingresar "rkunix". Nos loguearemos como "root", sin contraseña.
En el prompt de Unix V6 "#", ingresamos "stty -lcase" para poder usar minúsculas. Para lograr un entendimiento mayor de Unix V6, podremos visitar este otro artículo.


DEC PDP-10 con Consola de Control KI10:

Se trataba de procesador PDP-10 de segunda generación, con hasta 4 Megawords de memoria paginada administrable y bus MASSbus. Estaba construida a partir de chips TTL en plaquetas propietarias Flip Chip, capacitado para correr el sistema operativo TOPS-10.
Para dar inicio al panel y al sistema operativo TOPS10, debemos usar los siguientes Comandos de Organización:

cd ~/.simh/panelsim/

sudo ./pdp10ki10_tops10.sh

...cuando en la terminal aparezca el prompt BOOT> escribimos BOOT

Ya he explicado en más detalle cómo utilizar fundamentalmente este panel aquí.


DEC PDP-11/70:
Se trata de la minicomputadora de 36 bits aparecida en 1977 dotada de microprocesador KB11-C, con 2K de caché y hasta 4 megabytes de memoria RAM. Emulada aquí con su panel y el sistema operativo DEC RSX11M. Ya me he extendido sobre ella aquí.
Podremos ejecutar el panel y el sistema operativo emulado con los siguientes comandos:


cd ~/.simh/panelsim/

sudo ./pdp1170_rsx11m.sh


Microcomputadoras MITS Altair 8800, IMSAI 8080, Cromemco Z-1.

Se trata de ejemplares fundacionales en el mundo de la microcomputación hogareña aparecidos en series a partir de 1976, destinados al uso hobbista. Son diversos equipos con bus S-100 con microprocesadores de 8 bits Intel 8008 o Zilog Z80, memoria entre los 4 y los 16KB. memoria de masa en papel perforado, cinta magnética en casette, y eventualmente diskettes de 8 pulgadas. Como sistemas operativos emplean distintos entornos, siendo el más extendido y estandarizado fue el CP/M de Digital Re$earch.


Sobre el uso de estos equipos me he extendido aquí, y sobre el empleo de CP/M 2.2 en microcomputadoras con procesador Z80 emulado me he versado aquí.


Microcomputadoras clónicas IBM con M$-DOS

Se trata de los equipos clónicos que seguían el estándar establecido en 1982 por la Computadora Personal ("PC") de IBM, con su bus ISA. No disponían ya de paneles para introducir los datos, sino que se habían afianzado en el paradigma del empleo del monitor de video y el teclado como dispositivos de Entrada/Salida a un microprocesador Intel i8086/8088 de 16 bits sin memoria protegida. Como medios de almacenamiento se empleaban diskettes magnéticos de 5,25 pulgadas.

Si bien se la previó para emplear varios sistemas operativos, por accionar comercial el que terminó imponiéndose como estándar fue el Sistema Operativo de Disco (DOS) de Micro-$oft. Ya he explicado cómo emular el M$-DOS aquí e incluso cómo usarlo para ejecutar juegos de la era.

Sobre estos equipos compatibles se continuó mejorando su base con nuevas arquitecturas extendidas de 16 bits, y luego entre la que se distingue la i80386, con modo de memoria protegida y paginada de 32 bits. Este ya permitía realizar entonces tareas de multitarea real y correr gestores de ventanas para aplicaciones de 16 bits. De ellos sin duda el más extendido fue Window$ 3.11 sobre el cual ya me he extendido.

miércoles, 10 de febrero de 2016

¿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.