domingo, 10 de enero de 2016

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

No hay comentarios:

Publicar un comentario