EL PROGRAMA
La mecánica de este juego es muy simple: al pulsar una tecla aparece un dígito entre 0 y 9 en la pantalla, y debemos introducir rápidamente la cantidad de segmentos encendidos que tiene, pulsando la tecla correspondiente.
Así el número “1” tiene 2 segmentos encendidos, el “2” tiene 5, etc.
Si lo acertamos se muestra un nuevo número y si fallamos se muestra una “E” y finaliza el juego.
Descargar el fuente en ensamblador para usar con el emulador: (formato .asm)
COMO FUNCIONA
El programa ocupa 64 bytes más otros 12 bytes para datos y variables.
En la zona de datos usamos el bytes 0 a 9 para introducir el número de segmentos de ese dígito.
Usamos el byte 15 para guardar el número y el 14 para guardar su número de segmentos.
El programa se divide en 9 bloques identificados mediante un label:
START: Inicializar el registro Y (puntero a la zona de datos) a Fh.
RESET: Pone el registro A a 0.
INKEY: Consulta si se toca una tecla. Si no se pulsa salta a EQUAL9 y sino salta a DISPLAY.
EQUAL9: Mira si el byte 15 de la zona de datos es distinto de 9. Si es distinto salta a ADD1 y sino salta a RESET.
ADD1: Suma 1 al registro A y lo guarda en el byte 15 de la zona de datos (se usa el valor de Y como puntero).
DISPLAY: Este bloque muestra el número, espera la pulsación de una tecla y comprueba si se ha acertado.
ERROR: Si no se ha acertado, se reproduce un sonido y se muestra una “E” en pantalla.
NOOP: Es un bucle infinito producido por un salto JUMP a su misma dirección. Se debe pulsar RESET para pararlo.
DATOS: Aquí guardamos a partir del primer byte de la zona de datos el número de segmentos de cada dígito.
LISTADO DEL PROGRAMA
Código: Seleccionar todo
; Inicializo Y=Fh
START:
TIY F
; Inicializo A=0
RESET:
TIA 0
AM
; Se pulsa una tecla?
INKEY:
KA
JUMP EQUAL9
JUMP DISPLAY
; Controlar si A=9
EQUAL9:
MA
CIA 9
JUMP ADD1
JUMP RESET
; Incrementar A + 1
ADD1:
AIA 1
AM
JUMP INKEY
; Muestra el número
DISPLAY:
MA
AO
; Y guarda número de segmentos en Eh
CY
MA
TIY E
AM
; Pausa y pulsar una tecla
TIA 9
CAL TIMR
KA
JUMP ERROR
; Resto los segmentos y comparo con 0
M-
CIA 0
JUMP ERROR
; Si no hay Error: Suena, Borra pantalla y hace Pausa
CAL ENDS
CAL RSTO
TIA 9
CAL TIMR
JUMP START
; Si hay Error: Suena, "E" en pantalla y Bucle infinito
ERROR:
CAL ERRS
TIA E
AO
NOOP:
JUMP NOOP
; Datos con número de segmentos de cada dígito
ORG 50H
DATOS: DN 6, 2, 5, 5, 4, 5, 6, 3, 7, 6
END
CODIGO DEL PROGRAMA
Código: Seleccionar todo
00:
A F 8 0 4 0 F 0 C F 1 B 5 C 9 F 1 5 F 0 2 9 1 4 F 0 5 5 1 3 5 A E 4
8 9 E C 0 F 3 B 7 C 0 F 3 B E 7 E 0 8 9 E C F 0 0 E 8 8 E 1 F 4 0
50:
6 2 5 5 4 5 6 3 7 6
Atención:
El programa está dividido en dos partes, la primera es el programa en si y empieza en la dirección 00, y la de datos que empieza en 50. Para esta segunda parte, teclea “50” y pulsa “A SET” antes de introducir los 10 dígitos.
EJEMPLO DE USO
Para usar el programa, una vez introducido, hay que hacer lo siguiente:
Pulsar RESET
Pulsar RUN
- La pantalla se apaga.
- Espera unos segundos y pulsa una tecla.
7 (muestra el número en la pantalla)
3 (pulsamos la tecla 3 correspondiente al número de segmentos encendidos del número 7)
- Se reproduce un pitido y la pantalla se apaga.
- Espera unos segundos y pulsa una tecla.
8 (muestra otro número en pantalla)
6 (pulsamos la tecla 6 cuando la tecla correcta es la 7).
- Se reproduce un pitido y en pantalla aparece una “E”.
Para volver a jugar repetimos la secuencia.
APUNTES FINALES
La GAKKEN GMC-4 es un microordenador de 4 bits que se vendía junto al número 25 de la revista japonesa “Otona no Kagaku” en forma de kit para su montaje. Es el primer microordenador de 4 bits producido masivamente en los últimos 30 años, y su finalizadas es puramente educativa y experimental.
Es un sistema extraordinariamente simple que dispone de las siguientes características:
- 80 bytes para almacenar el programa.
- 16 bytes para almacenar datos.
- 8 registros, aunque realmente solo se suelen usar 2.
- Teclado de 20 teclas.
- Un segmento para mostrar un dígito hexadecimal y 7 pequeños LEDS.
- Un altavoz con ciertas capacidades sonoras.
- Un botón de “Hard Reset”.
- 6 programas preinstalador. Básicamente juegos.
Su microprocesador es capaz de ejecutar 16 instrucciones de código máquina distintas.
La compra
Desde su adquisición siempre he querido hacer algo con él, pero entre la fragilidad de su teclado y su excesivamente simple programación, que lo complica todo, no me había decidido a hacer nada. Entre otras cosas se debe ensamblar el programa a mano, introducirlo por el teclado, ejecutar,y rezar para que todo funcione bien. Sino, lo más normal es volver a empezar aunque hay la posibilidad de modificar el programa, pero no insertar o eliminar bytes. Todo demasiado laborioso.
Conseguí un sencillo manual de 3 páginas en inglés donde explica su juego de instrucciones, ya que el original está en perfecto japonés. De todas formas, al analizar sus instrucciones no acababa de encontrar la forma de hacer casi nada útil con ellas, ya que son demasiado simples. Pero dando vueltas al tema comprendí su filosofía de funcionamiento, que está más orientado a trabajar con la memoria que con sus registros.
Empieza el desarrollo
El conseguir un emulador con un ensamblador y la posibilidad de ejecutar y depurar el programa viendo el contenido de los registros me ha animado a hacer este programa.
A la dificultad de hacer algo con él se suma sus limitaciones técnicas que hacen que tengas que desarrollar mucho tu imaginación para encontrar algo interesante que hacer.
Así decidí hacer este sencillo juego, en el que hay que ser rápido para contar los segmentos del número mostrado y pulsar la tecla correcta rápidamente. Por limitaciones de memoria y técnicas no he podido poner un contador y otras cosas, pero bueno, es distraído e ideal para aprender a programar y usar este emulador.
Principales problemas...
La primera dificultad ha sido como conseguir un número aleatorio. Lo he resuelto haciendo un primer bucle que incrementa un número hasta que se pulsa una tecla.
He usado los primeros 10 bytes de la zona de datos para crear una especie de array donde introduzco el número de segmentos de cada uno de los valores, y dos más para guardar el número calculado (F) y su número de segmentos (E).
A su poca memoria hay que sumar un juego de instrucciones que a veces complica el desarrollo y obliga a usar mas JUMP de los que te gustaría. Esto ha provocado que no haya podido incrementar la dificultad o crear una especie de contador de puntos.
... y la solución
El emulador facilita mucho las cosas y funciona realmente bien. Con el podemos programar en ensamblador, pero existen otras herramientas que nos permiten programarlo en C y BASIC, dentro de sus limitaciones. Personalmente recomiendo éste.
Pues nada más, solo me queda…
Invitaros a probarlo