Nuclear Invaders para ATARI XL/XE

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Nuclear Invaders para ATARI XL/XE

Mensajepor dancresp » 30 Abr 2015, 12:36

InGame.jpg
InGame.jpg (71.44 KiB) Visto 12075 veces


EL JUEGO
Vuelven los invasores del espacio !!!

En el año 1977 intentaron invadir las ciudades de la tierra, y fracasaron.
Ahora vuelven con un malvado plan: destruir las centrales nucleares para dejar el planeta inhabitable.
Con la ayuda de nuestro tanque debemos evitar que cumplan con su objetivo.

Cada nivel lo componen 30 invasores, y al superarlo aparecerá una central más grande y los invasores deberán recorrer menos distancia para llegar a ella.

Destruye el UFO que aparece por la parte superior para conseguir puntos extras.

Pulsa el disparo del joystick 1 en la pantalla de presentación para empezar la partida.


BLOQUES
He dividido el listado en 14 bloques:

- Declaración de las matrices.
- Control de nuestro tanque.
- Control de nuestro disparo.
- Mover UFO.
- Mover invasor.
- Destruir enemigo ó UFO.
- Perder una vida.
- Pasar Nivel.
- Presentación.
- Mostrar pantalla de juego.
- Cargar gráficos.
- Inicializar variables y matrices del juego.
- Rutinas varias.
- Bloques de gráficos.


COMO FUNCIONA
Todo el programa ocupa 81 líneas de código.

A continuación indico el principio de las distintas partes del programa:
10 - Definimos las matrices del juego.
30 – Llamada a rutinas para leer gráficos (3000), mostrar la presentación(2000).
100 – Comprobamos si se ha de mover nuestro tanque, mostrándolo en la nueva posición.
130 – Si hay un disparo en pantalla lo movemos, sino miramos si se ha pulsado disparo (RETURN).
170 – Si hay un UFO en pantalla lo movemos, sino decrementamos el contador (W).
200 – Rutina de movimiento de invasores. Se mueve uno distinto en cada pasada. Primero miramos si todavía hay invasores en la posición correspondiente (3 por posición), sino hay, salimos. Si tiene alguna velocidad asignada lo movemos, y sino mediante un número aleatorio decidimos si se ha de empezar a mover. Durante el movimiento cambiamos su animación y miramos si ha llegado a la central nuclear.
250 – Contador del próximo invasor a mover (M).
260 – Si no se han destruido todos los invasores (T) volvemos a la línea 100, y si no quedan seguimos hasta 300.
300 - Código de pasar nivel. Se ejecuta cuando destruimos los 30 invasores. Se incrementa el control de dificultad (C) que indicará la anchura de la central nuclear.
400 – Esta rutina se ejecuta cuando el disparo detecta que ha tocado algo (en 160). Aquí se calcula si se ha tocado un invasor o el UFO y actúa en consecuencia. En 410 se destruye un invasor y en 450 se destruye el UFO.
500 – Rutina que se ejecuta cuando un invasor llega a la central nuclear. Se reproduce un sonido y se borra una vida. Si quedan vidas volvemos a empezar el nivel y sino vamos a la pantalla de presentación después de una pausa.
2000 – Pantalla de presentación del juego.
2100 – Borrado de la pantalla de presentación. Mensaje al jugador uno para que esté listo y se dibuja la central nuclear.
2800 – Posiciona y muestra a los invasores y nuestro tanque en pantalla. Reinicia el valor de ciertas variables.
3000 – Cargamos los gráficos desde las líneas DATA a la VRAM. Primero se cargan los SPRITES y después los UDG.
5000 – Rutinas varias usadas en distintas partes del juego.
9000 – Datos de los gráficos UDG del juego.


EL LISTADO

