Una borrachera marciana, un virus mágico y una bandera; 767 octetos más uno; las máquinas sin tiempo

Hace un par de semanas me di cuenta de que había hecho tantos cambios en el proyecto Alien-B que en poco se parecía a Alien-A. No era nada malo hacer un juego diferente, pero parte del encanto del retro-reto era hacer una versión comparable al programa original. Tomé una decisión interesante: provoqué un cisma. Dupliqué la imagen del disquete; de una copia quité todas las novedades que había añadido y que convertían al juego en algo muy diferente a lo que pretendía ser originalmente (empezando por los escenarios con paisajes digitalizados); la otra copia la dejé como estaba, salvo que le cambié el nombre: El nuevo proyecto se llamará Inebriated Day y no consistirá en destruir toda nave que ose aterrizar, como obliga la tradición, sino en ayudar a aterrizar a las naves terrestres que regresan de una noche de borrachera en Marte, la fiesta del Día de la Independencia, que conmemora aquel glorioso cuatro de julio en que, con ayuda de un mágico virus informático (mágicamente trasmitido por un mágica red inalámbrica a una computadora alienígena que nadie sabe cómo funciona) y unos cuantos cohetes lanzados desde unos aviones de caza, el planeta Tierra destruyó la flota alienígena invasora, cuya tecnología era muy superior.

Por supuesto se trata de un retorcido e indirecto homenaje a Independence Day (sí, ahí sale lo del virus, lo de los avioncitos y otras auténticas bobadas varias de menor categoría), probablemente una de las peores películas de la historia del cine, que sin embargo siempre me emociona en ciertas escenas (hay que aprovechar para emocionarse las pocas películas en que la Humanidad intenta algo en común, aunque el guión no se sostenga por ningún lado).

Ah, también la bonita bandera del planeta Tierra, diseñada, creada e izada por vez primera en 1970 por el campesino usamericano James W. Cadle, tendrá algún papel en el nuevo juego. Por supuesto, nada tiene que ver la bandera de la Tierra (que ondeó a media asta en varios lugares del planeta cuando murió Carl Sagan) con el penoso filme.

Mientras, hay algo que no logro hacer funcionar en Alien-B: cargar y activar un juego de caracteres.

El comando CLEAR de Beta BASIC funciona de forma diferente al original de Sinclair BASIC: cuando el parámetro es menor que 768 no lo toma como una dirección de memoria sino como la longitud de una zona a reservar; entonces reserva esos octetos bajo el sistema, desplazando las tablas de datos de las ventanas y los atajos de teclado. Este nuevo funcionamiento pretende facilitar la reserva de espacio para cargar en memoria pequeños programas en código máquina.

En mi caso, para facilitar reservar un espacio de precisamente 768 octetos, que es lo que necesita un juego de caracteres de ZX Spectrum, escribí los siguientes procedimientos:

1830
     REM Memory management

1840 DEF PROC superclear bytes
1850   REM Do with any bytes amount what Beta BASIC's CLEAR does only with values under 768 bytes.
1860   LOCAL sign,n
1870   LET sign=SGN (bytes),bytes=ABS (bytes)
1880   FOR n=1 TO INT (bytes/767)
         CLEAR 767*sign
       NEXT n
       CLEAR MOD(bytes,767)*sign
1890 END PROC

1900 DEF PROC allocate bytes, REF address
1910   REM Lower the RAMTOP to get the specified bytes of free space, and return its address
1920   REM In Beta BASIC Newsletter #2, page 3, there is an example how to calculate the address.
1930   LOCAL oldRamtop
1940   LET oldRamtop=DPEEK(sysRAMTOP),bytes=ABS (bytes)
1950   superclear bytes
1960   LET address=oldRamtop-bytes+2
1970 END PROC

1980 DEF PROC deallocate bytes
1990   REM Upper the RAMTOP to remove the specified bytes of free space.
2000   superclear -ABS (bytes)
2010 END PROC

Este es el código que se ocupa de los juegos de caracteres:

2030
     REM Fonts

2040 DEF PROC setupFont
2050   allocate 768,fontAddress
       LOAD d*"alien.font"CODE fontAddress
       DPOKE sysCHARS,fontAddress-256
2060 END PROC

2070 DEF PROC resetFont
2080   superclear -768
2090   DPOKE sysCHARS,15360
2100 END PROC

Todo parece estar bien, pero la carga del juego de caracteres en la dirección de la zona reservada parece sobreescribir algo del propio Beta BASIC porque el sistema queda corrompido y la computadora termina por reiniciarse. Para terminar Alien-B queda resolver esta cuestión y alguna otra cosa secundaria. Entonces retomaré el desarrollo de Inebriated Day donde lo dejé antes del «cisma».

Para meterse en estos líos hace falta tiempo. Sí. Tiempo para izar banderas que pocos reconocerán; tiempo para programar juegos para computadoras antiguas con que pocos jugarán; tiempo para escribir textos que pocos leerán...

En los últimos 300 años, desde el aparentemente luminoso preludio de la Revolución Industrial, y de forma desbocada en la segunda mitad del siglo XX, con el diseño de una sociedad basada en la obsolescencia técnica programada, en la satisfacción irracional de necesidades inexistentes, en hábitos cotidianos contranaturales, en formas de trabajo alienantes y en la esquilmación sistemática de cuanto nos rodea en búsqueda del mayor beneficio y comodidad materiales inmediatos sin pensar en las consecuencias, hemos creado una escala de valores probablemente única en la Historia, entre los cuales la falta de tiempo ocupa uno de los primeros puestos: Nunca antes como en esta época había estado tan bien visto decir no tengo tiempo o estoy muy ocupado... Di eso en esta época y serás tenido por persona responsable e interesante; di lo contrario, que tienes tiempo incluso para regalar, y serás tenido por vago e irresponsable.

El siguiente texto lo he extraído de la página 76 del número 92 de la revista Integral, de agosto de 1987 (aún en la primera y mejor época de la publicación); forma parte de un interesante artículo titulado El automóvil. La plaga del siglo XX, pero puede aplicarse a muchas otras máquinas, incluidas las computadoras:

Es cierto que algunas máquinas ahorran tiempo, pero, curiosamente, nadie puede decir dónde está el tiempo ahorrado; es decir, el proceso de producción de la sociedad actual ya cuenta con el ahorro de tiempo, y en ese tiempo pone a trabajar también a la persona. Paradójicamente, el hombre contemporáneo, a pesar de disponer de un sinfín de medios técnicos para ganar tiempo, posee mucho menos tiempo para hacer las cosas que sus predecesores.

Para ganar tiempo, por ejemplo, no sirve de nada comprar la computadora más rápida que haya en el mostrador de la tienda sino, por el contrario, saber usar bien una computadora más antigua, más lenta, muchísimo más barata; tampoco sirve de nada tener el último programa comercial que acaba de salir a la venta sino, por el contrario, conocer bien otras opciones, libres, gratuitas y compartidas. Son sólo dos pinceladas.

Últimamente topé en la red con dos interesantes proyectos relacionados con el lenguaje de programación Forth, mi favorito, cuyos autores son también, sospecho, además de idealistas y aventurados, sabios en tiempo: GCForth de Roger Mark Levy y R4 de Pablo Reda. En otra ocasión los comentaré; si no lo hago ahora no es por falta de tiempo.

Páginas relacionadas

Alien-B
Juego de invasores escrito en Beta BASIC para ZX Spectrum 128.
Manuales de Beta BASIC; compilando Linux 2.6.32; el renacimiento de xAce
Apuntes dispersos de un (retro)programador. 20 de mayo de 2010.
Juego de caracteres en Beta BASIC; problemas con causa
Apuntes dispersos de un (retro)programador. 17 de octubre de 2010.