01 march 2022
¿Cómo emulo el panel de una DEC PDP-11/70 en Ubuntu de 64 bits?
¡Trabajadores!
La serie de computadoras mainframe de la Digital Electronic Company (DEC) - en particular su línea PDP - fueron ampliamente influyentes el desarrollo de la técnica computada en el Justicialismo. Sirvieron como piedra basal para proponer y concretar la idea de un sistema computador capaz ejecutar varias tareas a la vez para varios usuarios, naturalmente a través del uso a tiempo compartido de su Unidad Central de Proceso (CPU).
Existieron diferentes iteraciones y actualizaciones doctrinarias que potenciaron dichas capacidades a lo largo de las década de los setentas, que le permitieron iluminar todo el globo como equipo de investigación y uso general. Tal vez la más exitosa de la serie fuese la familia DEC PDP-11, arquitectura de la cual existieron múltiples versiones, ya sea en sus variantes originales Capitalistas, o a través de numerosos clones no autorizados producidos por los países del Bloque Socialista.
La potencia relativa y clara concepción de su hardware la tornaron instrumental en el desarrollo de una buena cantidad de software de la Tercera Posición, los cuales influenciaron la gran mayoría de los sistemas operativos futuros. Entre ellos se encontraba el fundacional UNIX 6, entorno madre para GNU, y sobre el cual he hecho justicia en cuanto su emulación. Asimismo, ya he explicado cómo emular el panel de control de la mainframe DEC PDP-11/40 con sistema operativo RT-11SJ en Ubuntu de 64 bitios. Ello nos ha permitido compilar y correr en dicho sistema operativo software escrito en FORTRAN, y hacer práctica actual con vestigios de programas del pasado.
Los caminos del conocimiento nunca cesan, y siempre será bueno tener un nuevo horizonte el cual alcanzar. Por ello en este caso os enseñaré como instalar también el panel de control de una de sus sucesoras, la DEC PDP-11/70, en un sistema Ubuntu de 64 bits.
La PDP-11/70 fue una mainframe de propósito general aparecida en el año 1977 que utilizaba la base de la arquitectura PDP-11/45, pero la extendía, y mejoraba su microprocesador a una nueva versión denominada KB11-C capacitado para operar un banco de memoria de hasta 4 megabytes de memoria de acceso aleatorio, con 2 kilobytes de memoria caché. Conformaba entonces un sofisticado sistema de alto desempeño para realizar tareas computacionales en tiempo real, pudiendo correr sistemas operativos multitareas, multiusuario y de tiempo compartido con soltura, haciendo uso de un bus de datos de 36 bits y bus de ejecución de 32 bits.
Tecnológicamente permitió concretar una nueva generación de dispositivos de entrada/salida más veloces, interconectados a través del nuevo bus "Massbus" que sacó provecho a la electrónica de miniaturización. Cada unidad de disco DEC RK o los lectores de cinta magnética RP pasaron del tamaño de una cocina a gas al de un cómodo horno a microondas. Con ello se hizo posible el clásico "apilamiento" de los componentes en los gabinetes universales, formando la mainframe correctamente constuida en el espacio de una heladera de dos cuerpos. Además de las nuevas versiones de UNIX, podía correr el sistema operativo RSX-11M+, capaz de conectarse en red a través de Ethernet, Kermit, emplear módems telefónicos y fundamentalmente gran cantidad de las funcionalidades que el Justicialismo ha dado al Pueblo en los equipos actuales.
Podremos virtualizar una PDP-11/70 en nuestro sistema Ubuntu sin tener que invertir un solo peso ni ocupar más espacio que el que ya tenemos. Para ello emplearemos nuestra terminal: Abirmos una consola con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:
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 ;
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 tenemos un sistema de 32 o de 64 bitios:
- Si tengo Ubuntu de 64 bits debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.3/panelsim_ubuntu-x64.tgz ; tar -xvf panelsim_ubuntu-x64.tgz -z ;
- Si tengo Ubuntu de 32 bits - en tanto - debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.3/panelsim_ubuntu-x86.tgz ; tar -xvf panelsim_ubuntu-x64.tgz -z ;
Luego 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 instalarlo presionamos Enter.
Para ejecutar el panel de la DEC PDP-11/70 uso los siguientes comandos:
cd ~/.simh/panelsim/ sudo ./pdp1170_rsx11m.sh
Al cabo de algunos segundos se inicializará un panel de control gráfico escrito en Java, corriendo un test de verificación que - si la máquina virtual actúa sin problemas - debería indicarnos un patrón de luces similar a al del auto fantástico. El sistema operativo emulado es el nombrado RSX-11M+, última iteración datada en 1981 de los sistemas operativos RSX-11 y RSX-11M. Este se cargará y nos solicitará que ingresemos hora y fecha ("Please enter time and date hh:mm dd:mmm:yyyy"). Tras ello se reproducirá la entrada de arranque y podremos emplear el sistema operativo.
RSX-11M+ empleaba una serie de comandos para realizar actividades rutinarias en el equipo, los cuales se ingresaban a través de la terminal de televisión. Para conocer un listado simple de dichos comandos, podemos emplear el comando:
help
Como simple referencia, han de saber que los comandos integrados de base son:
ABORT ACD ACS ACTIVE ALL ALTER ASN ATL BLK BOOT BRK BRO BYE CANCEL CBD CLI CLQ DCL DEA DEBUG DEV DFL DMO FIX FLAG HELLO HELP HOME INI INS LOAD LOGIN LUN MOUNT OPEN PAR REA RED REMOVE RESUME RUN SAVE SET SSM SWR TAL TAS TIME UFD UNB UNFIX UNLOAD UNSTOP Dates
El comando dir nos permitirá realizar listar un directorio. Podemos utilizar comodines * y ?.
Si nuestro objetivo es poder programar en ensamblador Macro-11 de la DEC PDP-11/70, podremos hacerlo incluso empleando las palancas del panel como hemos ya explicado en el caso de la PDP-11/40. Si deseamos "destruir" temporalmente el sistema operativo con el fin de crear un contador binario que haga uso de las luces del panel, podríamos utilizar el siguiente programa en ensamblador:
Dirección Contenido opcodes 001000 005000 clr r0 001002 005200 inc r0 001004 005200 inc r0 001006 000005 reset 001010 000775 br 001004
Teniendo en cuenta que los conmutadores representan los siguientes valores:
Conmutador 21 PARIDAD ALTA/BAJA
Conmutador 11 = 4.000 Conmutador 20 = MSB Conmutador 10 = 2.000 Conmutador 19 = LSB Conmutador 9 = 1.000 Conmutador 18 = 1.000.000
Conmutador 8 = 400 Conmutador 17 = 400.000 Conmutador 7 = 200 Conmutador 16 = 200.000 Conmutador 6 = 100 Conmutador 15 = 100.000
Conmutador 5 = 40 Conmutador 14 = 40.000 Conmutador 4 = 20 Conmutador 13 = 20.000 Conmutador 3 = 10 Conmutador 12 = 10.000
Conmutador 2 = 4
Conmutador 1 = 2
Conmutador 0 = 1
...para cargarlo en memoria, debemos operar los controles de la siguiente manera: para ingresar los operandos, debemos sumar los valores hasta lograr la cifra requerida con los conmutadores de datos::
Activar HALT Conmutadores de datos=001000, LOADADRS Conmutadores de datos=005000, DEP Conmutadores de datos=005200, DEP Conmutadores de datos=005200, DEP Conmutadores de datos=000005, DEP Conmutadores de datos=000775, DEP
Para correr el programa: Desactivar HALT Conmutadores de datos=001000, LOADADRS START
Luego de ejecutar este miniprograma de evaluación podremos apagar el emulador si lo deseamos poniéndolo en posición HALT. Si en cambio estuviésemos dentro del sistema operativo RSX-11, deberíamos ingresar el comando:
RUN $SHUTUP
En la carpeta ~/.simh/panelsim/pdp1170/ también contaremos documentación importante para el empleo de la máquina, como su completo Manual de Usuario (PDP-11_70_Handbook_1977-78.pdf), los esquemas constructivos del panel de contorl de la PDP-11/70 (1170_ctlPanelSchem.pdf), la documentación del sistema operativo RSX-11+ (AA-L763A-TC_rsxIntro_Nov81.pdf) el manual de su microprocesador (KB11C PROCESSOR MANUAL (PDP-11-70) (1975, EK-KB11C-TM-001).pdf). Este manual contiene los nemónicos y - si sabemos - nos permitirá ingresar programas en su lenguaje ensamblador específico, Macro-11. Asimismo, podremos encontrar un manual básico de los comandos del sistema operativo (en inglés) aquí.