Código: Seleccionar todo

  10 DIM X(10),Y(10),Q(10),S(10),I$(66),E$(4),A$(12),B$(12),C$(16),X$(4),S$(4),G(5),V$(8)

  30 GOSUB 3000:GOTO 2000
   
     *** Mover tanque
 100 IF STICK(0)=11 THEN IF H>3 THEN H=H-1:POSITION H,21:PRINT "opq "
 110 IF STICK(0)=7 THEN IF H<34 THEN POSITION H,21:PRINT " opq":H=H+1

     *** Control disparo
 130 IF D THEN 150
 140 IF STRIG(0)=1 THEN 170
 145 D=21:G=H+1:Z=121:GOSUB 5300
 150 LOCATE G,D,F:IF F=122 THEN POSITION G,D:PRINT " "
 155 IF D=3 THEN D=0:GOTO 170
 160 D=D-2:LOCATE G,D,F:IF F<>32 THEN 400
 165 POSITION G,D:PRINT "z"

     *** Control UFO
 170 IF U=0 THEN W=W-1:IF W THEN 200
 180 IF U<36 THEN U=U+1:POSITION U,3:PRINT " mn":GOTO 200
 190 POSITION U,3:PRINT "   ":U=0:W=200

     *** Control invasores
 200 IF Q(M)=0 THEN 250
 210 IF S(M) THEN 240
 215 IF RND(0)<0.6 THEN 250
 220 S(M)=(INT(RND(0)*2)+1)/2:IF M>5 THEN S(M)=-S(M)
 230 GOTO 250
 240 F=M*6+A*3:X(M)=X(M)+S(M):POSITION X(M),Y(M):PRINT I$(F,F+2):IF ABS(19-X(M))<E THEN 500
 250 M=M+1:IF M>10 THEN M=1:A=NOT A
 270 IF T THEN 100

     *** Pasar nivel
 300 I=300:GOSUB 5100:N=19:GOSUB 5200:IF C<4 THEN C=C+1
 310 GOTO 2500

     *** ¿Que toca el disparo? (410=Invasor / 450=UFO)
 400 IF D=3 THEN 450
 405 F=(D-3)/2:IF F>5 THEN POSITION G,D:PRINT "u";:D=0:GOTO 170
 410 I=ABS(G>20):K=F+I*5:POSITION X(K),Y(K):PRINT E$(I+1,I+3):S(K)=0:Q(K)=Q(K)-1
 420 P=P+G(F):T=T-1:POSITION X(K),Y(K):PRINT "   "
 430 X(K)=I*35+1:Z=81:GOSUB 5300:GOTO 470
 450 U=U+1:POSITION U,3:PRINT "rs":F=INT(RND(0)*3+1)*50:P=P+F:I=30:GOSUB 5100
 460 POSITION U,3:PRINT STR$(F);" ":GOSUB 5100:Z=101:GOSUB 5300: Z=91:GOSUB 5300
 465 POSITION U,3:PRINT "   ":U=0:W=200
 470 D=0:N=4:I=P:GOSUB 5000:GOTO 170
     
     *** Perder vida / Fin partida
 500 FOR Z=81 TO 121:GOSUB 5300:NEXT Z
 510 IF L=0 THEN 540
 520 F=(3-L)*2+1:POSITION 3,23:PRINT STR$(L);" ";V$(F,F+3);
 530 N=19:GOSUB 5200:GOTO 2500
 540 POSITION 15,17:PRINT "GAME  OVER":I=1000:GOSUB 5100:N=20:GOSUB 5200:PRINT "  ";:IF R<P THEN R=P

     *** Pantalla presentación
2000 POSITION 2,0:PRINT "SCORE<1>      HI-SCORE      SCORE<2>"
2010 N=4:I=P:GOSUB 5000:N=18:I=R:GOSUB 5000
2030 POSITION 5,23:PRINT V$(1,4);:POSITION 28,23:PRINT "CREDIT 00";
2040 POSITION 18,5:PRINT "PLAY":POSITION 12,7:PRINT "NUCLEAR INVADERS"
2050 POSITION 8,11:PRINT "*SCORE ADVANCE TABLE*"
2060 POSITION 13,13:PRINT "mn =? MYSTERY":POSITION 13,15:PRINT "cd =30 POINTS"
2070 POSITION 13,17:PRINT "gh =20 POINTS":POSITION 13,19:PRINT "kl =10 POINTS"
2090 IF STRIG(0)=1 THEN 2080

     *** Inicio partida: Zona de juego
2100 N=17:GOSUB 5200:POSITION 14,12:PRINT "PLAY PLAYER<1>":P=0:L=3:C=1
2110 I=20:FOR F=1 TO 10:POSITION 4,1:PRINT "    ":GOSUB 5100
2120 POSITION 4,1:PRINT "0000":GOSUB 5100:NEXT F:N=12:GOSUB 5200
2130 POSITION 2,22:PRINT "tttttttttttttttttttttttttttttttttttt":PRINT " 3";
2500 E=(C*2+6)/2:POSITION 18-C,4:PRINT C$(1,C*2+4):POSITION 18-C,15:PRINT C$(1,C*2+4)
2510 FOR F=5 TO 13 STEP 2:POSITION 18-C,F:PRINT A$(1,C*2+3);"u":POSITION 18-C,F+1:PRINT B$(1,C*2+3);"u":NEXT F

     *** Inicio partida: Mostrar invasores y tanque
2800 FOR F=1 TO 5:Y(F)=F*2+3:Y(F+5)=Y(F):X(F)=1:X(F+5)=36:NEXT F
2810 FOR F=1 TO 10:POSITION X(F),Y(F):PRINT I$(F*6,F*6+2):Q(F)=3:S(F)=0:NEXT F
2820 POSITION 3,21:PRINT "opq":H=3:M=1:D=0:U=0:W=200:T=30:A=0:J=1:GOTO 100

     *** Lectura de gráficos e inicializar variables globales
3000 POKE 106,PEEK(106)-5:GRAPHICS 0:POSITION 8,11:PRINT "(C) SCAINET SOFT, 2015 ";
3005 POKE 710,0:POKE 709,14:POKE 712,1:POKE 752,1
3010 UDG=(PEEK(106)+1)*256:FOR I=0 TO 775:POKE UDG+I,PEEK(57344+I):NEXT I:POKE 756,UDG/256
3015 FOR F=UDG+776 TO UDG+999:READ I:POKE F,I:NEXT F
3020 I$="      cd ab gh ef gh ef ij kl ij klcd ab gh ef gh ef ij kl ij kl "
3025 A$="uvwvwvwvwvw":B$="uxyxyxyxyxy":C$="uuuuuuuuuuuu":E$=" rs "
3030 G(1)=30:G(2)=20:G(3)=20:G(4)=10:G(5)=10:R=0:V$="@|@|    "
3035 RETURN

     *** Rutinas varias (5000=Marcador / 5100=Pausa / 5200=Borrar Pantalla)
5000 X$=STR$(I):S$="0000":K=LEN(X$):S$(5-K,4)=X$:POSITION N,1:PRINT S$:RETURN
5100 FOR N=1 TO I:NEXT N:RETURN
5200 POSITION 2,3:FOR F=1 TO N:PRINT "                                      ":NEXT F:RETURN
5300 SOUND 0,Z,10,15:I=10:GOSUB 5100:SOUND 0,0,0,0:RETURN

     *** Gráficos UDG
