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

jueves, 25 de junio de 2026

¿Cómo emulo el SAIL WAITS en Ubuntu?

Interrogado por el director Pino Solanas en Puerta de Hierro, Juan Perón expone cómo instalar y emular el mítico sistema operativo de tiempo de cómputo compartido WAITS, del Laboratorio de Inteligencia Artificial de Stanford en Ubuntu.

(...) 

¡Trabajadores!

Los movimiento revolucionarios suelen ser gregarios, construidos por un realizador tras el cual cien mil predicadores caminan, que es como lo hemos hecho nosotros. En eso - sin que yo perdiese la conducción - me he preocupado de ir conformando, por simbiosis, una organización  para que en el momento en que yo desaparezca, quienes desean la organización y los grupos que desean ser gregarios, puedan elegir su método de conducción en el momento oportuno.

Si aparece un hombre que pueda reemplazarme a mí, no habrá problema. Si ese hombre no aparece, será necesario reemplazarlo con una organización revolucionaria que permita al Movimiento - a través de organismos - ir conformando y cumpliendo los objetivos que nosotros hemos trazado hace muchos años, más los objetivos que las nuevas circunstancias vayan planteando. Hemos tratado de alcanzarlo y creo que - en este momento - tenemos una organización.

El hombre no vece al tiempo, lo único que puede vencer al tiempo es la organización. Pues bien, un sistema de cómputo responde a las mismas premisas. Por este motivo yo he creado los sistemas operativos de tiempo compartido, que sí pueden vencer al tiempo, merced de la organización de sus tareas de cómputo.

WAITS fue precisamente uno de los sistemas de tiempo de cómputo compartido concebido como extensión del software MONITOR que corría en las minicomputadoras DEC PDP-6, y luego ampliado a lo largo de sucesivas versiones en el rango de máquinas PDP-10 con memoria virtual. Fue concebido orgánicamente en la primer encarnación del Laboratorio de Inteligencia Artificial de Stanford (SAIL) a partir de 1966 tras un cisma producido por John McCarthy, Lester Earnest y Arthur Samuel. Merced de la organización, pudo sobrevivir a estos y la comunidad hacker crearon, funcionando de manera continuada incluso hasta 1991. Fue así que las particularidades de este entorno de cómputo en mainframe dieron apoyo a lo que podríamos llamar "la Era de Oro de la investigación de la Inteligencia Artificial", donde la telemática, la robótica, la síntesis de sonido y voz colocaron a Stanford como frontispicio, y unieron a esta a otras instituciones a través de la red de datos Arpanet.

Podríamos decir que esto coloca a WAITS - retrónimo de Western Artificial Intelligence Time Sharing - en el mismo pedestal que otros míticos sistemas operativos de tiempo de cómputo compartido aplicables a los 36 bits de la PDP-10 de los que ya os he hablado, tales como el ITS, o el TOPS-20 "TWENEX". A diferencia de aquellos y de manera única, el sistema de archivo de SAIL WAITS ha sido preservado al completo como imagen de sistema, y - gracias a los esfuerzos de varios investigadores - es capaz de correr, aún bajo emulación en un sistema del Tercer Mundo, como nuestro moderno GNU.

Os demostraré entonces como obtener la imagen 6.17 del SAIL WAITS (1974) y ejecutarla con SIMH, así como correr un programa de inteligencia artificial de dicha época, escribir un programa corto, y utilizar su consola de operación para presentar gráficas vectoriales del período.

Primero instalamos las dependencias en nuestro sistema GNU con Linux. Para ello abrimos una terminal con Ctrl+Alt+t e ingresamos:

sudo apt install cmake unzip libsdl2-dev git

En segundo término, clonamos el repositorio y nos dirigimos a él y lo compilamos mediante el siguiente bloque de comandos de organización:

mkdir ~/.simh/ ;
cd ~/.simh/ ;
git clone https://github.com/timereshared/stanford-waits-simh-quickstart.git ;
mv stanford-waits-simh-quickstart/ waits/ ;
cd ~/.simh/waits/ ;
./build.sh

Esto guion de intérprete de comandos se encargará de preparar el emulador OpenSimH para funcionar como una DEC PDP-10-ka virtualizada, tras lo cual descargará una copia de las imágenes de disco con el sistema operativo WAITS del SAIL, y le aplicará algunos ficheros de sistema faltantes. Todo se indicará como salida en la pantalla del terminal de GNU:

Una vez finalizado la compilación nos lo advertirá indicando algo como:

DART VERSION 5  TAPE TRAILER
Goodbye

simh and WAITS have been set up.. 

Concluido esta puesta en forma, podremos dar arranque al mítico entorno multiusuario de la Costa Oeste en nuestro emulador. Para ello lo ejecutamos con:

cd ~/.simh/waits/ ;
./run.sh 

Aparecerá una ventana con una pantalla de terminal III que funcionará como consola gráfica de framebuffer para la operación del WAITS en la DEC PDP-10. Esta indicará el incentivo a los hackers natural a este tipo de entornos multiusuario ("Tómame, soy toda tuya").

