Aqua-LOGO para Mattel Aquarius

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

Aqua-LOGO para Mattel Aquarius

Mensajepor dancresp » 22 Abr 2015, 23:31

20150419_231304.jpg
20150419_231304.jpg (181.02 KiB) Visto 3913 veces


EL PROGRAMA
Este programa es un pequeño intérprete de lenguaje LOGO, listo para ser ejecutado en la versión básica del Mattel Aquarius.
Controlamos una tortuga que se mueve por la pantalla según los comandos que le indicamos.

Los comandos se pueden introducir de uno en uno, o varios a la vez. Tanto los comandos como los valores numéricos deben ocupar dos caracteres, y deben estar separados por un espacio.

Para reiniciar el intérprete y borrar el contenido de la pantalla se debe pulsar ENTER con la línea de comandos vacía.

Esta versión de LOGO reconoce los siguientes comandos:

SUbir
Sube la tortuga y no dibuja nada mientras se mueve.

BAjar
Baja la tortuga y dibuja mientras se mueve. Activado por defecto.

DErecha grados
Gira la tortuga a la derecha el número de grados indicados.

IZquierda grados
Gira la tortuga a la izquierda el número de grados indicados.

AVanza pasos
La tortuga avanza el número de pasos indicado.

>> pasos
Incrementa el último número de pasos realizados en la cantidad indicada.

REpite veces
Repite las siguientes instrucciones el número de veces indicado.
Solo puede haber una repetición por línea de comandos.


Ejemplos:
Dibujar un cuadrado en pantalla:
RE 04 AV 10 DE 90

Dibujar una espiral:
AV 01 RE 20 IZ 90 >> 01

Dibujar un círculo:
RE 36 AV 02 DE 10

Comentarios y recomendaciones:
- Los valores numéricos deben tener dos cifras, o una cifra y un espacio.
- Para valores numéricos superiores a 99 se deberán añadir dos comandos que sumen el valor deseado.
- Los comandos deben tener dos caracteres aunque solo se tiene en cuenta el primero.
- El contenido de la pantalla se conserva durante la ejecución de los distintos comandos.


BLOQUES
He dividido el listado en 3 bloques:

- Inicializar variables principales.
- Procesar la línea de comandos.
- Ejecutar el comando LOGO.


COMO FUNCIONA
A continuación detallo, línea por línea, el funcionamiento del programa.

Se utilizan las siguientes variables:
U – Variable que contiene el valor “1”.
X – Posición horizontal de la tortuga.
Y – Posición vertical de la tortuga.
D – Posición de la tortuga (0 – Arriba, 1 – Abajo).
M – Dirección de la tortuga.
C – Valor del comando REpite.
E – Posición de retorno del comando REpite.
P – Posición en la línea de comandos.
N – Valor del valor numérico de un comando.
F – Control de bucles y otros.
A – Posición X durante el PSET. También se usa como variable auxiliar para calcular el giro de la tortuga.
B – Posición Y durante el PSET. Al finalizar guarda el número de pasos realizados.
A$ - Variable donde se guarda la línea que se está procesando.

El programa ocupa un total de 40 líneas:
4 – Inicializamos las principales variables y declaramos el valor de PI.
8 – Borramos la pantalla y ponemos un punto indicando donde está la tortuga.
10 – Introducimos una línea de comandos en A$, y comprobamos que se ha escrito algo. Sino vuelve a la línea 8.
14 – Inicio del bucle que intenta reconocer el comando a ejecutar.
16 – Comprueba la primera línea del comando, y si lo localiza se guarda el valor de “I” en “F” y acaba el bucle.
18 – Final de bucle que reconoce los comandos.
20 – Si el ID del comando es igual o superior de 3 incrementa el valor de “P”, y en “N” el valor del comando.
26 – Saltamos a una línea en función del valor de “F”.
28 – Se incrementa “P” y si su valor es inferior a la longitud de “A$” vuelve a la línea 14.
30 – Se decrementa “C”, que controla las repeticiones de comandos, y si es inferior a 1 es que ha finalizado la repetición.
34 – Asignamos a la variable “P”, usada por el bucle que revisa la línea de comandos, el punto donde debe volver.
36 – Saltamos a la línea 14 para continuar con el bucle.
100 – Guardamos en “D” el estado de la tortuga. Si “F=1” baja y sino sube.
102 – Volvemos de la subrutina.
200 – Guardamos en “A” el giro a realizar, y si “F=3” se cambia el signo de “A”.
204 – Restamos a “M” el giro a realizar, dando como resultado un valor de 360 grados.
206 – Volvemos de la subrutina.
250 – Sumamos al número de pasos “N”, el último número realizado “B”.
300 – Inicio del bucle que dibuja el desplazamiento de la tortuga.
302 – Guardar en “A” la posición horizontal, y en “B” la posición vertical.
306 – Si la tortuga está bajada (D=1) se pone un punto en la posición de la pantalla.
308 – Final del bucle que dibuja el desplazamiento de la tortuga.
310 – Guardamos en “X” la última posición horizontal, en “Y” la última posición vertical y en “B” los pasos realizados.
312 – Volvemos de la subrutina.
350 – Guardamos en “C” el valor de la repetición y en “E” la posición de la línea de comandos a la que volver.
352 – Volvemos de la subrutina.

EL PROGRAMA

Código: Seleccionar todo