9000 DATA 1,3,7,13,15,5,8,4,128,192,224,176,240,160,16,32
9005 DATA 1,3,7,13,15,2,5,10,128,192,224,176,240,64,160,80
9010 DATA 8,36,47,59,63,31,8,16,32,72,232,184,248,240,32,16
9015 DATA 8,4,15,27,63,63,40,6,32,64,224,176,248,248,40,192
9020 DATA 3,31,63,57,63,14,25,12,192,248,252,156,252,112,152,48
9025 DATA 3,31,63,57,63,6,13,48,192,248,252,156,252,96,176,12
9030 DATA 0,7,31,63,109,255,57,16,0,224,248,252,182,255,156,8
9035 DATA 0,0,0,7,15,15,15,15,16,56,56,255,255,255,255,255,0,0,0,224,240,240,240,240
9040 DATA 4,34,16,8,96,4,18,36,34,136,16,32,12,32,144,72
9045 DATA 0,0,0,0,0,255,0,0,251,251,251,0,223,223,223,0
9050 DATA 3,28,35,32,33,35,33,32,224,28,226,2,194,226,194,130
9055 DATA 37,47,46,38,32,28,3,0,82,122,58,50,2,28,224,0,0,16,16,16,16,16,0,0
9060 DATA 1,3,3,127,255,255,255,255,0,128,128,252,254,254,254,254


APUNTES FINALES
Después de las versiones para DRAGON-32, MSX, ORIC-1, JUPITER ACE, ZX-SPECTRUM, AMSTRAD CPC, CAMPUTERS LYNX y CP/M-86 le ha tocado el turno al ATARI XL/XE. La novena versión.Para empezar, decir que creo que este es un juego ideal para hacer versiones para distintos sistemas y poder sacar unas buenas conclusiones respecto al rendimiento de los distintos intérpretes de BASIC (o FORTH para el JUPITER ACE).Para esta versión he partido de la versión del AMSTRAD CPC, y si se consultan los dos listados se verá que los programas son prácticamente idénticos, excepto por las instrucciones de posición en pantalla (POSITION en lugar de LOCATE), uso del joystick 1 en lugar de teclado y comandos de sonido.Debido a la estructura de la pantalla en modo texto, muy similar al ORIC-1, en el que las dos columnas de la izquierda están reservadas por el sistema, he optado por encoger un poco la presentación en pantalla perdiendo una columna en
cada lado.

Este BASIC admite el uso de matrices numéricas, pero no matrices de texto, y la instrucción DIM lo único que hace es dimensionar el tamaño de la variable. Para poder gestionar el tema de las animaciones de los invasores he cogido una parte de código de la versión del CAMPUTERS LYNX, ya que ese sistema tiene el mismo problema.

Para esta versión los gráficos vuelven a ser los mismos de las versiones anteriores, excepto la del ORIC y la del CAMPUTERS LYNX.
Para detectar si el disparo impacta con algún elemento de la pantalla he usado la instrucción “LOCATE X,Y,C”, donde X e Y son las coordenadas en pantalla y F es la variable donde se almacena el carácter que hay en esa posición. Decir que ésta instrucción tiene el “detalle” de borrar el contenido de la posición que se examina. Absurdo.

El control se realiza con el joystick en el puerto 1, ya que hay varias instrucciones para consultar el estado, pero con pequeños cambios se le podría hacer funcionar con el teclado. De todas formas, le he conectado el joystick original de la ATARI 2600 y la sensación es fantástica…

El sonido de este equipo tiene muchas posibilidades, y de una forma bastante sencilla se pueden hacer efectos más que decentes. Yo soy un inútil y me he limitado a hacer que reproduzca distintos tipos de pitidos.

En resumen, el ATARI-BASIC no está nada mal, y la verdad es que con algunas limitaciones, tiene un buen rendimiento. Diría que incluso un poco por encima de la media.

Redefiniendo los caracteres del ATARI
El principal problema que tuve cuando desarrolle la versión del “Space Invasion” fue como hacer para conseguir redefinir los UDG del sistema. En principio están en ROM y no hay comandos que lo permitan.

Buscando por internet encontré un sencillo código en BASIC que modifica la variable del sistema que indica donde está el CHARSET, para que apunte a la RAM, y a continuación se copia el contenido del CHARSET desde la ROM a la RAM (línea 3010) y se cargan los nuevos valores a partir de líneas DATA (línea 3015).

Por mi parte, modifiqué esta rutina para que copie el CHARSET original solo hasta el carácter anterior al que quiero redefinir, y a continuación cargo mis propios UDG. De esta forma es más rápido, a pesar de que tarda unos 10 segundos.

Con todo hay un pequeño problema, y es que si se ejecuta el programa una segunda vez cuando los gráficos ya están redefinidos, la pantalla llena de basura. Para evitarlo hay que pulsar el botón RESET, que provoca la detención del programa, pero no se borra el contenido de la memoria. La primera vez provoca respeto, pero al ver que no pasa nada… se hace.

Desktop.jpg
Desktop.jpg (108.15 KiB) Visto 12075 veces


Para terminar, todo el desarrollo se ha programado en un ATARI 600-XL real con 16 KB, usando una unidad de casete como soporte de almacenamiento.

Os invito a probarlo.

Presentacion.jpg
Presentacion.jpg (66.73 KiB) Visto 12075 veces

InGame2.jpg
InGame2.jpg (81.22 KiB) Visto 12075 veces

InGame.jpg
InGame.jpg (71.44 KiB) Visto 12075 veces
Última edición por dancresp el 30 Abr 2015, 17:16, editado 1 vez en total.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
XeNoMoRPH
MSX Turbo R
MSX Turbo R
Mensajes: 281
Registrado: 17 Feb 2015, 19:22
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
consola_favorita: Turbografx/PC Engine
Primera consola: Sony PlayStation 2
Ubicación: Burgos
Gracias dadas: 113 veces
Gracias recibidas: 35 veces
Contactar:

Re: Nuclear Invaders para ATARI XL

Mensajepor XeNoMoRPH » 30 Abr 2015, 12:50

Fantástico trabajo ... ¿ que versión de todas es la que mas fluida va ... ?

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: Nuclear Invaders para ATARI XL

Mensajepor dancresp » 30 Abr 2015, 12:59

XeNoMoRPH escribió:Fantástico trabajo ... ¿ que versión de todas es la que mas fluida va ... ?

La versión BASIC más rápida es la de Amstrad CPC, la más suave es la de MSX gracias al uso de sprites y la más rápida en general es la del Jupiter ACE gracias a la potencia del FORTH.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
XeNoMoRPH
MSX Turbo R
MSX Turbo R
Mensajes: 281
Registrado: 17 Feb 2015, 19:22
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
consola_favorita: Turbografx/PC Engine
Primera consola: Sony PlayStation 2
Ubicación: Burgos
Gracias dadas: 113 veces
Gracias recibidas: 35 veces
Contactar:

Re: Nuclear Invaders para ATARI XL

Mensajepor XeNoMoRPH » 30 Abr 2015, 13:06

dancresp escribió:
XeNoMoRPH escribió:Fantástico trabajo ... ¿ que versión de todas es la que mas fluida va ... ?

La versión BASIC más rápida es la de Amstrad CPC, la más suave es la de MSX gracias al uso de sprites y la más rápida en general es la del Jupiter ACE gracias a la potencia del FORTH.


Gracias .. has dejado bien a mi Amstrad CPC querido =D> =D>

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: Nuclear Invaders para ATARI XL

Mensajepor dancresp » 30 Abr 2015, 13:14

XeNoMoRPH escribió:Gracias .. has dejado bien a mi Amstrad CPC querido =D> =D>

No deja de ser curioso que dos sistemas que tienen un acceso a pantalla realmente patético (por lento), como el Amstrad CPC y el Camputers Lynx sean los que tienen las versiones más rápidas.

La versión de Amstrad CPC es la única en BASIC que he tenido que "frenar" porque iba demasiado rápida.

De todas formas, todavía no he programado la versión del BBC-Micro... ese gana de calle seguro.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 443
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 162 veces
Contactar:

Re: Nuclear Invaders para ATARI XL

Mensajepor explorer » 30 Abr 2015, 18:18