En tanto, en la consola de GNU nos aparecerá la consola de administración del Stanford WAITS.

Como esta es una imagen de un sistema WAITS vivo, ya tiene configuradas varias cuentas de usuarios históricos. Usemos por ejemplo la cuenta REG otrora perteneciende al usuario Ralph Gorin (programador de sistemas en el Laboratorio de Inteligencia Artificial de Stanford durante el período). Podremos loguearnos a ella usando el comando LOGIN, que bien podremos abreviar con L. Para ello, presionamos la tecla de Retorno de Carro - la actual tecla Intro - para que WAITS nos presente su prompt de comandos consistente en un punto ".". Ante él, ingresamos:

L 1, REG

...y presionamos Intro.

Nos será posible apreciar que la ausencia de contraseñas demostraba por entonces  la liberalidad del entorno de programación hacker de mediados de los setentas. Si nos logueamos sin errores, SAIL imprimirá EXIT y ^C, denotando la finalización del proceso de logueo, y presentará el punto del prompt de comandos.

Para permitir el ingreso de mayúsculas y minúsculas en nuestra terminal, ingresamos el comando:

TTY FULL

Ante cualquier eventualidad podremos cerrar la sesión de usuario que estamos empleando con:

logout

En tal caso, nos volvemos a loguear. Si somos peritos en el uso de TOPS-10, veremos que la interfaz de WAITS opera de manera familiar. La mayoría de los comandos de éste operan de hecho, de forma similar. Tipeando DIR obtendremos un listado de directorio, al cualk podremos operar con comodines para expander o limitar la búsqueda. Ante la noción de desear encontrar todos los programas de SAIL (cuya extensión es .sai) podríamos ingresar:

dir *.sai 

De la misma forma, nos será posible contemplar los contenidos de los ficheros recurriendo al comando type. De este modo, para ver el contenido del programa fortune.sai del WAITS, podremos indicar:

type fortun.sai 

