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.

En su día hice una versión de este juego para la ZX Spectrum. Y, con bastantes octetos más, escribí también mi propia 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).

Listado





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

Descarga

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.

URL: http://programandala.net/es.programa.sideras

Página publicada en 2009-06-06 13:47 CEST
Última modificación realizada en 2010-03-04T11:21:29+01:00