Sideras Spectrum

Sideras Spectrum es una versión de Sideras para la ZX Spectrum, escrita en Abersoft Forth. Es una adaptación tan fiel que adolece del mismo error que el original: No está escrita pensando en Forth; me limité a adaptar el código de un dialecto de Forth a otro. Mirando ahora el código que sigue y viendo su pobre estilo siento ganas de reescribirlo desde cero con el estilo de Forth... Pero lo único que he hecho es un par de retoques cosméticos y corregir alguna errata.

Hay algunos detalles interesantes para comentar sobre la adaptación de Ace Forth a Abersoft Forth, pues aparte de algunas diferencias en el lenguaje en sí, lógicamente las palabras relacionadas con cada máquina son diferentes (gráficos, pantalla, sonido y variables del sistema):

Listado


( Sideras Spectrum )
( Written in Abersoft Forth for the Sinclair ZX Spectrum )
( Based on "Sideras", written by unknown author in Ace Forth for the Jupiter Ace )

( Copyright [C] 1985,2009 Marcos Cruz, http://programandala.net )
( License: http://programandala.net/license )

( 1985-08-25 First version. )
( 2009-06-07 Some little changes. )

: TASK ;

23670 CONSTANT SEED

: RND
	SEED @ 75 U* 75 0 D+ OVER OVER U< - -
	1 - DUP SEED ! U* SWAP DROP
;

: RANDOM  23672 @ SEED !  ;

: DEF  8 * UDG + DUP 8 + SWAP DO I C! LOOP  ;

0 VARIABLE X
0 VARIABLE VELOCIDAD
0 VARIABLE CONTADOR

: K=  INKEY = ;

: IZQ
	X @ 0 > 49 K= AND 
	IF -1 X +!
	THEN
;

: SIDERAS
	21 20 RND AT
	CONTADOR @ 200 <
	IF   ."  *         *"
	ELSE 124 EMIT 8 SPACES 124 EMIT
	THEN
	CR CR
;

: IMPACTO?  11 X @ SCREEN 32 >  ;

: ACELERADOR
	CONTADOR @ 5 MOD 0=
	VELOCIDAD @ 10 > AND
	IF -1 VELOCIDAD +!
	THEN
;

: CRASH
	10 1000 BLEEP
	CR CR ." HA RECORRIDO " CONTADOR ? ." PARSECS" QUIT 
;

: DER
	X @ 30 < 48 K= AND
	IF  1 X +!
	THEN
;

: INIC  
	0 DUP PAPER BORDER 7 INK CLS 
	0 CONTADOR !  50 VELOCIDAD !
	24 60 102 255 231 195 129 DUP 0 DEF
;

: RUN
	INIC
	BEGIN
		10 X @ OVER 1 - OVER AT SPACE AT SPACE
		DER IZQ
		10 X @ AT 144 EMIT
		ACELERADOR 
		10 RND 10 + VELOCIDAD @ BLEEP
		IMPACTO?
		IF CRASH
		THEN
		SIDERAS 
		1 CONTADOR +!
		12 K=
	UNTIL
;


Descarga

El código fuente que ofrezco es un fichero de texto simple creado a partir de un antiguo listado de impresora. No es directamente utilizable por la ZX Spectrum; para ejecutarlo habría que teclearlo en Abersoft Forth con su propio editor.

Precisamente para convertir textos fuente de Forth en ficheros TAP legibles en un emulador de ZX Spectrum estoy escribiendo el programa Ftaper.

Páginas relacionadas