dancresp escribió:Con todo hay un pequeño problema, y es que si se ejecuta el programa una segunda vez cuando los gráficos ya están redefinidos, la pantalla llena de basura.

El problema está en la línea 3000.

Cada vez que ejecutas el programa estás reduciendo el tope de la memoria RAM en 5 páginas:

POKE 106,PEEK(106)-5

Al hacer el GRAPHICS 0, la pantalla se posiciona más atrás. Más tarde, copias los datos de los gráficos en UDG, que está apuntando a la dirección de la segunda página reservada

UDG=(PEEK(106)+1)*256

Llega un momento en que la dirección apuntada por 106 cubre la RAM ocupada por la pantalla, y por eso vemos basura. Mejor dicho, no es basura. Es posible que sea parte de la RAM ocupada por tu propio código :)

Una solución sería la de copiar los gráficos a la página 6 de la RAM (a partir de la dirección 1536), pero ahí solo caben 256 bytes, que es menor que el 1K necesario para un juego de caracteres completo. Pero sí se puede usar para indicar que hemos hecho la reserva de memoria.

Entonces, el programa lo primero que debe hacer es ver qué valor hay en la posición 1536. Si es 0, es que no se ha hecho la reserva de memoria, por lo que hay que hacerla. Y luego poner ahí un valor distinto de 0 para indicar que ya está hecha. Se podría guardar ahí, por ejemplo, el propio valor de 106 ajustado.

Otra opción es colocar los datos por debajo de APPMHI (14,15), y ajustarlo, para que la pantalla no lo pise.

http://www.atariarchives.org/mapping/memorymap.php

Hay más opciones, claro. Una muy interesante es la reservar espacio (2K) por medio de un DIM. Sacar su dirección de inicio con ADR(). Ajustar esa dirección para que sea múltiplo de 256 (exigencias del hardware que pinta los caracteres) y colocar allí los bytes de los UDG.

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: Nuclear Invaders para ATARI XL/XE

Mensajepor dancresp » 30 Abr 2015, 20:49

Gracias explorer, como decía Mike Hammer... "Tomaré nota", porque la explicación tiene toda su lógica. =D>

En principio es un tema más molesto a la hora de desarrollar el juego, que no al jugarlo ya que no deberías ir al BASIC...

Para otra ocasión aplicaré algún método para que si los gráficos ya están redefinidos, no lo vuelva a hacer.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Nuclear Invaders para ATARI XL/XE

Mensajepor radastan » 02 May 2015, 19:28

Me he enamorado de tu escritorio. Y ese 600 XL es precioso.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: Nuclear Invaders para ATARI XL/XE

Mensajepor dancresp » 02 May 2015, 20:59

radastan escribió:Me he enamorado de tu escritorio. Y ese 600 XL es precioso.

Hecho a medida para no desperdiciar ni un centímetro, con estas manitas... \:D/

Y cierto, todos los ATARI de 8 bits son preciosos, excepto los XE (para mi gusto, claro)... :-ss

Y el tacto de su teclado es muy especial, excepto los XE y los ST (para mi gusto, claro)... :-ss
Buscando la IP de la W.O.P.R.

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 443
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 162 veces
Contactar:

Re: Nuclear Invaders para ATARI XL/XE

Mensajepor explorer » 03 May 2015, 19:20

Cuando tenía en casa el 800 XL, un día vino un amigo que tenía ZX Spectrum.

Cuando me vio reeditar un programa en BASIC, alucinaba. Decía que iba a velocidad de fórmula 1 :D

Se refería a que podías subir con el cursor a la línea, modificarla, y pulsar el Enter, en lugar de hacerlo como en el Spectrum, que tienes que decir qué línea quieres reeditar. Y aparte, le llamó la atención que se pudieran abreviar los comandos para escribir el código más rápido (R. por REM, F. por FOR, N. por NEXT, L. por LIST, y así).


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados