Mostrando entradas con la etiqueta emulación. Mostrar todas las entradas
Mostrando entradas con la etiqueta emulación. Mostrar todas las entradas

martes, 20 de diciembre de 2022

¿Cómo instalo un emulador de ZX Spectrum en Ubuntu?

Incluso reunido con Sindicalistas en su mítica residencia de Puerta de Hierro, Juan Perón centralizaba los vaivenes de política argentina. En uno de dichos encuentros explicó cómo emular un ZX Spectrum en Ubuntu.

(...)

De poco le vale el Gobierno a estos señores que todo lo que han hecho, lo han realizado en contra del Pueblo.

La acción de los hombres patriotas y el trabajo mancomunado es hoy lo único que salvará a la Patria. Porque yo no llamo Patria a sus campos, o a sus casas, sino a los hombres que trabajan en pos de estas realizaciones. Es para ello que nos hemos encuadrado, para realizar aquello que por otra parte, no ha sido sino el objetivo de los caballeros que lucharon por la Independencia, y de sus hijos que trabajaron por consolidarla.

Nosotros sabemos perfectamente bien cuales son los anhelos de los Trabajadores, y será usted un gran representante y delegado en el país, que les hará llegar mis saludos, esta carta, y esta cinta magnetofónica. Indudablemente que mi regreso está hoy mas cerca que nunca pues si este señor sigue en esta tesitura, no habrá más que volcar a la calle a las Masas con una consigna clara, y en un pronto santiamén todo tendrá el cause que nosotros esperamos. En ello cobra gran relevancia el rol de nuestros dirigentes.

Yo sólo ansío volver sin sangre, que es para lo que hemos invertido tiempo. Lo demás no lo haremos nosotros, sino que lo ha hecho ya nuestro enemigo. Que por otro lado ya son, cada día, menos. Pocos tienen pelo en las filas de Aramburu. Cuando hace mucho calor, el agüita se hace nube sola, ¿sabe?
 

En nuestro Movimiento, lo importante es llegar a las Masas. De nada serviría un software que sólo pueda ejecutarse en las más onerosas máquinas, mientras que el hardware más humilde permanece en la oprobiosa necesidad del más mínimo byte.

Es por ello que ya desde el Primer Peronismo nos dimos a suplir las necesidades de cómputo de un Pueblo que todo lo daba.

Naturalmente que esto implicaba grandes sacrificios que sólo podían venir de una certera forma de programar. Una en la que lo máximo se hiciera con lo mínimo, y en lo posible con nada. Esta es la verdadera forma de hacerlo: una donde eficiencia da todo de los últimos bits de memoria, resguardando en lo ínfimo material una espiritual computación para todos.

La Spectrum ZX82 de Sinclair Research consistía en la segunda versión de una microcomputadora de 8 bits concebida para masiva producción, basada en un procesador Zilog Z80 de 3,5 Megaciclos y con una memoria que que revistaba - de acuerdo al modelo o implementación - desde unos pijoteros 16 kilobytes hasta los 128 kilobytes de memoria RAM.

El objetivo era contar con un instrumento de cómputo al alcance del obrero de overol, que pudiese usar en su hogar para compilar una revolución en BASIC.

El sistema de operación iba contenido en 16 kilobytes de memoria ROM en placa, surtiendo el microcódigo del intérprete de Sinclair Spectrum BASIC 48 que permitía ingeniar microprogramas a través de un mediocre teclado gomoso. La salida de audiovisual comprendía un sintonizador de radiofrecuencia controlado por el microprocesador en sí, y unida a un aparato de televisión color presentaba un terminal de texto a 24x32 o gráficas de hasta 7 colores entre 15 posibles con una resolución tope de 256x192 pixels.

En fin, el conjunto permitía hacer cómputo, por media chirola.

Naturalmente esta maravilla del minimalismo se vio también clonada y copiada - tanto con licencias como por ingeniería inversa - en actos que podrían describirse como "robarle la billetera" a Sir Sinclair. 

Con justicia podremos continuar haciéndolo a través de Fuse, el Emulador Libre de Spectrum para Unix (y similares como el GNU con Linux). Podremos instalarlo fácilmente en Ubuntum abriendo una terminal con Ctrl+Alt+t e ingresando el siguiente Comando de Organización:

sudo apt install fuse-emulator-gtk spectrum-roms fuse-emulator-sdl fuse-emulator-utils

Tras introducir nuestra contraseña de Conductor del Ubuntu se instalará el emulador. Podremos ejecutarlo desde Aplicaciones / Juegos / Fuse (GTK+).

Al iniciar, el Fuse nos presentará una ventana con no pocas opciones que implican el modelo de Spectrum (basada en cantidad de memoria). También el nivel de velocidad emulada y los menúes de configuración. Pero por sobre todo, la pantalla del intérprete.

Naturalmente, siempre he afirmado que emular no es mas que meterle la mula al microprocesador. En esta vertiente, podremos simular el Zilog Z80 con diferentes volcados de memoria de máquina. Desde el menú Options / Select ROMs / Machine ROMs se nos permitirá simular desde las Sinclair Spectrum  16K, 38K, 128K, pasando por las versiones producidas bajo licencia por Times, y las versiones ampliadas de Spectrum hasta su modelo último SE. También podremos configurarle aditamentos como la interfaz de Joysticks Kempston, popular adminículo opcional para meterle dos palancas, o un controlador de puerto serial tipo Centronics.

Con sacrificio, la microcomputadora podía adosar un lento lector de cintas cassette, método favorito para resguardo de masa. Este método se encuentra sencillamente emulado para incorporarle software pre-hecho: podremos descargar programas desde sitios recopilatorios como www.worldofspectrum.org. Allí encontraremos varios formatos de almacenamiento, tanto de diskettes como de cintas cassette. 

Sin duda la manera más fácil es con los volcados cinta cassette, los cuales cuentan con un formato .tzx. En este caso, presionamos la tecla F3 para cargar el fichero tzx en el emulador y ejecutarlo sin más miramientos. También podremos hacer el mismo temperamento simplemente arrastrando un fichero .tzx a la ventana gráfica del emulador.

Mediante la emulación de los clásicos joystick Kempston, útiles para algunos juegos de plataforma típicos de esta máquina.

Naturalmente, también podremos programar en el BASIC 48 de 8K, haciendo uso del inefable teclado de múltiples usos, recurriendo a las teclas Mayúsculas para definir el cambio entre mayúsculas y minúsculas, Control para definir el caracter alternativo (indicado en rojo) y Alt para definir un caracter gráfico en las teclas que cuentan con ellas.

Vean señores, las teclas del teclado tradicional del ZX Spectrum permitían ahorrar tiempo en mecanografiado ya que comprendían no sólo caracteres (letras, dígitos, y acepciones gráficas) sino funciones (palabras clave, nombres de funciones de programación, colores, etc). Ciertas teclas contaban incluso hasta cinco usos.

 

La entrada con el teclado aparece en la parte inferior de la pantalla, a la izquierda del cursor, el cual podremos desplazar con las flecha izquierda y derecha del cursor. Debemos considerar, sin embargo, que su inserción no era tan "directa" como podríamos suponer, sino que debíamos recurrir a combinaciones de teclas para definir uno de los modos de inserción

Las teclas combinables eran:

Tecla CAPS SHIFT: (Mayúsculas): Alterna entre insertar caracteres en mayúsculas o en minúsculas.
Tecla SYMBOL SHIFT: (Control): Conmuta al símbolo alterno marcado en rojo en la tecla.

Como vemos, estas teclas permitían operar según el "modos de inserción" de la consola del Spectrum. indicados por la letra indicada en el proverbial cursor parpadeante de video inverso. Este podía ser:

Modo K: ("palabra claves"). El modo por defecto, que se encarga de insertar una función de programación, según el contexto (al comienzo de una línea, o a continuación de la función THEN, o luego de un : (excepto en una cadena). Si no presiona Mayúsculas, lo siguiente se interpretará como una palabra clave (escrita) o un dígito.

Modo L: ("letras") este modo inserta los caracteres en minúscula de forma convencional. Podrás utilizar la tecla Mayúsculas para conmutar a mayúsculas o bien presionar la tecla Caps Lock para activar el Modo C y escribir en mayúsculas.

Modo E. ("Función Extendida"): Por medio de la tecla Tab o Ctrl+Mayúsculas podrán insertar aquellas funciones de programación indicadas por debajo de la tecla. Las teclas con números tienen funciones extendida de color.

Modo G ("gráficos): Por medio de Mayúsculas+9 activa el carácter gráfico indicado en la mayoría de los números y teclas, permitiendo hacer gráficas simiescas, con autorepetición al presionar una tecla durante mas de 2 segundos. Se desactiva presionando 9.

Al presionar la tecla Intro ejecutaremos la línea de BASIC, y si la misma cuenta con un número de listado, la almacenará en memoria a no ser que cuente con un error de sintaxis de BASIC, en cuyo caso nos indicará un error en forma de insolente "?".

En la medida que escribamos algún programa de BASIC, el listado se presentará en la parte superior, el cual podremos desplazar con Mayúsculas+6 y Mayúsculas+7. Si presionamos Mayúsculas+1 pasaremos al modo edición, y la línea seleccionada pasará a la línea inferior de edición, donde podremos retocarla.

También podremos solicitar un listado del microprograma con la palabra clave K, o y correrlo con la palabra clave R

En ciertos casos podremos interrumpir la ejecución o bucle de programación con Mayúsculas+Barra Espaciadora.

Podremos encontrar un manual de ZX Spectrum aquí.

viernes, 11 de febrero de 2022

¿Cómo puedo emular RSTS/E en Ubuntu?

Señores oficiales,

Uno de los principios nodales que ha de comprender todo aquel que en el campo de batalla ha de conducir una unidad, es la de no dormirse en laureles victoriosos. Es natural que el soldado busque prolongar la paz que tanto anheló, pero debe comprender que el esfuerzo del pasado no sirve nunca de ejemplo. Ha de continuarse la preparación y la previsión para nuevas luchas que habrán de venir indefectiblemente.

Esto es así porque el hombre vencido - si ha valido la pena como enemigo - jamás quedará vencido si no obtiene justicia, y esta es la base de la paz.

Desde los antiguos griegos se sabe que el soldado dispone de una preparación: el deporte. Las arte del cultismo físico, junto con las marciales fueron - y son - la justa vara con la que puede medirse al soldado. El Oficial ha de contar - además - con la preparación que da el gabinete: el estudio de la historia y de la pericia logística obrarán de maravillas en la formación de un Conductor.

La esgrima es, por antonomasia, la percepción del arte marcial del caballero. Algunos piensan que en el cruce de aceros, los únicos metales son los del florín o del florete. Sin duda se equivocan, ya que el verdadero temple está en el Espíritu del duelista. No importa tanto el músculo de su mano, sino la decisión y empeño que impone a su arte de lucha.

Como tal me he formado y especializado en la Institución a la que nos toca pertencer. Un dato no menor es que entre 1918 y 1928 obtuve en varias oportunidades el título de Campeón Militar de Esgrima. En 1927 conquisté la Copa de Honor de Esgrima en el Círculo Militar. La pedana no tuvo secretos para mí. Pero esto no salió de un repollo, mi tío segundo Conrado Perón, fue maestro de armas y una de las primeras espadas del ejército. Fue él quien me inculcó los pormenores del choque de aceros.

En la informática sucede más o menos lo que en la esgrima. Hay varios filos de distinto peso que elegir - los sistemas operativos - pero lo importante es conocer su técnica a fondo.

Esto lo comprendí cuando empleé RSTS/E, veterano "Sistema de Tiempo Compartido para Compartir Recursos" de la Digital Equipment Corporation. Lo necesario para instalar tan enjundio no podía más que significar la necesidad de templar un alma en la hombría de bien que es necesaria para entregarlo todo en pos de la Felicidad de nuestro Pueblo.

Sin embargo, por aquél entonces, sólo podía correrse en una máquina que contara con la arquitectura de 16 bits que ostentaban las máquinas tipo PDP-11. Eran minicomputadoras portentosas y sólo al alcance del oligarca.

Providencialmente gracias al Justicialismo podremos contar con válidos émulos de ellas para utilizarlas en nuestro sistema GNU con Linux, todo gracias a las bondades del emulador SIMH, del cual profeso como uno de los grandes logros para privilegiar a todos en el arte de la Conducción de los Sistemas Operativos del Ayer.

Vean señores, RSTS/E es un sistema operativo multiusuario a tiempo compartido privativo, desarrollado por terceros en 1970 para la minicomputadora PDP-11 de Digital Equipment Corporation. Podemos trazar su origen al TSS/8 de la DEC PDP-8, aunque actualizado para las mayores posibilidades y potencias que ofrecían los 16 bits de la PDP-11. Su larga vida operativa lo pueden calificar como un verdadero Matusalén, ya que su desarrollo cesó recién en 1992, con la versión 10.2.

La manera más simple es contar con un paquete de RSTS/E ya compilado. En este caso simplemente habremos de descargar el paquete y correrlo en nuestro sisxtema GNU con Linux. 

Instalar RSTS/E v9.3

Se trata de la versión de enero de 1987. Para dar con una versión mínima pero precompilada, abrimos una terminal en nuestro sistema con Ctrl+Alt+t e ingresamos los siguientes Comandos de Organización:

mkdir ~/.simh/ ~/.simh/rsts/ ~/.simh/rsts/v9
cd ~/.simh/rsts/v9/
wget http://www.rsts.org/distros/RSTS_kits/RSTS_V9.3_Kit.zip

unzip RSTS_V9.3_Kit.zip

Ahora podremos ejecutar el RSTS/E v9.3 precompilado. Para ello lo haremos con:

cd ~/.simh/rsts/v9/
./pdp11

El sistema nos solicitará la fecha y hora. Tras ingresarlas cuidando de evitar el bug Y2K (podríamos indicar un año de la década de 1990), nos solicitará si deseamos activar el sistema de tiempo compartido ("Start Timesharing?"), a lo cual debemos responder yes.

Acto seguido se nos solicitará ingresar un usuario ya elaborado. Podremos dar con los accesos de usuario. Los usuarios de este sistema virtualizado serán:

Usuario de sistema
Usuario: [1,5]
Contraseña: SYSUSR

Usuario administrador
Usuario: [1,2]
Contraseña: SYSLIB

Usuario "Invitado"
Usuario: [100,100]
Contraseña: DEMODEMO

Utilizar RSTS/E 9.3

Podremos utilizarlo siguiendo la Guía de Usuario de RSTS/E, o bien la Guía del Administrador de sistema RSTS/E.

Podremos correr la ayuda del intérprete de comandos DCL incorporada al RSTS/E, ingresando el comando HELP.

Para salir de RSTS/E ingresamos el comando LOGOUT. Una vez vueltos a la instancia de login, presionamos Ctrl+e para retornar al emulador SIMH, y salimos del mismo mediante el comando bye.

Instalar RSTS/E v7 en Ubuntu

La versión prototípica de RSTS sin embargo fue la v7 de agosto de 1978. Es indudable que versiones posteriores incorporaron ya elementos más avanzados, pero fue "la siete" la que podríamos considerar su pico operativo y por cierto la versión más duradera. Es que por entonces la arquitectura PDP-11 ya habían sido reformuladas desde el punto de vista del hardware gracias a las nuevas tecnologías de integrados de muy alta escala, y sus LSI-11 se encontraban - comparativamente - "por moneditas".

RSTS/E v7 fue entonces el ámbito con el cual se contó con software de 16 bits de oficina, en un intento por elaborar entornos de cómputo en el lugar de trabajo.

Primero descargamos la distribución de RTST/E v7. No es la última, pero ha sido una versión importante publicada en 1987. A tal fin abrimos una terminal con Ctrl+Alt+t e ingresamos los siguientes comandos de organización:

mkdir ~/.simh/ ~/.simh/rsts/ ~/.simh/rsts/v7
cd ~/.simh/rsts/v7/
wget http://www.rsts.org/distros/RSTS_disks/V70/rsts7.0-07.tar
tar xvf rsts7.0-07.tar

Preparar RSTS/E v7 desde cero

He aquí las indicaciones sobre cómo instalar RSTS desde cero y agregarle paquetes a este sistema pre-compilado.

En primer instancia procedemos a instalamos el paquete del emulador SIMH en nuestro sistema GNU con Linux, y le damos ejecución en el modo DEC PDP-11. Todo lo podremos hacer desde nuestra temrinal presionando Ctrl+Alt+t e ingresando los siguientes Comandos de Organización:

sudo apt update
sudo apt install simh


cd ~/.simh/rsts/v7/Disks
echo ';Inicializador de instalador de RSTSv7' >
~/.simh/rsts/v7/Disks/rsts.ini
echo 'att rl0 disk0' > ~/.simh/rsts/v7/Disks/rsts.ini
echo '
att rl1 rsts_sysgng.dsk' > ~/.simh/rsts/v7/Disks/rsts.ini
echo '
set rl1 lock' > ~/.simh/rsts/v7/Disks/rsts.ini
echo 'set cpu 1m' > ~/.simh/rsts/v7/Disks/rsts.ini
echo 'b11' > ~/.simh/rsts/v7/Disks/rsts.ini

Podremos iniciar ahora el procedimiento de preparación de RSTS/E según el frondoso manual naranja de instalación. Para dar inicio al instalador ingresamos:

cd ~/.simh/rsts/v7/Disks/
pdp11 rsts.ini

Se presentará la siguiente devolución. Al crear el fichero disk0 para la unidad virtual RL02, se nos indicará si queremos sobreescribir la última pista del mismo. Indicamos que introduciendo "y".

PDP-11 simulator V3.8-1
RL: creating new file
Overwrite last track? [N] y

Ahora arrancará el sistema disco de preparación de RSTS v7-0: Deberíamos recibir el prompt "Option:"

Disabling CR
Disabling RK
Disabling HK
Disabling TM

Enabling only console, disks, and tapes.

RSTS v7-0 (DL1)

Option:

3) Formateamos el disco de cero. Habremos de responder la pregunta "por defecto" presionando Ctrl+J (en caso de contar con una videoterminal, presionaremos la tecla LineFeed).

Option: DSK
 <Ingresar fecha>
 <Ingresar hora>


Disk? RL0
Pack ID? DISK0
Pack cluster size? 2
SATT.SYS base?               <Ctrl+J>
MFD password? SYSTEM
MFD cluster size? 16
Pre-extend directories <no>? <Ctrl+J>
PUB, PRI, or SYS? SYS
Library password? SYSTEM
Library UFD cluster size? 16
Date last modified <yes>?    <Ctrl+J>
New files first <no>?         <Ctrl+J>
Patterns? 1
Proceed (Y or N)? Y
 <se muestra ciertos errores>
Continue with DSKINT? Y
Patterns? 1
Proceed (Y or N)? Y

4) Copiamos el sistema al disco de cero solicitando la rutina COP:

Option: COP
    <fecha y hora nuevamente, podemos oprimir Ctrl+J para aceptarlas>
To which disk? RL0

SIMH reiniciará desde el DL0.

Agregamos un fichero de intercambio / volcado de núcleo al disco de cero (esto tenia funcionalidad de salvataje de memoria RAM ante un cuelgue de la PDP-11), solicitando la rutina REF.

Option: REF
    <fecha y hora, de nuevo podemos usar Ctrl+j>
Disk? RL0
Clean? N
 REFRESH suboption? CHA
 SWAP.SYS changes? Y
  Size? 256
  Base?             <Ctrl+J>
 SWAP0.SYS changes? <Ctrl+J>
 SWAP1.SYS changes? <Ctrl+J>
 SWAP3.SYS changes? <Ctrl+J>
 OVR.SYS changes?   <Ctrl+J>
 ERR.SYS changes?   <Ctrl+J>
 BUFF.SYS changes?  <Ctrl+J>
 CRASH.SYS changes? Y
  Size? 35
  Base?             <Ctrl+J>
Other files?         <Ctrl+J>
REFRESH suboption?  <Ctrl+J>

Instalaremos ahora SYSGEN SIL, solicitando la rutina INS.

    Option: INS
    Sil? SYSGEN

El sistema reiniciará indicando "Rebooting...". y reiniciarça, ahora desde ña unidad DL1:

RSTS v7-0 (DL1)
Option:

Configuramos las opciones por defecto del SYSGEN SIL, solicitando la rutina DEF.   

    Option: DEF
    JOB MAX or SWAP MAX changes? Y
     New JOB MAX?                 <Ctrl+J>
     JOB MAX or SWAP MAX changes? 28
    JOB MAX or SWAP MAX changes? <Ctrl+J>
    Run Time System? RT11
    Error message file? ERR
    Installation name?  <Elegir un nombre de sistema>
     Table suboption?            <Ctrl+J>
    Crash dump? y
    Magtape labelling default <none>? ANSI
    Preferred clock <L>?         <Ctrl+J>
    Date format <ALPHABETIC>?    <Ctrl+J>
    Time format <AM/PM>?         <Ctrl+J>
    Power fail delay <1>?        <Ctrl+J>



Ahora iniciamos ya el generador de sistema SYSGEN en nuestro emulador.

Option: <Ctrl+J>
    <ingresamos fecha, hora>
   

El sistema devolverá "?Can't find file or account" y ofrecerá un prompt con un "." (el prompt del sistema operativo DEC RT-11 que se usaba como base de configuración para RSTS/E).

Debemos hacernos peritos en montar el disco de distribución (SYSGNG) como solo-lectura, y utilizarlo para copiar los archivos desde el mismo.

. MOUNT DL1:SYSGNG/RO
. R DL1:CREATE.SAV


Luego de copiar los ficheros, el programa CREATE correrá automáticamente el programa SYSGEN.

Habremos de responder todas las interrogantes que nos solicite SYSGEN, la primera sección principal es importante porque le informa a SYSGEN desde dónde obtener los ficheros y parches:

    Form ?                 #S #    L
    Same system ?          #Y #                   <Ctrl+J>
    Distribution medium ?  #DL#                   <Ctrl+J>
    Output medium ?        #DL#    SY
    Delete files ?          #Y #                   <Ctrl+J>
    LP for SYSGEN ?        *Y *    N
    Generate monitor ?     #Y #                   <Ctrl+J>
    Monitor name ?         #RSTS#                 <Ctrl+J>
    Monitor patching ?     #??#    YES
    Patch file medium ?     #DL#                   <Ctrl+J>
    Pack ID ?              #??#    PATCHG
    Patch file name ?       #$MONITR.CMD#          <Ctrl+j>
    Generate BASIC-PLUS ?  #Y #                   <Ctrl+J>
    BASIC-PLUS RTS name ?  #BASIC#                <Ctrl+J>
    BASIC-PLUS patching ?  #??#    YES
    Patch file medium ?     #Identical to monitor# <Ctrl+J>
    Patch file name ?       #$BASIC.CMD#           <Ctrl+J>
    RSX as default RTS ?   #NO#                   <Ctrl+J>


...el resto de las preguntas simplemente podremos responder ingresando Ctrl+j para aceptar la opción por defecto. Eventualmente, se nos devolverá al prompt de RT-11: un simple ".".

Desde este RT11 muleto, compilamos el sistema corriendo el programa SYSBAT con:

.R SYSBAT

...y se nos presentará salida y luego nos solicitará la unidad para almacenar, inidicamos DL1:

MOUNT AX-D527G-BC ON A DISK DRIVE

READY AND WRITE PROTECT THE DRIVE

Mount DL:"SYSGNG"-write locked
Unit ? DL1


...con esta orden se compilará PIP, LINK, MACRO, LIBR, y SILUS, indicando en el terminal:

MOUNT THE MONITOR PATCH FILE DISK "PATCHG" ON A DISK DRIVE

READY AND WRITE PROTECT THE DRIVE

Mount DL:"PATCHG"-write locked
Unit ? 
 

Nuevamente interrumpiremos el emulador presionando Ctrl+e y cargaremos el disco con los parches del sistema operativo RSTS/E (solucionaban ciertos bugs), Para ello ingresamos los siguientes comandos al prompt SIM> de SIMH:

 sim> att rl1 rsts_patchg.dsk
 sim> c
 DL1

Con este accionar, se emparchará el intérprete de comandos Monitor y el intérprete de BASIC-Plus, presentando todo lo relativo a dicho procedimiento. Finalmente, deberá indicar "Batch job completed."

Sin duda podremos ya apagar el sistema emulado de generación SYSGEN, y correr el programa UTILTY.SAV

. R UTILTY.SAV
*NO LOGINS
*SHUTUP

 

Esto cargará ya el RSTS/E v7 que hemos creado desde el disco DL0. Solicitaremos nuevamente la rutina INS con el instalador creado, y pediremos entonces instalar nuestro propio RSTS/E peronista.

Options: INS
Sil <SYSGEN>? RSTS

Configuraremos las opciones por defecto del RSTS SIL peronista emparchado:

Options: DEF
JOB MAX or SWAP MAX changes? Y
 New JOB MAX?                 <Ctrl+J>
 New SWAP MAX? 31
JOB MAX or SWAP MAX changes? <Ctrl+J>
Run Time System? BASIC
Error message file? ERR
Installation name?  <elegir un nombre>
Table suboption?             <Ctrl+J>
Crash dump? y
Magtape labelling default <none>? ANSI
Preferred clock <L>?         <Ctrl+J>
Date format <ALPHABETIC>?    <Ctrl+J>
Time format <AM/PM>?         <Ctrl+J>
Power fail delay <1>?        <Ctrl+J>

Acto seguido montamos SYSL1G a la unidad RL2 (PATCHG aún permanecerá en DL1), y luego reiniciamos. Para ello ingresamos lo indicado en negrita:

    <presionamos Ctrl+e para detener SIMH>
Simulation stopped, PC: 034534 (WAIT)
 sim> att rl2 rsts_sysl1g.dsk
 sim> set rl2 lock
 sim> b rl0

Tras un instante arrancará nuevamente el sistema desde DL0. Ahora arrancamos el sistema de tiempo compartido.

Options: <Ctrl+J>
    <fecha,hora>

El sistema aparecerá en BASIC con el prompt "Ready":

    ?Can't find file or account
    ?Program lost-Sorry
    
    Ready

Ahora Montaremos los discos SYSL1G y PATCHG en la unidad RL02:

MOUNT DL1:PATCHG/RO
MOUNT DL2:SYSL1G/RO

De ahora en adelante instalamos el sistema BASIC corriendo la aplicación BUILD.BAS desde el disco DL2:

RUN DL2:$BUILD
BUILD   V7.0-07 RSTS V7.0-07 Peron
System Build <No> ? YES
Source Input Device <DL2:>   
<Ctrl+J>
Library Output Device <SY:>  
<Ctrl+J>
Target System Device <SY0:>  
<Ctrl+J>
Library Account <[1,2]> ?    
<Ctrl+J>

 *** Copying file DL2:[1,2]BUILD.CTL to BLD01.TMP ***

Locate logical 'LB:' on <SY:[1,1]>  
<Ctrl+J>
Function (Build/Patch, Patch, Build) <Build/Patch>
<Ctrl+J>
Patch file input location <SY:[200,200]> ? DL1:[1,2]
Save patched sources <No>    
<Ctrl+J>
Run-Time System <BASIC >     
<Ctrl+J>
Locate ERROR Package on <SY:[1,2]>  
<Ctrl+J>
Additional Control File is <None>   
<Ctrl+J>

En este instante, BUILD comenzará a cargar, emparchar e instalar DEC BASIC-PLUS CUSPS. Luego de un tiempo terminará con el mensaje:

!*** BUILD Complete ***"

Finalizada todo este burocrático accionar, podremos apagar el sistema. Lo haremos corriendo la aplicación SHUTUP.

RUN $SHUTUP
Minutes until system shutdown (0-99) <5>?  0

¡Enhorabuena! Encomio lo actuado pues a partir de ahora podrán contar con un un RSTS V7.0 mínimo instalado (ej. como rl0.minsys).

Para ejecutar RSTS v7 ingresa la Option: BOOT. Cuando te solicite Boot Device, indica RL0. Indicará ahora algo como:

RSTS V7.0-07 rsts_peronista (DL0)

Option:

Indica la Option START.

Introduce fecha y hora, y presiona Ctrl+j para responder con la opción por defecto a todas las preguntas de inicialización, hasta que presente el mensaje de prompt:

PLEASE SAY HELLO

E introduce en mayúsculas:

HELLO

Y te presentará finalmente el ingreso al sistema:

RSTS V7.0-07 rsts_peronista  Job 2  KB0  01-Jan-77  04:07 PM
#


Para ejecutar más de dos trabajos necesitaremos agregar algo de espacio de intercambio al sistema. Para hacerlo debemos escoger dónde queremos poner el almacén de intercambios (ya sea en el disco de sistema que acabamos de crear, o en otra unidad).
 
Para poner un intercambio extra al disco de sistema:

  1. Option: REF
  2. <fecha, hora>
  3. Disk? DL0
  4. No usamos clean, elegimos la subopción "CHA"
  5. Seguimos las preguntas con Ctrl+j y cambiamos el tamaño de "SWAP0.SYS" a un valor (ej. 1024 bloques)
  6. arrancamos el sistema
  7. editamos "$RTS.CMD" usando el editor TECO
  8. agregamos la línea "FORCE KB0: ADD SWAPFILE 0 DL0:SWAP0" a la línea posterior a "RUN $UTILTY"

Para colocar una unidad de intercambio extra en otra unidad virtual, primero debemos contar con un fichero de archivo válido (use la opción "DSK" para formatear una). Luego hemos de seguir el procedimiento indicado (con el nombre de disco correcto, para agregar un fichero SWAP0.SYS a la unidad y configurarla en el sistema. Además, habremos de editar $START.CTL para montar el disco nuevo antes que corra RTS.CMD. Por ejemplo, si agregamos un disco DL1 con la etiqueta "PRIVAD" podríamos ingresar la siguiente línea en la parte superior de $START.CTL:


MOUNT DL1:PRIVAT

------------------------------------------------------------------------------

En la medida que tengamos el sistema mínimo, podremos compilar e instalar otros paquetes que anhelemos. Para compilar un paquete habremos de correr el programa $BUILD.

Por ejemplo, si SYSL1G está montado en DL2: y PATCHG se haya montado en DL3:, por lo tanto instalar el paquete HELP , tras el prompt Ready podríamos ingresar SY/D para listar y luego RUN $BUILD para iniciar el programa de compilación, de esta manera:

Ready

SY/D

Disk Structure:
Disk    Open    Free    Cluster Errors  Name    Comments
DL0       2     3480       2      0     SYSTEM  Pub, DLW
DL1       1     4332       2      0     PRIVAT  Pri, DLW
DL2       0     1422       1      0     SYSL1G  Pri, R-O
DL3       0     3800       1      0     PATCHG  Pri, R-O, DLW

Ready

RUN $BUILD
BUILD   V7.0-07B        RSTS V7.0-07 Peron
System Build <No> ?
Source Input Device <SY:> ? DL2:
Library Output Device <SY:> ?
Target System Device <SY0:> ?
Library Account <[1,2]> ?
Control File is ? HELP

*** Copying file DL2:[1,2]HELP.CTL to BLD02.TMP ***

Function (Build/Patch, Patch, Build) <Build/Patch> ?
Patch file input location <SY:[200,200]> ? DL3:[1,2]
Run-Time System <BASIC > ?
Locate HELP Package on <SY:[1,2]> ? SY:[1,8]

%Can't find file or account - SY:[1,8]
Attempt to create account SY:[1,8] <No>? YES
Account SY:[1,8] created with your password
Additional Control File is <None> ?


El programa de compilación correrá y compilará el paquete HELP. Podremos repetir lo mismo con los siguientes programas:

Los siguientes paquetes están disponibles en aras de la justicia social:

En la imagen SYSGNG:
MAINT.CTL = usado para recompilar RSX (no tan útil)
RSX.CTL = el sistema ejecutable de RSX
SORT.CTL = SORT (patches fail since we don't have RMS distribution)
TECO.CTL = el editor TECO (SQU, TYPE, TECKBM...)

En la imagen SYSL1G:
BUILD.CTL = el sistema básico de compilación (debería ya estar instalado)
SPLER.CTL = programas de spooling (QUE, OPSER, BATCH, etc.)
UNSUPP.CTL = programas no soportados (DSKDMP, STATUS, DEMO55)
BIGPRG.CTL = programas "grandes"(RUNOFF, FIT, FLINT, PMDUMP, BPCREF, MAKSIL).
BACKUP.CTL = Paquete de respaldo
DEVTST.CTL = Prueba de dispositivos
HELP.CTL = los ficheros de ayuda

Recordemos corriendolos con RUN. Podremos salir del sistema con RUN $SHUTUP y finalmente Ctrl+e para volver al emulador. Saldremos del emulador SIMH con el comando introduciendo en el prompt sim> el comando BYE.

jueves, 16 de diciembre de 2021

¿Cómo instalo emuladores de calculadoras HP en Ubuntu?

Reunidos con el plantel de ingeniería de Yacimientos Petrolíferos Fiscales, Juan Perón expone cómo instalar emuladores de calculadoras científicas HP en Ubuntu.

¡Trabajadores!

Si algo nos ha enseñado la observación de los acontecimientos del mundo es que tanto desde un imperialismo como en otro, la Conducción política de los Pueblos no ha dejado de estar suplida por aficionados.

Esto es así porque un conductor no se hace, se nace. El Conductor debe tener raigambre en el pueblo, conocerlo e interpretar sus sentires, para saciar sus necesdiades de Justicia. Quien no cumpla con dichas premisas podrá conducir, pero sólo de emergencia y ante la inexistencia de algo mejor.

Indudablemente que esto no quiere decir que sólo pueden conducir los Dioses. A muchos les han rogado el hombre a lo largo de su historia, y a esta altura del segundo tiempo sabemos que deben estar ocupados en bastantes despelotes como para siquiera levantarnos el teléfono, mucho menos ocuparse. Hemos de darnos nosotros mismos lo que necesitamos.

No escapa a nadie que yo estoy mas cerca de recibir sobre mi cabeza una palada de tierra en lugar de un bañito de agua bendita [ríe]. Es por ello que quienes me sucedan han de conocer también los pormenores de la Conducción Política, para hacer con él lo bueno que los Pueblos anhelan.

Decía entonces que el Arte de la Conducción requiere sopesar distintos cálculos de correlación, que no suelen diferir mucho de aquellos para los cuales me he formado. Lo ideal sería que la palmas y laureles que llevan clavadas esta gorra no se las den a cualquiera, y mucho menos se haga lo mismo con los votos del Pueblo.

Pues bien señores, estos cálculos que les he referido no salen de un repollo, pero hoy podemos contar con asistencia para el cálculo político tanto como lo podemos contar para el cálculo aritmético científico.

Vean señores... es sabido que las primeras máquinas mecánicas de calcular provienen ya del siglo XV, pero la mecánica de precisión sólo posibilitó que fuesen industrializadas con éxito recién desde inicios del finales del siglo XIX, destacando especialmente la Compañía Internacional de Máquinas de Negocios, el gigante azul IBM.

Para la década de 1940 los bandos en pugna se habían propuesto el uso de cómputo electromecánico con máquinas que derivarían en los grandes mainframes programables. Sin embargo estas máquinas destinados al cálculo científico de potencia tuvieron otras ideas de corte más minimistas. El Japón de posguerra avanzó decididamente en la reducción de tamaño, con equipos electrónicos Casio de sobremesa, y ya a inicios de la década de 1960 equipamiento electrónico de estado sólido. Para la década siguiente se contaban con microprocesadores (como el Intel 4004 de 4 bits), lo que permitió disponer de dispositivos de bolsillo como la calculadora científica de bolsilño HP-35, y estos se terminarían popularizando en la década de 1980 gracias a la enorme competencia y disminución de costos productivos.

Está claro que en sistemas de cómputo similares a Unix contamos con el inefable dc, la calculadora de notación polaca inversa integrada para la terminal, he explicado cómo instalar Speedcrunch y Tapecalc en Ubuntu. Sin embargo, soy de la opinión que este equipamiento merece un lugar en el corazón de los Trabajadores: han sido sus pistas electrónicas y sus directas CPUs las que acompañaron el aprendizaje de toda una generación de técnicos del cómputo.

Por tal motivo, os enseñaré cómo presentar claros émulos de estas calculadoras científicas del ayer. Por ejemplo, contaremos con un simulador de la calculadora científica de bolsillo Hewlett-Packard HP-15C.

Se trataba de una calculadora científica programable con notación polaca inversa (RPN) de alta gama. Fue producida por Hewlett-Packard desde 1982 hasta 1989, y representaba el cuarto modelo comercializado de sus calculadoras Serie 10 "Voyager", con un precio de 135 dolarucos. En escencia, era un reemplazo de la popular HP34C.

Contaba con un microprocesador HP Nuc (1LFS, 1LM2 o bien 1LM9), que hacían mover su display LCD de 10 dígitos de 8 segmentos monocromáticos. Tenía un almacñen de 66, de los cuales 64 eran modificables. 

Podían programarse con secuencias de tecleos para realizar microprogramas.

Podía operar con números complejos y operaciones matriciales, así como cálculo integral y de raíces de ecuaciones.

Para ello contaremos con HP-15C Simulator 4.3, un emulador de alta calidad. Os indicaré cómo instalar el Simulador de HP-15C. Este es capaz de funcionar en sistemas GNU con Linux de 64 bits.

Para proceder a su instalación descargaremos el emulador para nuestra arquitectura (se puede hacer desde aquí). Abriendo una terminal con Ctrl+Alt+T, lo integraremos pegando en la misma el siguiente bloque de comandos de organización:

mkdir /tmp/hp15c/ ;
cd /tmp/hp15c/ ;
wget  https://bit.ly/3cMWTH8 -O HP-15C_4.3.00_Linux_x86_64.zip ;

unzip HP-15C_4.3.00_Linux_x86_64.zip ;
chmod +x /tmp/hp15c/HP-15C ;
cp /tmp
/hp15c/HP-15C_Simulator_Font.ttf ~/.local/share/fonts/ ;
fc-cache -f ;
cd /tmp ;
mv /tmp/hp15c/ ~/.hp15c/ ;
cd ~/.hp15c/doc ;
wget http://h10032.www1.hp.com/ctg/Manual/c00503576.pdf -O hp11c_owners_manual_and_problem_solving_guide.pdf ;
wget http://h10032.www1.hp.com/ctg/Manual/c03030589.pdf -O hp15c_deluxe_owners_handbook.pdf ;
cd ~

Si deseamos ejecutarla desde la terminal podríamos hacerlo con:

 cd ~ && ./.hp15c/HP-15C

...pero suele ser más práctico crear un lanzador o acceso directo a /home/usuario/.hp15c/HP-15C. Para ello hacemos clic con el botón derecho del ratón sobre el menú Aplicaciones, y en el menú contextual que se despliegue elegimos Editar Menús. En el panel derecho Menús seleccionamos el menú Educación, y presionamos el botón Agregar ítem+. Esto abrirá el cuadro de diálogo Crear Lanzador. En su campo Comando: ingresamos /home/usuario/.hp15c/HP-15C (naturalmente cambiando usuario por nuestro propio nombre de usuario).

Tras presionar el botón Aceptar se habrá creado el lanzador. Ahora podremos acceder a la calculadora desde Aplicaciones / Educación / Calculadora HP-15C.

Al iniciar tendremos nuestra calculadora HP-15C emulada. El funcionamiento se conserva enormemente, con lo cual podremos introducir nuestros cálculos y ecuanciones a la polaca. 

Si queremos resolver 9+5, presionamos 5 y Enter para ingresarlo en la pila de instrucciones ("stack), 5 para hacer lo mismo con la segunda cifra a operar, y luego el operando de suma +.

Como el uso replica al de la calculadora real, podrán utilizar su manual de usuario de la calculadora HP-15C Deluxe y el Manual de Funciones Avanzadas de la calculadora HP-15C perfectamente, aunque personalmente puedo recomendarles el clásico y manual de usuario y guía de resolución de problemas de la HP-11C.

El emulador puede presentar mejoras con respecto a la HP-15C original corrigiendo sus bugs (notablemente, el de desbordamiento de pila), y sus programas de secuencias de teclas pueden incorpores perfectamente. Gracias a estos podremos afrontar complejos algoritmos.

Si hacemos clic con el botón derecho del ratón sobre la misma, podremos desplegar un menú contextual. Entre sus opciones contamos con la posibilidad de observar las clásicas tablas impresas en su tapa posterior.

Será posible podrán encontrar programas para la misma en internet y memorizarlos en el emulador desde la opción Grabar programa.

También podremos activar las Preferencias... del emulador. En este encontraremos la opción "Comportamiento HP-15C estricto", que revierte las mejoras presentadas en el emulador a una simulación completa, incluyendo bugs y retrasos temporales provocados por su microprocesador.

Si lo queremos desinstalar:

rm -R ~/.hp15c ;
rm ~/.hp-15c ~/.hp-15c.mme ;
rm
~/.local/share/fonts/HP-15C_Simulator_Font.ttf ;
fc-cache -f 

Free42

Si bien la rompedora HP-15C era una clásica, también podremos contar con su sucesora, la HP-42S RPN Scientific.

Se trataba de una calculadora fabricada desde 1988 hasta 1995, con un precio inicial de 120 dólares, y como segunda iteración de la serie Pioneer de la marca. Disponía de un display LCD matricial de 131x16 pixels monocromáticos, que le permitían 2 líneas y 22 columnas de caracteres, todos ellos atresados gracias a una CPU Lewis Saturn y 32 KB de memoria RAM.

La HP-42S constaba también de notación polaca inversa, y daba rienda suelta al lenguaje de programación FOCAL introducido con la serie HP-41, almacenado en 64KB de memoria ROM. Como características de avanzada contaba como exponente de comunicación por infrarrojos (ideal para la impresora tipo ticketera infrarroja HP82240).

Su calidad constructiva, adosada a sus posibilidades, la toranrían una favorita para los ingenieros de campo.

Para emular estas podremos utilizar Free42. Para instalar este simulador abrimos una temrinal con Ctrl+Alt+t e ingresamos:

sudo apt update
sudo apt upgrade
sudo apt install free42-nologo

Es recomendable también crearle un lanzador siguiendo el mismo procedimiento detalado para la HP-15C anterior, sólo que en este caso debemos ingresar en el campo Comando: la siguiente ruta:

free42bin

Tras presionar el botón Aplicar se creará el lanzador. Y ahora podremos ejecutar esta valedera calculadora desde Aplicaciones / Educación / Calculadora HP-42S.

Free42 es una reimplementación de la calculadora científica HP-42S y la impresora HP-82240. Como es una reprogramación completa, no utiliza código fuente de HP, y por lo tnato no requiere una imágen del programa ROM de la HP-42S original.

Al iniciar contaremos con la versión estándar, pero también podremos cambiarla a la versión realista (sin el logotipo de HP, por supuesto). Esto podremos alterarlo desde el menú Skin.

Para utilizarla podremos recurrir al manual del propietario de la HP-42S (en castellano) y el manual de programación de la HP-42S (en inglés) o bien recurrir al manual alternativo de Free42.

En fin, Free42 cuenta con a posibilidad de cargar y almacenar programas de manera directa y similar a la calculadora original.

Pero todo lo bueno puede mejorarse. Si deseamos una versión extendida de esta clásica calculadora que todos habríamos querido tener, podemos a recurrir a Plus42, un programa derivado del anterior pero que suma funcionalidades hipotéticas (incluyendo función Solver para ecuaciones diferenciales, opciones mas en tramo de las calculadoras financieras HP17/19 BII. Entre ellas, panel de cristal líquido con más líneas - capaz ahora de presentar cuatro acumuladores - así como funcionalidades de ingeniería, skins, etcétera. Plus42 puede instalarse lado a lado con Free42 de la HP-42S. Para instalarla desde la terminal podremos hacer:

cd ~/Descargas/ ;
wget https://thomasokken.com/plus42/download/Plus42Linux.tgz ;
tar xvfz Plus42Linux.tgz
mv ~/Descargas/Plus42Linux/ ~/.plus42/
mkdir $HOME/.local/share/plus42 ;
cd $HOME/.local/share/plus42 ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d.zip ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d.gif ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d.layout ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d_MN.zip ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d_MN.gif ;
wget https://thomasokken.com/plus42/skins/desktop/Mueck_P42d_MN.layout ;
unzip -fo Mueck_P42d.zip  ;
unzip -fo Mueck_P42d_MN.zip

Ahora podremos crear el acceso directo a ~/.plus42/plus42dec y ~/.plus42/plus42bin, de la misma forma que se indicó anteriormente.

Plus42 cuenta con documentación en línea). Asimismo, podremos instalar programas .raw de regalo (importables en Free42 y en Plus42) con:

mkdir ~/.plus42/prg/
cd  ~/.plus42/prg
wget https://thomasokken.com/free42/42progs/plot_orig.raw
wget https://thomasokken.com/free42/42progs/plot_solve.raw
wget https://thomasokken.com/free42/42progs/dplot_orig.raw
wget https://thomasokken.com/free42/42progs/dplot_solve.raw
wget https://thomasokken.com/free42/42progs/sun.raw
wget https://thomasokken.com/free42/42progs/prm_dec.raw
wget https://thomasokken.com/free42/42progs/prm_bin.raw
wget https://thomasokken.com/free42/42progs/stress.raw
wget https://thomasokken.com/free42/42progs/synth.raw
wget https://thomasokken.com/free42/42progs/mast.raw
wget https://thomasokken.com/free42/42progs/minehunt.raw
wget https://thomasokken.com/free42/42progs/OkieDokie/okiedokie.raw
wget https://thomasokken.com/free42/42progs/rtmin.raw
wget https://thomasokken.com/free42/42progs/RootsEqns.raw
wget https://thomasokken.com/free42/42progs/mlran.raw
wget https://thomasokken.com/free42/42progs/aes.raw
wget https://thomasokken.com/free42/42progs/aesprep.raw
wget https://thomasokken.com/free42/42progs/Base.raw
wget https://thomasokken.com/free42/42progs/Convert.raw
wget https://thomasokken.com/free42/42progs/Finance.raw
wget https://thomasokken.com/free42/42progs/Triangle.raw
wget https://thomasokken.com/free42/42progs/ses.raw
wget https://thomasokken.com/free42/42progs/G4_G3_G2.raw
wget https://thomasokken.com/free42/42progs/STATISTICS.raw
wget https://thomasokken.com/free42/42progs/ntrp.raw
wget https://thomasokken.com/free42/42progs/lrnc.raw
wget https://thomasokken.com/free42/42progs/mort.raw
wget https://thomasokken.com/free42/42progs/Moody42/Moody42.raw
wget https://thomasokken.com/free42/42progs/Astronavigatie/astro_tso.raw
wget https://thomasokken.com/free42/42progs/Astronavigatie/astra_tso.raw
wget https://thomasokken.com/free42/42progs/Astronavigatie/avsho.raw
wget https://thomasokken.com/free42/42progs/unixtime.raw
wget https://thomasokken.com/free42/42progs/moeglein/DO_CALC.raw
wget https://thomasokken.com/free42/42progs/moeglein/N_CAL.raw
wget https://thomasokken.com/free42/42progs/Twix/twix.raw
wget https://thomasokken.com/free42/42progs/cp2oct.raw
wget https://thomasokken.com/free42/42progs/Convert2.raw

Finalmente, podremos recurrir a un emulador de la clásica HP-48. Se trata de una serie de calculadoras científicas de notación polaca inversa y programables en NPL provistas del procesador Saturn de 64 bits. Producidas desde 1990 hasta 2003, las mismas cuentan con displays monocromáticos capaces de presentar gráficas en 131x64 pixels, o bien cuatro líneas de texto - en sus modelos de avanzada - con módulos de memoria y conexión serial con xmodem o Kermit.

Para instalarla en Ubuntu u otros sistemas GNU parecidos cargamos primero las dependencias. Para ello abrimos una terminal con Ctrl+Alt+t e ingresamos:

sudo apt install git curl libpkgconf3 libreadline-dev libsdl2-dev libx11-dev libxext-dev liblua5.4-dev

Y luego bajamos el código fuente y lo compilamos.

cd /tmp
git clone https://github.com/gwenhael-le-moine/x48ng
cd /tmp/x48ng
make
sudo make install PREFIX=/usr
/usr/share/x48ng/setup-x48ng-home.sh


Este proceso de configuración presentará el siguiente mensaje:

The next step will download all available HP 48 ROMs from https://hpcalc.org where "HP graciously began allowing this to be downloaded in mid-2000."
You can hit Ctrl-C now if you do not wish to download them.


...debemos presionar Intro para comenzar el proceso de descarga de las ROMs de Hewlett-Packard, que quedarán almacenadas en ~/.config/x48ng/ROMs. Asimismo, seteará el fichero de configuración ~/.x48ng/ para preparar nuestra calculadora HP-48GX emulada como si tuviese una tarjeta de 128KB en el peurto 1 y una tarjeta de 4MB en el puerto 2.

Para que tome las ROM de HP a la primera, debemos crear un fichero de configuración que lo indique. Para ello ingresamos:

x48ng --print-config > ~/.config/x48ng/config.lua
nano ~/.config/x48ng/config.lua


Esto abrirá nuestro editor GNU Nano con el fichero de configuración. Podremos usar Ctrl+w para buscar la línea:

rom = "rom"

y le emplazamos la ROM de la HP tope de gama de la línea, el fichero gxrom-r (para que nos quede como una HP-48GX+, aunque tendremos las ROMs de las HP-48SX y otros modelos intermedios de la serie si nos interesa). En este caso haremos que la línea quede de la siguiente manera:

rom = "ROMs/gxrom-r"


Guardamos los cambios con Ctrl+o y salimos del editor Nano con Ctrl+x.

Ahora podremos ejecutar el emulador desde Aplicaciones / Accesorios / x48ng, o bien ingresando a la terminal:

x48ng

La primera vez que lo hagamos nos preguntará si queremos resetear la memoria de la calculadora (un paso necesario al prenderla por primera vez). Para responder "yes" a la pregunta, presionamos el botón de función R (o sea, el botón "blanco" superior izquierdo de la X48). Y ya nos quedará la X48 operativa.

También contaremos con una visual apaisada, que puede ser ideal para verla en pantallas de una netbook. Para ello ingresaríamos:

x48ng --netbook

Podremos descargar la documentación en castellano en forma de su Guía de Iniciación Rápida de la HP48G, la Guía de Usuario de la HP48G, o la Guía de Usuario Avanzado de la HP48 (en inglés).

martes, 23 de noviembre de 2021

¿Cómo emulo una PDP-8/I 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. 

Permitía a varios usuarios emplear esta máquina de 12 bits, pero con una cómoda terminal teletipo de manera local, o bien con un muy caro conmutador paralelo se podían utilizar terminales remotas gracias a los enlaces modulados por un acoplador telefónico.

El TSS/8 requería una PDP-8, 8/I u 8/E, pero potenciada 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 almacenamiento de masa. 

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.

La distancia que pone el tiempo de evolución ha podido suplir estos aspectos con creces, y permite a todos los Descamisados el estudio del Arte. Nuestro sistema GNU con Linux puede ser adaptado - por genialidad maquinal - para emular todo tipo de máquinas, 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. Esta 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    <O/! O    O    --![O] [O/ [] [] []!"
600 PRINT "[]( )    !   ! /H\ /H  /H>    H !/!>  <W>  [               ]]]]]"
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).

Otros Comandos

Estos son algunos comandos extras (atajos de pocos caracterers
 
.ASSIGN x (presumo que asigna algún tipo de dispositivo)
.BREAK x .BRO-ADCAST string (sólo funciona desde la cuenta 0,1)
.CLOSE (Cierra un usuario)
.DEPOSIT x y (Deposita en memoria en la dirección x el valor y)
.DUPLEX (Modo duplex)
.EXAMINE x x (Examina desde dirección x a dirección y:límite-10)
.FORCE kb string (Fuerza al teclado # con la cadena con ^como controles)
.KJOB (elimina trabajo - Lo mismo que correr LOGOUT)
.LOAD x (Carga la memoria con el programa x)
.LOGIN (Permite ingresar al sistema)
.LOGOUT (Sale del sistema) 
.RELEASE (presumo que suelta el dispositivo asignado)
.RESTART x (Muestra o resetea la dirección de inicio)
.RUN ACCT PROG x (Corre el programa x desde la cuenta PPN en la dirección x)
.S (No parece hacer nada),
Ctrl+B,S detiene un programa)
.START x (Inicia un programa o reinicia un programa sin Offset de octal)
.SWITCH x (probablemente carga un registro de conmutación con un valor dado)
.SYSTAT (corre el programa SYSTAT)
.TALK kb string (Envía un mensaje al teclado K##)
.UNDUPLEX (Desactiva Duplex)
.USER x (Show the account and keyboard for Job x)
.VERSION (Presenta la versión de TSS/8)
.WHERE (Muestra todos los valores de registro de conmutación)

Abandonar la sesión

Como vemos, 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