¿Cómo emulo una PDP-8i con TSS/8 en Ubuntu? ¡Trabajadores! Para volvernos peritos en la Conducción de los hombres se requiere de un estudio concienzudo de la historia del Arte, que es el sentido práctico de toda esta biblioteca que me acompaña en el despacho. Es que de lo antiguo hemos de aprender para proyectarnos en el futuro pues lo que funcionó en el pasado lo hará en el futuro si las condiciones son emuladas. Decía Napoleón que un ejemplo suele aclararlo todo. Vean señores, el TSS/8 fue un sistema operativo de tiempo compartido para la minicomputadora DEC PDP-8 diseñado originalmente por Adrian van de Goor, estudiante (graduado de la Universidad de Cornell Mellon) y luego mejorado y comercializado como sistema completo por la Digital Equipment Corporation a partir de 1968. Originalmente requería una PDP-8, 8I u 8E con una interfaz paralela RP08 o DF32 asociada al menos a una unidad de cinta RS08 o de disco DS32 para tareas de intercambio y para almacenamiento. Si bien el panel de control de esta máquina podía tener un tamaño reducido al de una actual computadora de escritorio, lo cierto es que el avío completo dejaba en comparación chica y económica a una heladera Siam. Pero la distancia del tiempo puede suplir estos aspectos con creces y permitirnos el estudio del Arte. Nuestro sistema GNU con Linux puede ser adaptado - por genialidad maquinal - a emular todo tipo de piezas, incluyendo la inefable DEC PDP-8/I. Para tal menester ha sido concebido el emulador SimH, capaz de dar rienda a todo este tipo de mainframes del ayer. A esto me he aficionado, y os indicaré como hacerlo. Instalación de TSS/8 En primer lugar habremos de preparar una estructura de directorios para mayor comodidad, la cual nos oficiará de banco de pruebas y laboratorio. En ella descargaremos una imagen ya realizada con el TSS/8, la cual antiguamente se comerecializaba por un par de docenas de miles de dólares, pero gracias al Justicialismo y a Miguel Miranda - que es un buen negociante - hoy la sacamos por cero chirolas. A tal fin abrimos una terminal con Ctrl+Alt+T e ingresamos el siguiente bloque de Comandos de Organización: mkdir ~/.simh/ ; mkdir ~/.simh/panelsim/ ; mkdir ~/.simh/panelsim/pdp8i/ ; cd ~/.simh/panelsim/pdp8i/ ; wget https://raymii.org/s/inc/downloads/pdp/tss8_init.bin ; wget https://raymii.org/s/inc/downloads/pdp/tss8_rf.dsk ; touch tss8.simh_pdp8i ; echo 'load tss8_init.bin' >> tss8.simh_pdp8i ; echo 'set rf enabled' >> tss8.simh_pdp8i ; echo 'set df disabled' >> tss8.simh_pdp8i ; echo 'attach rf tss8_rf.dsk' >> tss8.simh_pdp8i ; echo 'attach ttix 4000' >> tss8.simh_pdp8i ; echo 'run 24200' >> tss8.simh_pdp8i ; chmod +x ~/.simh/panelsim/pdp8i/tss8.simh_pdp8i Ahora bien, todo Movimiento ha de tener opciones, ya que los caminos no suelen ser únicos para lograr la Felicidad que todos anhelamos. Por tal motivo podremos contar con dos opciones para emular TSS/8. La más simple que recomiendo sin dudar es utilizar el emulador directamente "a pelo" en Ubuntu, Y otra es emplear el simulador de panel de PDP8 Panelsim (el cual requiere instalarse aparte). En el caso de apostar por la simplicidad, el accionar es veloz. Ingresamos el comando: sudo apt install simh ...y tras introducir nuestra contraseña, se descargará el paquete de emulación genérico. Una vez instalado, podremos ejecutar TSS/8 en él mediante: cd ~/.simh/panelsim/pdp8i/ pdp8 tss8.simh_pdp8i Y ya está. Sin embargo, podríamos querer hacer alarde del panel de PDP-8/i con sus lucecitas de status simuladas que nos dan un aspecto navideño. En tal caso realizamos el proceso de instalación siguiendo esto y luego adaptaríamos TSS/8 para funcionar en el mismo mediante este bloque de comandos de organización: cd ~/.simh/panelsim/ touch ~/.simh/panelsim/pdp8i_tss8.sh echo '# Inicia una PDP-8/I corriendo TSS8' >> ~/.simh/panelsim/pdp8i_tss8.sh echo './_launch.sh "blinkenbone.panelsim.panelsimPDP8I.PanelsimPDP8I_app" "--width 1000 --power 1" pdp8i pdp8_realcons tss8.simh_pdp8i 248-blinkenbone-simulated-pdp8i-panel' >> ~/.simh/panelsim/pdp8i_tss8.sh chmod +x ~/.simh/panelsim/pdp8i_tss8.sh ...tras lo cual lo ejecutaríamos con: cd ~/.simh/panelsim/ ./pdp8i_tss8.sh Cualquiera de los dos casos que hubiésemos decidido utiliar, nuestra terminal teletipo comenzará a percutir, imprimiendo los mensajes de status del emulador. Si todo va bien, al final del prompt de inicio se nos interrogará la opción de arranque: LOAD, DUMP, START, ETC? Tipeamos START para darle arranque al sistema TSS/8. Este nos solicitará indicar fecha y hora para el oscilador de control emulado. Los valores son numéricos en formato MM-DD-AA y HH:MM (de 24 horas). Es importante conocer que TSS/8 no preveía año 2000, de modo que conviene restar cuarenta años a la fecha real. Por ejemplo: MONTH-DAY-YEAR: 11-09-81 HR:MIN: 14:23 A continuación debemos presionar la tecla Intro dos veces y se nos presentará el prompt de inicio de sesión o login. Esta se representa por un muy poco expresivo punto. . Esto es lo deseado, y significa que el sistema cree que se haya corriendo en una PDP-8 y se encuentra esperando las conexiones desde las terminales teletipo: Ahora bien, para ingresar remotamente como usuario de TSS/8 debemos utilizar el comando LOGIN un PPN (identificador de usuario) junto con su contraseña. La sintaxis es: LOGIN PPN CONTRASEÑA. El TSS/8 que hemos descargado ya contempla usuarios con sus PPN, de modo que podremos utilizarlos. La lista de usuarios y contraseña disponibles en este sistema emulado que os he provisto es la siguiente: PPN Contraseña [0,1] VH3M [0,2] LXHE [0,3] SHUG [77,77] [1,10] WBCN [20,1] DT [20,2] PT [20,3] TSS8 [20,4] EDIT [20,5] 4TH [1,50] JERK Suponiendo entonces que anhelamos loguearnos como el usuario PPN 1,10 tipeamos: LOGIN 1,10 WBCN (la terminal no hace eco de lo introducido en este punto para no dejar registro impreso de usuarios y contraseñas). Tras presionar la tecla Retorno de Carro (tecla Intro en el emulador) se nos presentará la impresión inicial de status: TSS/8.24 JOB 01 [01,10] K00 01:24:26 SYSTEM IS DOWN, INC. . El TSS/8 permitía conocer de manera somera el funcionamiento de un sistema de tiempo compartido en esta máquina, lo cual se estilaba ya que la posibilidad era más corriente que utilizar un entorno mucho más costoso como TOPS-10. Cada usuario podrá disponer de un espacio en la memoria de masa del sistema. Ejecutar programas Para ejecutar un programa de la librería de sistema o desde su directorio puede lograrse mediante el comando "RUN" ("correr"), con la letra R: R CAT ...correrá el programa CATALOG, presentando los contenidos de su directorio. Con el comando SYSTAT obtendrá una impresión completa de lo que está haciendo el sistema, quién está conectado y mucha información adicional. TSS/8 cuenta con el ambiente de programación BASIC-8. Para iniciarlo use el comando R BASIC. Se le preguntará si desea crear un nuevo fichero ("NEW"( o cargar uno antiguo ("OLD"). Por ejemplo, podríamos solicitar un fichero nuevo con el titulo 17OCT y tipear en la teletipo el siguiente fuente del siguiente instigador BASIC de 17 de Octubre digital: 10 PRINT "USTED HA PROVOCADO UN 17 DE OCTUBRE DIGITAL EN LA PDP-8!" 20 PRINT "YOU HAVE STARTED A DIGITAL OCTOBER 17TH ON THE PDP-8!" 30 PRINT "" 200 PRINT " --------------------" 300 PRINT " ! QUEREMOS A PERON ! \O/ \O>" 400 PRINT " !------------------! -\OO/--\O----O/---" 500 PRINT " O O/ ! O O/ O H !/!> [ ]]]]]" 700 PRINT " 1 /\ M M M M 1 X [--(O)----------(O)-" 701 PRINT "" 702 PRINT "USTED ES UN BUEN DESACAMISADO! FELICITACIONES!" 800 PRINT "YOU ARE A NICE DESCAMISADO! CONGRATULATIONS!" 1000 END Una vez terminado de introducir el programa en memoria, bien podría listarlo con LIST o compilarlo y correrlo (ejecutarlo) con RUN. Podremos así replicar en el presente exactamente el pasado. Otros comandos del subsistema BASIC son los siguientes: Comando Acción BYE Sale y vuelve al Monitor TSS/8 CAT Cataloga los ficheros del disco DELETE n Borra la línea número n DELETE n1,n2 Borra los números de línea n1 hasta n2 LIST Lista el programa actual LIST n Lista una línea específica NEW Preguntará por un nuevo nombre de programa BASIC. OLD preguntará por un el nombre de un programa BASIC ya almacenado en el disco y lo cargará en memoria. SAVE Almacena los contenidos de memoria a disco empleando el nombre actual SAVE [nombre] Almacena los contenidos en memoria al disco usando el nombre dado. UNSAVE Elimina el programa con el nombre actual del disco (requerido antes de guardar una versión nueva con el mismo nombre). Ctrl+B,S Detiene un programa en ejecución (presione Ctrl+b y luego la tecla s). Abandonar la sesión El comando LOGOUT o KJOB nos permitirá abandonar la sesión de TSS/8. También es posible utilizar K como un atajo a este comando. Es importante abandonar sesión antes de desconectar la terminal, ya que el sistema no lo quitará automáticamente de los usuarios conectados, y podría quedar la sesión activa en segundo plano. Si por alguna razón parece estar detenido, intentaremos Ctrl+B,S. Se ofrecen más adelante mayores detalles sobre lo que hace ^B en la sección Detener un programa en Ejecución. Documentación Sin duda os será de suma utilidad la posibilidad remota de acceso a un sistema ya preparado y pueso a disposición pública. Podrán encontrar su ayuda y guía de uso en castellano aquí. La Guía de Usuario de Edusystem-50 (edición 1975) ofrece una documentación bastante precisa para TSS/8 versión 24. Cubre las actividades relacionadas con el usuario en el sistema operativo y también incluye el uso del ensamblador PAL-D, BASIC, FOCAL y numerosas utilidades. Opcionalmente podrán consultar el Manual del Edusystem-50. También podrán sacar valiosa información del Manual del Monitor TSS/8 del Sistema de Tiempo Compartido (ed. 1968) y de la Guía de Usuario del Sistema de Tiempo Compartido TSS/8 (Edición de 1970). El uso detallada de BASIC para PDP8 se encuentra en el Manual de Programación de BASIC-8 para el Sistema de Tiempo Compartido TSS/8 (de 1969). La documentación de ALGOL puede encontrarse en el Manual de ALGOL de DECUS en tanto que esta versión detalla las diferencias específicas de dicho lenguaje en TSS/8. LISP está documentado en http://svn.so-much-stuff.com/svn/trunk/pdp8/src/decus/8-102a/decus-8-102A.pdf