Sideras

Descripción del contenido de la página

Un juego escrito en Ace Forth para la computadora Jupiter Ace.

Etiquetas:

Me encanta la retroprogramación, la retrocomputación... Es una delicia asomarse de vez en cuando a los viejos tiempos en que los programas y las computadoras eran mucho más sencillos. Entonces una sola persona aún era capaz de escribir un sistema operativo completo, como el de la ZX Spectrum o el de la Jupiter Ace. O construir una de aquellas máquinas, desde cero, con piezas sueltas. Y por supuesto cada octeto era muy importante y había que usarlo sabiamente.

Entre mis viejos papeles he encontrado unos programas para la Jupiter Ace que debí de copiar de alguna revista. Uno de ellos es el que muestro en esta página: Sideras. Al contrario de lo que es mi costumbre no anoté la fecha ni la fuente. Fue antes de agosto de 1985 porque esa es la fecha en que escribí una versión de Sideras en Abersoft Forth para la ZX Spectrum. Tampoco está anotado el nombre del autor; probablemente sea José Femenías Cañuelo, de quien son los otros programas similares que conservo: Frontón y Chocar.

El programa Sideras está escrito para una Jupiter Ace estándar con 3 KiB de RAM (de los cuales menos de uno queda disponible para el diccionario de Forth, es decir, para nuestros programas). Una anotación en el listado informa de que el programa compilado ocupa 704 octetos.

El código de Sideras hace sospechar que se trata de una adaptación de un juego en BASIC, por ejemplo de la Sinclair ZX81. El motivo es que no está escrito con el estilo propio de Forth; de hecho un ejemplo tomado del programa me ha servido de inspiración para mi artículo Programar en Forth con el estilo de Forth.

En cualquier caso el autor tiene el gran mérito de mostrar cómo puede escribirse un juego entretenido en 704 octetos, para una máquina con grandes limitaciones incluso para su época.

Aparte de la versión para ZX Spectrum ya mencionada, también escribí para la Jupiter Ace una versión mejorada del juego: Siderator.

Transcribo a continuación el código de Sideras tal como lo copié en su día, incluidos los comentarios de su desconocido autor. Los únicos cambios que he hecho son corregir alguna errata y pasar todas las palabras de Forth a minúsculas (así se lee mejor; por fortuna Ace Forth no hace distinción entre mayúsculas y minúsculas, al contrario que el Abersoft Forth de la ZX Spectrum).

Código fuente

0 variable x
0 variable velocidad
0 variable contador
0 variable seed

: seedon
    seed @ 75 u* 75 0 d+
    over over u< - -
    1- dup seed !
;

: rnd
    seedon u* swap drop
;

: k=  inkey = ;

: izq
    x @ 0 > ascii 5 k= and
    if
        x @ 1- x !
    then
;

: sideras
    22 20 rnd at
    contador @ 200 <
    if   ."  *         *"
    else ."  I         I"
    then
    cr cr
;

: impacto?
    15388 @ 31 + c@ dup ascii * = swap ascii I = or
;

: acelerador
    contador @ 5 mod 0=
    velocidad @ 10 > and
    if
        velocidad @ 1- velocidad !
    then
;

: crash
    30 0
    do
        i 3 * 10 + 10 beep
    loop
    100 300 beep
    cr cr ." Fin del trayecto"
    cr ." Ha recorrido " contador @ . ." parsecs"
;

: der
    x @ 30 < ascii 8 k= and
    if
        x @ 1+ x !
    then
;

: pp
    invis cls
    0 contador !
    50 velocidad !
    begin
        10 x @ over 1- over at ."  " at ."  "
        der izq
        10 x @ at ." V"
        acelerador
        100 rnd 10 + velocidad @ beep
        impacto?
        if
            crash quit
        then
        sideras
        contador @ 1+ contador !
        0
    until
;

Anexo

El autor incluye una versión alternativa de la palabra izq para que la máquina juegue sola:

: izq
  x @ 0 > ascii 5 k= and impacto? or
  if
    x @ 1- x !
  then
  x @ 0 <
  if
    30 x !
  then
;

Explicación de las palabras

Explicación de las variables

Descargas

El fichero FS contiene el código fuente en formato de texto simple. Se puede usar en cualquier emulador de Jupiter Ace que acepte como entrada de teclado un fichero de texto. El fichero DIC es una variante del formato TAP usada por el emulador xAce.

Páginas relacionadas

Sideras Spectrum
Juego escrito en Forth para la computadora Sinclair ZX Spectrum.
Siderator
Juego escrito en Ace Forth para la Jupiter Ace.