SEGMENTS para Gakken GMC-4

dancresp
Mensajes: 6224
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 664 veces
Agradecimiento recibido: 1016 veces

SEGMENTS para Gakken GMC-4

Mensajepor dancresp » 03 Oct 2013 22:15

gmc-4.jpg
gmc-4.jpg (64.1 KiB) Visto 1839 veces


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)
segments.rar
(537 Bytes) Descargado 134 veces


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 24 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.

emulator.gif


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
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
calpirro
Mensajes: 267
Registrado: 02 Nov 2010 14:07
Agradecimiento recibido: 2 veces

Re: SEGMENTS para Gakken GMC-4

Mensajepor calpirro » 03 Oct 2013 23:49

Martillito y cincel...como un campeón... :-)

Una corrección: fue en el número 24 de la revista, no el 25...

Avatar de Usuario
Luis
Mensajes: 1977
Registrado: 03 Nov 2010 19:00
Ubicación: Villaquijada del Tuerto
Agradecido : 1408 veces
Agradecimiento recibido: 665 veces

Re: SEGMENTS para Gakken GMC-4

Mensajepor Luis » 04 Oct 2013 00:32

Jod***rrrr te sales tío, nada menos que el GMC-4!!!

Lo máximo que conseguí hacer fue un pequeño programa que contaba repetidamente de 0 a 9, con velocidad a gusto de consumidor cambiando 1 byte, hasta que se detuviera esta cuenta a mano. Me puse a ello después de añadirle un interruptor para desactivar el altavoz, porque el "bip bip" al pulsar las teclas es desquiciante.

Mañana lo saco del cajón y lo pruebo.

Por cierto, hay un emulador muy chulo para Android, que se llama "4bit Computer".

Eres un máquina ;-)
AHA! YOU GOT THE WUMPUS!
HEE HEE HEE - THE WUMPUS'LL GET YOU NEXT TIME!!

Avatar de Usuario
ron
Mensajes: 21855
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 3862 veces
Agradecimiento recibido: 4752 veces

Re: SEGMENTS para Gakken GMC-4

Mensajepor ron » 04 Oct 2013 08:28

fino, guapo y educado, singularmente interesante ya que tocas la informática más básica y muchas veces nos olvidamos que también existe. Gracias Master Dancresp

dancresp
Mensajes: 6224
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 664 veces
Agradecimiento recibido: 1016 veces

Re: SEGMENTS para Gakken GMC-4

Mensajepor dancresp » 04 Oct 2013 13:30

calpirro escribió:Una corrección: fue en el número 24 de la revista, no el 25...

Corregido !!!

Se me ha colado porque era plenamente consciente que el número es el 24, porque lo estaba ojeando, pero lo debí teclear mal. -hypo


harnas escribió:Lo máximo que conseguí hacer fue un pequeño programa que contaba repetidamente de 0 a 9, con velocidad a gusto de consumidor cambiando 1 byte, hasta que se detuviera esta cuenta a mano. Me puse a ello después de añadirle un interruptor para desactivar el altavoz, porque el "bip bip" al pulsar las teclas es desquiciante.

Mañana lo saco del cajón y lo pruebo.

Pues a ver si te lanzas a hacer algo más. -thumbup
Ya te digo que este simulador funciona muy bien.

Y ahora vamos a ver que da de si la TI-83...


ron escribió:fino, guapo y educado, singularmente interesante ya que tocas la informática más básica y muchas veces nos olvidamos que también existe. Gracias Master Dancresp

Totalmente de acuerdo.

Con equipos como éste, o con un Micro-professor entras en un nivel muy especial, y muy bajo. -grin
Buscando la IP de la W.O.P.R. he encontrado mi índice


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

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