In memoriam

Los que os habéis iniciado en el mundillo informático con los «PC compatible» y, quizá, con Windows 95 ó 98, os sorprendería lo que se puede hacer con 1 Kb de RAM. La RAM siempre ha sido un recurso caro. Sin duda era la llave usada por el comercio para especular con los precios de los equipos informáticos. ¿Quieres más prestaciones?: ¡Paga y disfruta! Era, y es, el componente más sencillo de ampliar y, también, el cuello de botella más frecuente. Sobre todo en esa época en la que era impensable —por no decir imposible— cambiar el procesador por uno más potente, añadir un disco duro mayor (no existían) o una tarjeta gráfica mejor (tampoco existían). El ZX81 es una tarjeta de circuito impreso con todos los circuitos integrados soldados a ella, por lo que cambiar cualquier componente es sólo apto para manitas e iluminados. Pero dispone de una ranura de expansión a la que se puede conectar, entre otras cosas, una ampliación de memoria o una impresora térmica.

La ampliación de memoria —que se comercializaba en dos versiones: 16 y 64 Kb— permite correr aplicaciones y juegos mucho más elaborados y útiles.

16 Kb Rampack
16 Kb Rampack

El capricho costaba 16.000 ptas. (a 1.000 ptas. el Kb). Para que os hagáis una idea, en el momento de escribir esto se puede comprar un módulo de 1 Gb  (1.048.576 Kb) por 16 € (2.662 ptas.), es decir,  ¡¡¡ a 0,0025 ptas. el Kb !!!

Con esa «pequeña» inversión ya podía jugar al ajedrez, matar marcianos a cascoporro e incluso llegué a probar un programa que reconocía la voz. En 16 Kb cabían 3 ó 4 palabras digitalizadas. Para grabarlas en la RAM se usa la entrada de audio que sirve para leer los programas grabados en casete, y aún sobraba sitio para ejecutar el programa que es capaz de reconocerlas y ejecutar la acción asociada: mover la nave a derecha o izquierda, disparar al marciano o lo que fuese menester.

Pero una vez que te metes en el ajo siempre quieres más y los 16 Kb también se acaban. Había que buscar otra forma de exprimir aquel aparatito.

La solución era programar directamente en código máquina. Además de conseguir aprovechar la RAM al máximo, también se tenía acceso TOTAL al hardware, la posibilidad de usar directamente las rutinas de la ROM y un aumento muy considerable en la velocidad de ejecución. El resultado: matar marcianos a dos manos, dibujar gráficos con mucha más resolución (modificando el juego de caracteres a pelo) y aprender. Lo que más satisfacción me producía era esto último.

Mastering Machine Code on your ZX81ContraportadaEl libro que me descubrió los entresijos de este lenguaje fue «Mastering Machine Code on your ZX81» de Tony Baker. Más tarde, en 1984, Joan Sales Roig publicó «Programación en Código Máquina para el ZX81 y el Spectrum». Este tipo comercializó a través del Club nacional de usuarios del ZX81 varios juegos, programados en código máquina, más que decentes. Entre ellos el mítico «Lunar Lander«, juego de tipo vectorial desarrollado por Atari en 1979.

Para el ZX81 no había un ensamblador que facilitara la programación en código máquina. El código se introducía con un pequeño programa cargador que se encargaba de reservar espacio en la memoria e ir introduciendo los códigos hexadecimales en los lugares correspondientes. Si le pegáis un vistazo al librito anterior, en él se explica el procedimiento. Tenías que armarte de paciencia y teclear, sin equivocarte, cientos de códigos hexadecimales (0D324A55…). Lo suyo era tener el casete conectado e ir grabando de vez en cuando porque si se iba la luz o sucedía cualquier otro contratiempo te mandaba al garete toda una noche en vela.

Para aprovechar las rutinas de la ROM era necesario disponer del desensamblado de la misma. A través del Club nacional de usuarios del ZX81 me enteré que había un tipo en Barcelona que tenía el libro con el desensamblado completo de la ROM y lo vendía fotocopiado por un módico precio (estos libros eran bastante caros, eran de importación y escaseaban). Me planté en su casa y salí de allí con un sobre repleto de fotocopias muy interesantes. ¿Para qué reinventar la rueda? La ROM contenía rutinas para leer el teclado, leer desde los puertos de audio, limpiar la pantalla, manipular la salida de vídeo…, una mina, vamos.

Revistas del Club Nacional de Usuarios del ZX81Empecé a desarrollar un juego: «Sherlock Holmes». Se lo comenté al fundador del Club nacional de usuarios del ZX81, Josep Oriol, se interesó por el juego y se comprometió a comprarlo y comercializarlo. Pero la cosa se complicó, me fui de Barcelona y, por diversas cuestiones, me fue imposible terminarlo por lo que abandoné el proyecto y con él se esfumó mi oportunidad de hacerme rico. :P