' Inicializar Variables y Pantalla
  4 X=39:Y=35:D=1:M=0:C=M:PI=3.1415927
  8 PRINT CHR$(11):PSET(X,Y)

    ' Entrada y Análisis de las Instrucciones
 10 P=1:A$="":INPUTA$:IF A$="" THEN 4
 14 FOR I=1 TO 7
 16 IF MID$(A$,P,1)=MID$("bsdi>ar",I,1) THEN F=I:I=7
 18 NEXT I
 20 IF F>=3 THEN P=P+3:N=VAL(MID$(A$,P,2))
 26 ON F GOSUB 100,100,200,200,250,300,350
 28 P=P+3:IF P<LEN(A$) THEN 14
 30 C=C-1:IF C<1 THEN 10
 34 P=E
 36 GOTO 14

    ' Instrucción: Subir/Bajar
100 D=(F=1)
102 RETURN

    ' Instrucción: Derecha/Izquierda
200 A=N*PI/180:IF F=3 THEN A=-A
202 M=M-A
204 RETURN

    ' Instrucción: >> (Incrementar Avanzar)
250 N=N+B

    ' Instrucción: Avanzar
300 FOR F=1 TO N
302 A=X+F*COS(M):B=Y+F*SIN(M)
306 IF D THEN PSET(A,B)
308 NEXT F
310 X=A:Y=B:B=N
312 RETURN

    ' Instrucción: Repetir
350 C=N:E=P+3
352 RETURN


APUNTES FINALES
Esta versión de LOGO es una conversión directa de la versión realizada previamente para el Sinclair ZX-81.

Aunque por el hecho de disponer de más memoria (casi el triple, hasta los 1,7 KB), podría haber realizado algunas mejoras, pero el hecho de no disponer de un editor que permita modificar las líneas me ha provocado pereza…

De todas formas, la gracia de esta versión era hacer una adaptación en otro equipo que tampoco tiene modo gráfico, y los pixels los emula a partir de gráficos predefinidos.

Así, si en el ZX-81 caben 2x2 pixels gráficos en un carácter de 8x8 pixels reales, dando una resolución de 48x64 puntos.

En el AQUARIUS caben 3x2 pixels en el mismo carácter de 8x8, provocando unas gráficas un poco “deformadas” ya que, verticalmente, dos puntos tienen 3 pixels de alto, pero el tercero solo tiene 2.

Moviendo la tortuga
La tortuga aparece centrada en la pantalla, orientada hacia la derecha y lista para empezar a dibujar a medida que se mueva.

Los comandos se deben introducir en minúscula, ya que es el modo por el que viene por defecto el AQUARIUS.

Los sentencias son 100% compatibles con la versión del ZX-81, aunque se puede comprobar que está versión es una 7 veces más rápida.

A diferencia de la versión del ZX-81, en ésta aparece el punto inicial donde está situada la tortuga. En la del ZX-81 se quitó para ahorrar memoria.

En la versión del ZX-81 nos podemos quedar sin memoria si realizamos un gráfico muy grande en el equipo básico con 1 KB. En esta versión esto no puede suceder ya que la memoria de pantalla tiene un tamaño fijo.

El único “sorpresa” ha sido comprobar que en el AQUARIUS no viene predefinido el valor de PI, con lo que he definido una variable con el mismo nombre y le he asignado el valor por defecto que viene en el ZX-81.

Por otra parte, he detectado un “problema” al trazar líneas rectas después de hacer giros, provocando que “a veces” la línea no sea perfectamente recta. Ignoro si el problema es mío o del AQUARIUS, pero no lo entiendo.

20150419_231949.jpg
20150419_231949.jpg (72.89 KiB) Visto 3913 veces

20150419_231625.jpg
20150419_231625.jpg (218.37 KiB) Visto 3913 veces

20150419_231411.jpg
20150419_231411.jpg (187.87 KiB) Visto 3913 veces

20150419_231205.jpg
20150419_231205.jpg (203.64 KiB) Visto 3913 veces

Os invito a probarlo.
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: Nintendo NES/Clónica
Ubicación: Córdoba-Jaén
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Aqua-LOGO para Mattel Aquarius

Mensajepor radastan » 23 Abr 2015, 12:14

Me estás picando a sacar el Laser 310 y hacer cosicas, que lo sepas.

Si no fuera porque estoy comprometido con un proyecto con Climacus te ibas a enterar.
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: Aqua-LOGO para Mattel Aquarius

Mensajepor dancresp » 23 Abr 2015, 18:01

radastan escribió:Me estás picando a sacar el Laser 310 y hacer cosicas, que lo sepas.

Si no fuera porque estoy comprometido con un proyecto con Climacus te ibas a enterar.

Parece que me leas la mente, porque no quedan muchos equipos con un modo gráfico "simulado"...
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Zardoz
MSX Turbo R
MSX Turbo R
Mensajes: 283
Registrado: 09 Sep 2013, 19:04
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Madrid
Contactar:

Re: Aqua-LOGO para Mattel Aquarius

Mensajepor Zardoz » 23 Abr 2015, 21:58

Oh, el Trillek computer. Y ahí puedes redefinir el juego de caracteres.
Yep, I have a blog :zardoz.es
Emulador DCPU-16 VM
Emulador Trillek

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: Nintendo NES/Clónica
Ubicación: Córdoba-Jaén
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Aqua-LOGO para Mattel Aquarius

Mensajepor radastan » 24 Abr 2015, 08:38

dancresp escribió:
radastan escribió:Me estás picando a sacar el Laser 310 y hacer cosicas, que lo sepas.

Si no fuera porque estoy comprometido con un proyecto con Climacus te ibas a enterar.

Parece que me leas la mente, porque no quedan muchos equipos con un modo gráfico "simulado"...


El Pecom 64 mismamente. Y tiene un sistema gráfico muy peculiar: 128 caracteres redefinibles, punto. Tengo pendiente probar cuanto se tarda en redefinir los caracteres, porque se podría usar para animar conjunto de caracteres. Es más, a base de redefinir caracteres hasta podríamos hacer scroll al pixel y otras vilguerías.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝


Volver a “Programación”

¿Quién está conectado?

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