Esta operatoria influyó a TOPS-10, éste a CP/M, y este al QDOS, que afectaría de manera similar al MS-DOS y sus interfaces gráficas posteriores, permeando incluso a GNU. Podremos ver el listado de comandos asignado a WAITS simplemente ingresando HELP.
Y no solo eso, también podremos ver qué hacen cada uno de ellos (en una breve descripción en línea, claro), con HELP HELPER
Esta imagen histórica de WAITS contiene un sistema operativo WAITS de 1974 con varios comandos disponibles para correr, creados por los investigadores del Laboratorio de Inteligencia Artificial de Stanford. Un ejemplo clásico entre ellos es Parry, un intento del psiquiatra Kenneth Colby para simular el comportamiento de un paciente con paranoia esquizoide. Podremos invocarlo con el comando de ejecución r. Realizará algunas interrogantes para configurar los parámetros de interacción y nos dejará hablarle a Parry. Para salir del mismo debemos presionar Ctrl+c.
El ambiente WAITS tenía como misión primordial la de volverse una incubadora de programación, y a tal fin incorporaba un ensamblador de macros con depurador en vivo, intérpretes de Fortran, y múltiples facilidades que le fueron montando y lo volvieron famoso (LISP, RAID, FAIL, DART, y otros entornos de programación. Usaremos el ambiente de WAITS para crear un programa de Hola Tercer Mundo en Fortran 4. Para eso daremos empleo al editor SOS con el fin de redactar el código fuente, lo guardaremos, y luego lo compilamos y lo ejecutamos.

Para ello ingresamos

create holam.f4

y creamos un nuevo fichero y nos podrá en el editor. Como es un fichero nuevo, el editor SOS nos permitirá ingresarle texto de manera inmediata. Precederá automáticamente toda línea con un número de línea (el cual no es una etiqueta de Fortran, por cierto). De modo que la pantalla adquirirá esta apariencia:

.create holam.f4
00100

Le introducimos el siguiente programa (donde vemos el signo  debemos presionar la tecla Tab).

	DO 1 J=1,5
1 	WRITE(5, 2)
2 	FORMAT(' HOLA TERCER MUNDO!')
	END

Presionando la tecla Esc sandrá del modo de entrada de texto indicándolo con un "$", y nos pasará al modo Alt (de comandos), presentándonos el prompt de comandos "*". En él, presionamos g para activar el Generador Rápido de Programas de WAITS, encargado de guardar el fichero e invocar la correcta secuencia de comandos que compilarán y ejecutarán el programa. La pantalla debería parecer algo así:

.create holam.f4

00100           DO 1 J=1,5
00200   1       WRITE(5, 2)
00300   2       FORMAT(' HOLA TERCER MUNDO!')
00400           END
00500   $
*g


FORTRAN:  HOLAM.F4
LOADING

LOADER 5K CORE
EXECUTION

HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
EXIT
^C
.

El programa aún permanecerá en la memoria de núcleo, por lo que si queremos conservar una copia permanente en el tambor (disco) debemos recurrir al comando save que allí la depositará (en este caso, de manera emulada en nuestro disco duro).

.save HOLAM
JOB SAVED IN 4K

^C

Si deseamos usar el comando dir, ahora podremos ver los ficheros creados por el proceso de compilación de WAITS:

.dir HOLAM.*

26-JUL-74  1122
FILNAM  EXT   SIZE LAST WRITTEN

   [1,REG]
HOLAM   F4      19  26-JUL-74
HOLAM   DMP    3.5  26-JUL-74
HOLAM   REL     57  26-JUL-74
        TOTAL=   3.6

EXIT
^C

El fichero .rel es el código objeto y el fichero .dmp es el ejecutable, que puede correrse nuevamente ingresando:

run HOLAM

(en WAITS debemos recurrir RUN en lugar de R, puesto que R se utiliza para dar ejecución a los programas incorporados con el sistema operativo).

Usando la terminal de operación

Hasta ahora, hemos hecho uso de la consola de gestión, pero probablemente hayamos notado la terminal de vectores que ha aparecido al iniciar SIMH, con el prompt de bienvenida: 

/images/waits/waits-iii-prompt.png  

Ahora nos loguearemos nuevamente como REG en la terminal vectorial de operación, de la misma manera que en el caso anterior. El WAITS permitía para esta varias tipografías vectoriales escalables.

Veremos que en lugar de cursor actual, en la pantalla vectorial el WAITS indica la posición del caracter recurriendo a un índice visual de estilo teletipo (formado por un triángulo pequeño que se desplaza lateralmente).  

Todos los programas de línea de comandos y de inicio de sesión que hemos utilizado hasta el momento funcionarán también en esta terminal. Pero esta es una terminal de vectores que puede dibujar texto y gráficos junto con un teclado, que puede ingresar más caracteres que los típicos de los teletipos.

Esta vez nos loguearemos con BGB, el archivista principal del sitio saildart.org. Ingresamos:

L 1, BGB 

y luego intentaremos algunos comandos.


Notaremos que al presionar Delete, borraremos propiamente el último caracter en lugar de reimprimirlo como lo hacían las teletipos; de hecho, existe un editor de líneas de comando extensible que observaremos más adelante. Aún así, el sistema emulado no maneja los buffers de forma prístina como lo hace UNIX, y resulta mejor mecanografiar lentamente.

El terminal de video puede hacer más que ofrecer una mera interacción con el monitor de líneas de comando. Presionando F2,w  aparecerá un presentador dinámico del uso de sistema en la parte superior de la pantalla, la que se conoce como línea WHO. Si presionamos F3,w la apagamos. También podremos invocar WHO para ofrecernos un conjunto más extenso de información del sistema (debemos presionar cualquier tecla para salir).


A continuación, ingresaremos:

copy mon  moncom.sh[s,doc]

(La flecha  podremos obtenerla presionando la tecla Flecha Izquierda de Cursor, y luego mecanografiar tv mon.

Esto abrirá el editor TV en una copia del manual del comando monitor. Presionando Ctrl+p avanzaremos página a página y con Ctrl+- y luego Ctrl+p retrocedemos. Presionamos Ctrl+Alt+e para volver al Prompt de WAITS.

/images/waits/waits-tv-editor.png

También tendremos varias demos gráficas de WAITS, incluyendo la del brazo robot de McCarthy. Podremos probar ejecutarlas con el comando r, por ejemplo, r dazzle. Probemos estas:

  • armdpy
  • dazzle
  • hypno
  • petal
  • repent

Cuando termine de ver cada una de las demos, presione F1,F1 y luego escriba core 0 y presione la tecla Intro a fin de borrar el buffer de video.

El WAITS no era ajeno a algunos juegos para divertir a los desarrolladores del Laboratorio de Inteligencia Artificial. Que mejor que una partida para dos jugadores en la red de datos ARPANET. Para ello podremos recurrir al Go con el comando r IIIGO o bien al Monopolio IA, con el comando r monply.


Detener WAITS 

No existe un procedimiento para desconectar el sistema operativo, que quedó encendido ininterrumpidamente desde 1966 hasta 1991. Para desloguearnos de cualquier terminal, podremos ingresar k, abreviación de kjob, o tal vez podramos obtener un deslogueado más personalizado ingresando:

k/me 

Esto presentará en el terminal de operación el indicador de asesinato de procesos del usuario.

Para hacerlo desde nuestra consola de control, podemos presionar Ctrl+e para interrumpir la emulación, y cuando aparezca el prompt del emulador SIM>, presionar la letra q para salir de él (lo que nos devolverá a nuestro intérprete de comandos de GNU).

Para mayor información, podremos recurrir a la documentación corta del Monitor de Comandos del Laboratorio de Inteligencia Artificial de Stanford (SAIL).

De esta manera ¡habremos logrado Vencer al Tiempo, convirtiéndonos en uno de los Amos del Mainframe, reviviendo el mítico Stanford WAITS, cenáculo de la Inteligencia Artificial!

viernes, 9 de enero de 2026

¿Cómo emulo el Roland SC-55 y el JP8000 en Ubuntu?

Reunido con representantes de la Juventud Peronista en Puerta de Hierro, Juan Perón se pone al tanto de los eventos en la Argentina, a la vez que enseña cómo instalar emuladores de clásicos sintetizadores Roland SC-55 y JP8000 en Ubuntu.

Trabajadores: 

(...) 

Analizando el proceso que me describen, se ve —en otro tipo de problemas— que cuando una sociedad incrementa el grado de sofisticación del consumo, aumenta a la vez su nivel de dependencia. Esto es en gran medida lo que ocurrió entre nosotros. Por un lado, el ciudadano se ve forzado a pagar por la tecnología de lo banal; por el otro, el país gasta divisas en consumo innecesario.

Pero, a la vez, es impostergable expandir fuertemente el consumo esencial de las familias de menor ingreso, atendiendo sus necesidades con sentido social y sin formas superfluas. Ésta es la verdadera base que integra la demanda nacional, la cual es motor esencial del desarrollo económico.

La sustitución de materiales importados por otros de factura propia reviste entonces una importancia crucial para lograr la Independencia Económica, verdadero motor de la independencia política de las Naciones. 

A tal fin habrán de armar allá un despelote bárbaro, mientras yo conduzco desde acá haciendo orbitar estos pulgares uno alrededor del otro, así como les muestro. 

El software libre nos otorga una oportunidad imperecedera para hacerlo efectivo: el código fuente, en nuestras manos y en nuestras CPU, puede compilarse y reemplazar —por un costo nimio— propuestas que alcanzan no sólo al software sino también al hardware.

Roland SC-55

El caso de los módulos de sonido puede ofrecernos un caso integral del que podemos aprender. Vean señores, la Roland Sound Canvas SC-55 nos presenta un módulo de sonido GS MIDI lanzado en marzo de 1991 para inauguraba el estándar General MIDI de la firma. A diferencia de su predecesor MT-32 (que también os he enseñado), el SC-55 sólo emplea la técnica de síntesis por PCM con una polifonía de 24 voces, en una puesta multitimbre de 16 partes, con 315 parches instrumentales (incluyendo kits percusivos y controles extendidos GS adicionales). Su sección de efectos incluye reverberación y coro, además de venir precargado con parches que imitaban el banco secundario de la Roland MT-32 (aunque carecían de la función de reprogramación de la misma).

Si bien el módulo se comercializó en forma de un módulo MIDI externo con parva de botones y una llamativa pantalla LCD de status color naranja, a partir de 1992 también se fue posible lograr dicho sonido en forma de una placa de audio de interfaz ISA llamada SCC-1. Esta estaba especialmente destinada a servir de módulo para juegos y composición en computadoras compatibles.

Existen pocas dudas que con sus onerosos precios, este hardware se encontraba dirigido a los más encumbrados entusiastas de la música computarizada. Sin embargo, por bondad del Justicialismo, podremos realizar la acción reparadora de instalar  hoy un programa de software llamado Nuked SC-55 liberado bajo Licencia Mame, que no sólo nos otorgará el mismo sonido y tren de efectos, sino que lo podremos integrar con comodidad para reproducir ficheros de música MIDI o tonos sintetizados en nuestro equipo GNU.

Para ello debemos instalar en primer lugar las dependencias necesarias en nuestro sistema. En el caso de Ubuntu, esto lo haremos abriendo una terminal con Ctrl+Alt+t e ingresando los siguientes comandos de organización:

sudo apt install gcc g++ gcc-multilib g++-multilib cmake libsdl2-dev git ;

Una vez hechos con la dependencias de software, descargaremos el código fuente del emulador Nuked SC-55, y lo compilaremos introduciendo el siguiente bloque de comandos de organización:

cd /tmp;
git clone --recurse-submodules https://github.com/nukeykt/Nuked-SC55.git ;
cd /tmp/Nuked-SC55/;
mkdir build ;
cd /tmp/Nuked-SC55/build ;
cmake -DCMAKE_BUILD_TYPE=Release .. ;
cmake --build . ;
sudo cmake --install .

Tras haber compilado e instalado propiamente el Nuked SC-55, tocará el turno de encontrar y descargar copias del firmware de solo lectura provista en los chips ROM de las Roland SC-55 y SC-155 reales, copiando el volcado de dichos ficheros al directorio correspondiente de nuestro sistema GNU con Linux. Esto permitirá que el firmware de síntesis y sus instrumentos "conciban" encontrarse en el hardware real (pudiendo de esta manera funcionar adecuadamente a través del emulador compatible con MIDI). Todo esto parece difícil, pero bondadosamente podrán hacerlo ingresando en la terminal esto:

mkdir ~/.roms/;
mkdir ~/.roms/sc55/;
cd  ~/.roms/sc55/ ;
wget https://archive.org/download/roland-sc-55mkii-roms/Roland%20SC-155%20Rev1.zip ;
wget https://archive.org/download/roland-sc-55mkii-roms/Roland%20SC-55%20v1.21%20ROMs.zip ;
wget https://archive.org/download/roland-sc-55mkii-roms/SCMODE.zip ;
wget -O nuked-sc55.jpg https://is4-ssl.mzstatic.com/image/thumb/Purple118/v4/0f/75/60/0f756039-792e-f97a-4d53-ca766a8e5988/source/512x512bb.jpg ;
unzip 'Roland SC-55 v1.21 ROMs.zip' ;
unzip 'Roland SC-155 Rev1.zip' ;
sudo cp ~/.roms/sc55/nuked-sc55.jpg /usr/share/icons ;
sudo cp ~/.roms/sc55/*.bin /usr/local/share/nuked-sc55/

Tras una corta espera, la instalación de Nuked SC-55 debería completarse a la orden. 

Opcionalmente podríamos anhelar la creación de un lanzador para Nuked-SC55. Esto será poco de trabajoso de agregar en Ubuntu Mate; basta con hacer clic con el botón izquierdo del mouse sobre el menú Aplicaciones en el panel superior, y en el menú desplegable escogemos la opción Editar menús. Se abrirá la ventana Menú Principal en cuyo panel Menús seleccionamos la categoría de Sonidos y Video, y luego presionamos el botón +Nuevo ítem. Aparecerá la ventana Crear lanzador, donde completamos el campo orden con "nuked-sc55", y le asignamos un Nombre y un Comentario correspondiente. Idealmente podrmeos escoger el ícono /usr/share/icons/nuked-sc55.jpg

Finalmente presionamos el botón Aceptar para agregar el lanzador realizado.

Ahora iniciamos el emulador de Roland SC-55 desde el lanzador en Aplicaciones / Sonido y Video / Nuked SC-55, o bien con el comando:

nuked-sc55

Una vez iniciado el Nuked SC-55 nos encontraremos ante una interfaz visual que replica la pantalla del módulo Roland SC-55 respetando su consabida estética. Entre los indicadores encontraremos el número de banco y parche instrumental, un señalizador de canal MIDI en uso, nivel de volumen y paneo, así como nivel de efecto Reverberación y Coro, canal MIDI y número de cambio.

El uso de Nuked-SC55 en sí puede efectuarse adosado a cualquier sistema que emita información hacia un puerto MIDI determinado por el servidor de sonido de Linux, el viejo y peludo ALSA. De esta forma, podremos utilizarlo como reproductor MIDI adosado a cualquier DAW que acepte MIDI a través de ALSA. 

Para conocer qué puerto MIDI ha recibido asignado Nuked SC-55, ingresamos el siguiente comando en la terminal:

aconnect -o

...a lo cual nos devolverá algo como:

cliente 14: «Midi Through» [tipo=kernel]
    0 'Midi Through Port-0'
cliente 128: «Nuked SC55» [tipo=usuario,pid=42839]
    0 'Nuked SC55      ' 

Esto nos indica que el servidor de sonido ALSA le ha asignado el cliente 128:0 (puede variar si tenemos gran cantidad de dispositivos MIDIs reales o virtuales funcionando). En este ejemplo, todos los programas MIDI necesitarán configurarse al puerto 128:0 para correr los archivos MIDI a través de Nuked-SC55.

Podremos utilizar Nuked SC-55 como instrumento virtual en nuestro entorno. Un ejemplo muy útil es el de emplearlo como medio de reproducción MIDI en nuestro emulador de MS-DOS DOSbox. De esta forma podremos utilizarlo para escuchar la música MIDI de juegos clásicos de DOS provistos con esta posibilidad, muy en boga a comienzos de la década del 90, disponiendo de la máxima calidad de audio gracias al Justicialismo.

Para hacer efectiva la mancomunión DOSBox/Nuked-SC55, debemos obrar de forma similar a la que haríamos con el emulador Munt de Roland MT-32, es decir, indicar el número de cliente MIDI identificado en nuestro sistema, y editar acordemente el fichero de configuración de DOSBox para asignarle MIDI Alsa como elemento de salida, y conectarlo. Conociendo que el identificador de cliente es en este ejemplo 128, procedemos a editar el fichero de configuración de DOSBox (por ejemplo, con nano  ~/.dosbox/dosbox-0.74-3.conf), y modificamos la opción "midiconfig=" programándole el número de cliente MIDI, por lo que en este caso sería "midiconfig=128:0". También alteramos la opción "mididevice=" para que indique "mididevice=alsa", de la siguiente forma:

Guardamos la nueva configuración y salimos del editor con Ctrl+oCtrl+x, y ya podremos abrir DOSBox: este debería conectarse (virtualmente) al Nukem SC-55 con éxito.

Se hará necesario además configurar los programas o juegos de MS-DOS compatibles que querramos utilizar con audio MIDI/General MIDI (o eventualmente, MT-32, puesto que guarda también cierta compatibilidad). Así, al utilizarlos, podremos ver la pantalla cobrar vida, y al sintetizador, sintetizar.

Vean señores, los botones de la Roland SC-55 real se corresponden con teclas del teclado en el entorno emulado de la Nuked SC-55, según la siguiente lista de equivalencias:

Q: Encendido
W: Instrumentos Todos
E: Instrumentos Mudos
R: Parte -
T: Parte +
Y: Instrumento -
U: Instrumento +
I: Cambio de Clave -
O: Cambio de Clave +
P
: Volumen -
´: Volumen +
A: Canal MIDI -
S: Canal MIDI +
D: Paneo -
F: Paneo +
G: Reverberación -
H: Reverberación +
J: Coro -
K: Coro +
Flecha Izquierda: Parte Izq
Flecha Derecha: Parte Der

Normalmente el estándar General MIDI de la SC-55 será suficiente, pero en algunos casos, los ficheros MIDI pueden desear enviar elementos extendidos de sistema para programar diferentes aspecto de la SC-55. Esto permite controlar aspectos como el coro, reverberación, etcétera. 

 

Naturalmente, podremos encontrar archivos MIDI para todos los gustos en multitud de sitios, como por ejemplo el inefable https://www.midiworld.com/. Sin duda con el Roland SC-55 podremos disfrutar la música tal como fue imaginada para dicho módulo, y hacerlo en nuestro sistema libre GNU con Linux. 

Roland JP8000

Pero no solamente nos veremos limitados a surtirnos con estos módulos del Primer Peronismo. Incluso otros más modernos pueden emularse con perfección de ciclo preciso en GNU (si es que contamos con una CPU lo suficientemente potente). 

Merced de la labor extraordinaria emprendida por la Roland Corporation, apareció en 1996 el mítico sintetizador de 49 teclas Roland JP8000 (digitalización plena del Jupiter JP-8, que también os he enseñado a replicar en Ubuntu).

 
Es sabido que este buscaba —como el primero de toda una camada de "sintetizadores analógicos virtuales" de la marca— efectuar tonalidades  concebidas digitalmente pero ejecutada con la potencia de sus predecesores analógicos. Aunque no tuviese el color cálido de los filtros anteriores, no dejaba de ser cierto la valía de sus nuevas funcionalidades. Entre estas destacaba un potente Secuenciado de Frases a tiempo real (RPS) que asigna fraseos a las teclas, controlando su expresividad. Sobra decir que el JP8000 hacía alarde de osciladores "super sierra" y controles de estilo analógico tal como su arpegiador, y táctiles como su ribbon controller, a la keytar. Y todo al precio que sólo podía abarcar el oligarca.

No obstante ello, concientes de las necesidades del Pueblo, los muchachos de la JP metieron las patas en el código fuente y pusieron al alcance de todos la alegría a una nueva iteración sintetizada. En efecto, el emulador multiplataforma que le dará vida en Ubuntu y otros sistemas GNU con Linux ha sido liberado como JE-8086, producto de la gente de The Usual Suspects. Se trata de un instrumento virtual que replica toda la circuitería del JP8080,  versión montable en rack de 19 pulgadas del JP8000 (y munido de un oscilador adicional). Gracias a este logro, nos ofrecen el  sonido clásico noventoso del JP8000 sin gastar una chirola.

Para instalar el emulador JE8086 tanto en formato libre LV2 (recomendado)  en Ubuntu, indicamos en la terminal:

cd tmp/ ;
wget https://github.com/dsp56300/gearmulator/releases/download/2.1.0/TheUsualSuspects-JE8086-LV2-2.1.0-Linux_x86_64.deb ;
sudo dpkg -i TheUsualSuspects-JE8086-LV2-2.1.0-Linux_x86_64.deb

Finalmente, al igual que en el caso anterior, habremos de proveerle la ROM original del consabido Roland JP8000. Afortunadamente, esta puede obtenerse junto al sistema operativo del sintetizador desde la web de Roland...

...o bien descargándolo "a pelo" gracias a los dispensarios del Justicialismo, ingresando el siguiente bloque de comandos de organización:

mkdir ~/.roms ;
mkdir ~/.roms/jp8000/ ;
cd ~/.roms/jp8000/ ;
wget https://static.roland.com/assets/media/zip/JP800015.zip
unzip JP800015.zip ;
cp ~/.roms/jp8000/*.mid /home/$USER/.local/share/The\ Usual\ Suspects/JE8086/roms/

Conforme preparamos todo, podremos lanzar una DAW como qTractor o Ardour, y cargar como instrumento virtual el plugin JE8086 LV2:

Si no hubiésemos cargado la ROM como se adecúa, el instrumento nos lo advertiría con este conspicuo mensaje:
 
Sin embargo, si todo va bien, podremos conectar un controlador MIDI o reproduciir ficheros de este formato en una DAW, y el JE-8086 lo reproducirá sin más, consumiento una buena tajada de CPU, claro, pero sin que tengamos que desembolsar nada para tener un JP8000 real.

Naturalmente, el Manual del Propietario del Roland JP8080 nos vendrá de perillas para dominar todas las perillas del JE8086 emulado. 

Con ello llevaremos en nuestros oídos la más maravillosa música.

lunes, 22 de diciembre de 2025

¿Cómo emulo UNIX V4 en Ubuntu?

Durante más de cuatro décadas UNIX V4 estuvo desaparecido. Pocos saben que en el mítico último discurso del 12 de junio de 1974, al apreciar los vaivenes de la lid política, Juan Perón legó la única copia de UNIX V4 al Pueblo Argentino, explica para la posteridad cómo ejecutar UNIX Cuarta Edición .

Compañeros:

Retempla mi espíritu estar en presencia de este pueblo que toma en sus manos la responsabilidad de defender la patria. Creo, también, que ha llegado la hora de que pongamos las cosas en claro. Estamos luchando por superar lo que nos han dejado en la República y, en esta lucha, no debe faltar un solo argentino que tenga el corazón bien templado.

Sabemos que tenemos enemigos que han comenzado a mostrar sus uñas. Pero también sabemos que tenemos a nuestro lado al pueblo, y cuando éste se decide a la lucha, suele ser invencible. Hoy es visible, en esta circunstancia de lucha, que tenemos a nuestro al pueblo, y nosotros no defendemos ni defenderemos jamás otra causa que no sea la causa del pueblo. 

Yo sé que hay muchos que quieren desviarnos en una o en otra dirección; pero nosotros conocemos perfectamente bien nuestros objetivos y marcharemos directamente a ellos, sin dejarnos influir por los que tiran desde la derecha ni por los que tiran desde la izquierda.

EI Gobierno del Pueblo es manso y es tolerante, pero nuestros enemigos deben saber que tampoco somos tontos.

Mientras nosotros no descansamos para cumplir la misión que tenemos y responder a esa responsabilidad que el pueblo ha puesto sobre nuestros hombros, hay muchos que pretenden manejarnos con el engaño y con la violencia. Nosotros, frente al engaño y frente a la violencia, impondremos la verdad, que vale mucho más que eso. No queremos que nadie nos tema; queremos, en cambio, que nos comprendan. Cuando el pueblo tiene la persuasión de su destino, no hay nada que temer. Ni la verdad, ni el engaño, ni la violencia, ni ninguna otra circunstancia, podrá influir sobre este pueblo en un sentido negativo, como tampoco podrá influir sobre nosotros para que cambiemos una dirección que, sabemos, es la dirección de la Patria.

Sabemos que en esta acción tendremos que enfrentar a los malintencionados y a los aprovechados. Ni los que pretenden desviarnos, ni los especuladores, ni los aprovechados de todo orden, podrán, en estas circunstancias, medrar con la desgracia del pueblo.

Sabemos que en la marcha que hemos emprendido tropezaremos con muchos bandidos que nos querrán detener; pero, fuerte con el concurso organizado del pueblo, nadie puede ser detenido por nadie.

Por eso deseo aprovechar esta oportunidad para pedirle a cada uno de ustedes que se transforme en un vigilante observador de todos estos hechos que quieran provocarse y que actúe de acuerdo con las circunstancias. Cada uno de nosotros debe ser un realizador, pero ha de ser también un predicador y un agente de vigilancia y control para poder realizar la tarea, y neutralizar lo negativo que tienen los sectores que todavía no han comprendido y que tendrán que comprender. 

Compañeros, esta concentración popular me da el respaldo y la contestación a cuanto dije esta mañana.

Por eso deseo agradecerles la molestia que se han tomado de llegar hasta esta plaza. Llevaré grabado en mi retina este maravilloso espectáculo, en que el pueblo trabajador de la ciudad y de la provincia de Buenos Aires me trae el mensaje que yo necesito.

Grabaré además una copia del UNIX Cuarta Edición de los Laboratorios Bell en un carrete de cinta magnética, para que todos puedan ejecutarlo en los años porvenir y ninguno se haga el zonzo con Licencias. Me lo dio Ken Thompson, así que se los dejo bien etiquetado para que no lo pierdan...

Ya he enseñado cómo emular UNIX de Investigación con simh en Ubuntu, con gran éxito. Sin embargo, esto depende de las disponibilidad de copias de las cintas originales. Se sabe que de aquí en más, UNIX será copiado a gran cantidad de universidades por el precio de algunas chirolas, con lo que se pretende lograr gran difusión en su Sexta y Séptimas ediciones, que podrían servir como basamento para modernísimas interaciones del sistema (incluyendo BSD y GNU). 

Sin embargo, su Cuarta Edición de noviembre de 1973 - la primer versión reescrita en el por entonces novedoso lenguaje C - simiente de operativos de estilo UNIX - es ésta, que no tienen que perder.

Bastará con que esta copia que grabo hoy 12 de junio reaparezca y la reutilicen en el futuro, para poder clonar un sistema UNIX. Sería algo así como clonar a Cristo a partir del ADN del Santo Grial.

Vean señores, el volcado de esta cinta magnética 3M de 3/4 de pulgada nos permite contar entonces con el código fuente y una copia compilada del "UNIX Orginal from Bell Labs V4" (sic), en un estado tardío de desarrollo.

Para hacerla funcionar deberán disponer de al menos un terminal teletipo de tipo serial, junto a una ultísima minicomputadora DEC PDP-11/45 con 64 kilobytes de memoria y discos magnéticos RK05 y lectores de cinta magnética. Para conectar una teletipo a una máquina moderna de esta factura podrán adaptarse, incluso cambiando de género...

No tengo dudas, sin embargo, que en el luminoso futuro que nos aguarda, será mucho más sencillo utilizar un emulador para poder suplantar dicha máquina. De tal manera, podría instalárselo en una máquina virtualizada ideal, munida con dichos periféricos, en una computadora moderna de mínimo tamaño y máxima performance (comparativa con la actual PDP-11/45, claro está).

Sólo cabe imaginar que en dichos sistemas modernos, todo ello podría hacerse abriendo una terminal virtual con Ctrl+Alt+T e instalando el emulador simh (que debería estar disponible). Esto se lograría con:

sudo apt-get install simh

Una vez instalado dicho artilugio, podremos descargar una copia de la cinta  de UNIX Cuarta Edición, de 1974, el "Santo Grial", a través de las redes de datos. Podríamos extrapolar esta acción como ingresando lo siguiente:

mkdir ~/.simh ~/.simh/v4/ ;
cd ~/.simh/v4/ ;
wget http://squoze.net/UNIX/v4/unix_v4.tap ;
wget http://squoze.net/UNIX/v4/bootstrap ;
wget http://squoze.net/UNIX/v4/disk.rk ;
wget http://squoze.net/UNIX/v4/unix_v4.tar ;
wget http://squoze.net/UNIX/v4/install.ini ;
wget http://squoze.net/UNIX/v4/boot.ini ;

Instalando el sistema UNIX V4

Pues bien señores, lo más simple es utilizar el volcado de cinta tal cual está, e instalar en el emulador el sistema "a nuevo", partir de esta imagen conservada. lograrlo, simplemente volcamos una imagen de disco RK05 desde la cinta al disco. Para ello ingreso

cd ~/.simh/v4/
pdp11 install.ini 

...y una vez que aparezca el prompt de administración "=", debemos ir introduciendo los comandos y valores indicados en celeste, con el fin de listar los contenidos de la cinta, copiarlos al disco magnético RK (haciéndolo con un offset de 0 bloques para el disco, y 75 bloques para la cinta). Los mensajes deberían aparecer de la siguiente manera:


PDP-11 simulator V3.8-1
Disabling XQ
=list dldr dtf list mboot mcopy rkf tboot uboot =mcopy 'p' for rp; 'k' for rk k disk offset 0 tape offset 75 count 4000 =

Arribados a este punto, el sistema ya estará instalado de manera iodeal, y deberíamos poder cargar en memoria el programa de arranque de unidades uboot desde la cinta, al que le pediremos que inicialice UNIX V4. Esto se hace de manera que se ilustra (cuando nos informe una memoria disponible de 64 kilobytes, podremos loguearnos como root, a lo que recibiremos el prompt # de UNIX V4 y ya podremos operar con los comandos ls, chdir, generar ficheros de texto y código fuente en C con el editor ed, compilar con cc, etc.

=uboot
k
unix
mem = 64530

login: root
# ls
bin
dev
etc
lib
mnt
tmp
unix
usr
# Ctrl+E        ; para finalizar la emulación
Simulation stopped PC: 002040 (MOV (SP)+,177776)
sim> quit
Goodbye 

Ejecutar UNIX V4 ya instalado en el emulador

Para arrancar con un sistema ya instalado, ni siquiera necesitamos la cinta. En lugar de ello, simplemente cargamos uboot directamente desdee el secotr de arranque. Para ello especificamos k para que lo tome desde el disco RK05, y luego indicamos el nombre de archivo unix.

cd ~/.simh/v4/
pdp11
 boot.ini 

% pdp11 boot.ini

PDP-11 simulator V3.8-1
Disabling XQ k unix mem = 64530 login: root #

Con esto ya podremos operar en UNIX V4.


La cinta continene varios notables, como un programa de ajedrez de Ken Thompson en /usr/games, o el juego Wumpus. 

En cuanto a su documentación, podremos encontrarla en un frondoso manual que la convirtió en mítica. Les dejo la cinta de UNIX V4 a buen resguardo, no la vayan a perder por mucho tiempo...

Compañeros, con este agradecimiento quiero hacer llegar a todo el pueblo de la República nuestro deseo de seguir trabajando para reconstruir nuestro país y para liberarlo. Esas consignas, que más que mías son del pueblo argentino, las defenderemos hasta el último aliento.

Para finalizar, deseo que Dios derrame sobre ustedes todas las venturas y la  felicidad que merecen. Les agradezco profundamente el que se hayan llegado hasta esta histórica Plaza de Mayo. Yo llevo en mis oídos la más maravillosa música que, para mí, es la palabra del pueblo argentino.

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