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.

2 comentarios:

  1. Buenos dias, navegando investigando un poco de maquinas con CP/M encontre su pagina, muy buena, nunca pense encontrarme con dos pasiones unidas muchas gracias

    ResponderEliminar
    Respuestas
    1. Estimado Lucas:

      En el Justicialismo hemos decidido no tirar "un viejo por la ventana" y nos hemos aclimatado en el hecho de hacer renacer máquinas jurásicas.

      Sobre CP/M corriendo bajo procesador Zilog Z80 emulados podrá encontrar un excelente monográfico aquí: https://ubuntuperonista.blogspot.com.ar/2014/09/Z80-cpm-en-ubuntu-wordstar-visicalc-dbase-multiplan-ubuntu.html

      Dichos microprocesadores, y los clásicos e influyentes Intel 8008 también han sido emulados, y se han desarrollados paneles de control similares a los que munían a las Altair, MITS, o Cromelco de la era (dichos paneles de control se encuentran tanto emulados por software, como reproducidos por hardware). Al respecto encontrarás aquí: https://ubuntuperonista.blogspot.com.ar/2016/02/como-emulo-altair-8800-imsai-8800-ubuntu-simh.html

      También puedes investigar toda la etiqueta de artículos sobre el emulador jurásico SIMH en https://ubuntuperonista.blogspot.com.ar/search/label/simh

      También puedes consultar sobre reimplementaciones de software originalmente diseñado para CP/M, como el clásico procesador de texto Wordstar: https://ubuntuperonista.blogspot.com.ar/2016/02/como-puedo-utilizar-un-editor-similar.html

      Atte.

      Juan Perón

      Eliminar