El ZX81 pasó conmigo muchas horas, demasiadas a veces. Aún recuerdo oír el camión de la basura pasando por debajo de mi casa (pasaba sobre las 7 de la mañana); era la señal para grabar en el casete e intentar dormir un poco. Digo intentar porque la cabeza no paraba y si se me había atravesado algún trozo de programa, soñaba con él hasta que encontraba la solución o acababa dormido. Lo segundo la mayoría de las veces. Pero cuando ocurría lo primero, me levantaba y probaba lo que había pensado en modo sueño/programador. Si funcionaba, dormía plácidamente; si no, seguía en modo sueño/programador y repetía el ciclo.

ApuntesEl lápiz y el papel eran imprescindibles para desarrollar los programas, los gráficos, los bocetos… Gasté mucha tinta y cuadernos que aún conservo (ver foto). En muchas ocasiones, el programar sin tener el ordenador delante es más productivo. Al no tener el impulso de probar el código conforme se va escribiendo, tienes más tiempo para pensar en cómo hacer las cosas y más tiempo, también, para depurarlo. El lenguaje que lleva el ZX81 es un dialecto de BASIC. Es un lenguaje sencillo y se aprende rápido. Para ahorrar memoria, cada token se codificaba con un byte y se obtenía con una sola pulsación de tecla (no era necesario escribir todas las letras «P-R-I-N-T»). Con el tiempo, vas depurando el estilo de programación. Al principio los programas eran churros ilegibles que poco a poco fueron tomando una forma más correcta. La programación en código máquina era un poco más farragosa y complicada. Primero había que escribir el código en ensamblador y luego, con ayuda de tablas, traducir aquello a sus correspondientes códigos hexadecimales. Por último, se introducían los códigos en el ordenador con ayuda del programa cargador (escrito en BASIC) y se ejecutaba.

Si un programa escrito en BASIC contenía un error el programa finalizaba indicando un código de error y la línea donde estaba el fallo. PERO, si un programa en código máquina contenía un error el resultado era impredecible. La mayoría de las veces provocaba el cuelgue del ordenador, por eso era muy importante grabar el programa en el casete antes de ejecutarlo. El problema añadido era que no había información de dónde se había producido el error y había que revisar TODO el código para buscarlo. Además, corregirlo no era fácil. El código máquina se introducía de tirón y para insertar código en medio de lo ya introducido o borrar algo, había que usar otras herramientas (también escritas en BASIC).

Al cacharrito negro con teclado de membrana le saqué todo el zumo que se le podía extraer, me lo pasé muy bien con él y lo guardo con especial cariño. Hace tiempo que no lo enchufo pero no dudo que seguirá funcionando. Tal vez mañana lo saque de su caja. ;)

Share on RedditShare on FacebookTweet about this on TwitterShare on LinkedIn

14 respuestas a «In memoriam»

  1. Navegando con Mozilla Firefox Mozilla Firefox 3.0.1 en Linux Linux

    Que posts tan interesantes!!! Si ya se comentaba por ahi que algo de informatica sabias, y ahora lo confirmamoss…
    Añado el feed, y espero ansioso por la siguiente entrega ;)

  2. Navegando con Mozilla Firefox Mozilla Firefox 3.0.1 en Linux Linux

    0/0

    ¡que tiempos aquellos! a mi me pilló de muy pequeño que no entendía nada y me parecía magia… copiaba los programas de las revistas y les iba cambiando cosas a ver que pasaba. Y cuando ponía el ajedrez, cuando era su turno se ponía en modo ‘fast’ que la pantalla se borraba y era algo así como cuando karpov se cierra los ojos para pensar ¡tremendo! (http://www.youtube.com/watch?v=nDHimdClxg0)
    Ánimo con la serie, no me perderé ningún episodio.

    Si alguien quiere probarlo, este es uno de los mejores emuladores que hay : http://www.chuntey.com/ (puede funcionar con wine).
    Sofware aquí: http://www.zx81stuff.org.uk/
    Manual aquí: http://www.zx81kit.com/online_zx81_manual.htm

    A mi me marcó el «mazogs»: http://www.youtube.com/watch?v=uNWcN-yGrP4

    Saludos,
    Carlos

  3. Navegando con Internet Explorer Internet Explorer 7.0 en Windows Windows XP

    Miguel !!

    Acabo de ver por primera vez tu blog…

    – Menudo pedazo de friky estabas hecho en el 82… y siguientes.
    – No entiendo nada de ninguna explicación técnica (era de esperar, pensarás).
    – No me jodáis con que no sabes de macs.Lo que yo decía, a estudiar.
    – Si decidís en algún momento cambiar de casa, NO cuentes conmigo… no tenía ni idea de que guardases tanto…
    – HAY QUE VER LO BIEN QUE ESCRIBES !!

    Un besillo… (lo espero entre hoy y mañana)

  4. Navegando con Internet Explorer Internet Explorer 6.0 en Windows Windows XP

    ¡Hola, Maikel¡

    Me acaban de soplar que tienes un blog, -imaginarás quién, claro-y aqui estoy, para animarte a que prosigas.

    A pesar de los datos técnicos -por cierto, si te asalta alguna duda, no tienes más que decírmelo, y te la aclaro-, tu discurso resulta ameno, y además nos acerca a ese Miguel que todos conocimos mudito, y que poco a poco, hemos ido descubriendo, a medida que te has ido destapando, quitándote capas como si fueras una cebolla.

    Suerte con esta travesía, que sobretodo, requiere valentía.

    Un beso

  5. Navegando con Internet Explorer Internet Explorer 7.0 en Windows Windows Vista

    Hola Miguel,
    Felicidades por el blog, hace unos años publique mi web http://microhobby.speccy.cz/zx81/index0.htm, la voy actualizando a menudo. Yo tengo el primer boletín trimestral del club nacional de usuarios del zx81, mi padre fue integrante del mismo y conocio a Joan Sales Roig. Soy un fan del zx81 / timex1000, fue mi primer ordenador cuando tenía 15 años. Si tienes material o programas inéditos me gustaría contactar. Yo pase al emulador algunos programas de Joan Sales.

    Un saludo

    Xavier Arbós

  6. Navegando con Mozilla Firefox Mozilla Firefox 3.0.3 en Windows Windows XP

    Hola Xavier. Gracias por tu comentario.
    Ya conocía tu web y tienes material muy interesante. ;)
    Si quieres puedes escribirme y comentamos.

    Los programas que tengo para el ZX81 los tengo en cinta y no sé en qué estado estarán las cintas. Pero sí me gustaría recuperar lo que pueda. Tengo que ver cómo hacerlo.

    Para no publicar de nuevo mi e-mail (ya tengo suficiente SPAM) lo puedes ver en esta página: https://launchpad.net/~sslapp

    Saludos.

  7. Navegando con Internet Explorer Internet Explorer 7.0 en Windows Windows Vista

    Gracias por responder, en principio puedes grabar en formato wav la cinta y si me mandas el archivo puedo pasarlo a file p para verlo en el emulador.
    Que programas tienes ?

    Saludos

    Xavier

  8. Navegando con Mozilla Firefox Mozilla Firefox 3.0.3 en Ubuntu Linux Ubuntu Linux

    Xavier, estoy pasando las cintas a .p
    En cuanto las tenga pasadas pondré lo que tengo disponible para descarga.
    Yo grabo las cintas con audacity, edito el audio para corregir fallos y exporto a wav, 22050, mono, 8 bits. Luego uso las tapeutils en java para pasarlo a .p

    ¿Tú qué usas?

    También he pasado los boletines del club nacional de usuarios del ZX81 a PDF y los pondré en breve.

    Saludos.

  9. Navegando con Internet Explorer Internet Explorer 7.0 en Windows Windows Vista

    Hola Miguel, yo utilizo unos programas de zxd y zxc que lo que hacen es pasar un wav a p, y un p a raw. Igualmente lo primero es pasar la cinta a wav. Me interesan mucho los boletines, yo tan solo tengo el primero y original.

    Muchas gracias

  10. Navegando con Mozilla Firefox Mozilla Firefox 3.0.3 en Ubuntu Linux Ubuntu Linux

    He probado el ZXD y es excesivamente lento.
    Las tapeutils están escritas en java y la conversión es inmediata. Además puede reconocer hasta 200 programas en un solo wav y permite editar el resultado y ver el listado de los programas. Los puedes grabar en .p o .tzx

    Pruébalo si no lo conoces. WEB

    Saludos.

  11. Navegando con Mozilla Firefox Mozilla Firefox 25.0 en Ubuntu Linux Ubuntu Linux

    ¡Mola!
    Me pilla un poco lejos para ir a escuchar a Paco Portalo. Espero poder oír la conferencia si se difunde por streaming o similar.

    Gracias por la información. ;-)

  12. Navegando con Mozilla Firefox Mozilla Firefox 14.0.1 en Windows Windows 7

    Gracias por responder Miguel. Si sale información referente a la conferencia te informaré. Creo que este libro publicado por la Universidad de Extremadura te puede interesar:

    http://www.bugabootheflea.com/

    Saludos.

  13. Navegando con Mozilla Firefox Mozilla Firefox 25.0 en Windows Windows XP

    Ok. Gracias.

    El libro lo descargué ayer. Lo vi en los enlaces que pusiste en el primer comentario. Está muy interesante… y divertido.

    ¡Qué tiempos!

    Saludos.

Responder a Miguel

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Antes de enviar el formulario: