SEGMENTS para Gakken GMC-4

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

SEGMENTS para Gakken GMC-4

Mensajepor dancresp » 03 Oct 2013, 22:18

gmc-4.jpg
gmc-4.jpg (95.03 KiB) Visto 5709 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
(540 Bytes) Descargado 437 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 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.

emulator.gif
emulator.gif (21.99 KiB) Visto 5709 veces


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.

Bone
Dragon 32
Dragon 32
Mensajes: 29
Registrado: 06 Feb 2013, 18:27
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica

Re: SEGMENTS para Gakken GMC-4

Mensajepor Bone » 15 Oct 2013, 23:13

Menudo peaso de post. :D
Esto de programar con "tanta" memoria me recuerda a mis practicas de la uni con el MC68HC05K. No se, a lo mejor algun dia me da por meterme a programar algun microcontrolador a ver si hago de una vez. Es que me da una pereza........... :tecle:
< Sistema Preparado >

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: SEGMENTS para Gakken GMC-4

Mensajepor dancresp » 17 Oct 2013, 10:26

Bone escribió:Esto de programar con "tanta" memoria me recuerda a mis practicas de la uni con el MC68HC05K. No se, a lo mejor algun dia me da por meterme a programar algun microcontrolador a ver si hago de una vez. Es que me da una pereza........... :tecle:

Este es uno de los encantos (reto) de estos aparatos: ser capaz de hacer algo con todos esos "recursos". :tecle:

Como mínimo, en este caso el uso del emulador ayuda mucho.
Pero aquí la dificultad es más saber que hacer, que no hacerlo.

Y si, da pereza, pero mola !!! :jumper:
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: SEGMENTS para Gakken GMC-4

Mensajepor Hark0 » 20 Oct 2013, 08:50

dancresp escribió:
Bone escribió:Esto de programar con "tanta" memoria me recuerda a mis practicas de la uni con el MC68HC05K. No se, a lo mejor algun dia me da por meterme a programar algun microcontrolador a ver si hago de una vez. Es que me da una pereza........... :tecle:

Este es uno de los encantos (reto) de estos aparatos: ser capaz de hacer algo con todos esos "recursos". :tecle:

Como mínimo, en este caso el uso del emulador ayuda mucho.
Pero aquí la dificultad es más saber que hacer, que no hacerlo.

Y si, da pereza, pero mola !!! :jumper:



"Cosas" como este GMC-4 me encantan... ;-)

¿puedes poner por aqui el doc que comentas en ingles y también el emulador?

Gracias! ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

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: SEGMENTS para Gakken GMC-4

Mensajepor dancresp » 20 Oct 2013, 22:43

Hark0 escribió:¿puedes poner por aqui el doc que comentas en ingles y también el emulador?

Esta semana subiré un PDF redactado 100% por mi con el manual de instrucciones del GMC-4, como se programa, software de terceros y como funciona el emulador y su ensamblador.

Por el resto, no me costó encontrarlo pero casi todo lo que hay está en japonés.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: SEGMENTS para Gakken GMC-4

Mensajepor Hark0 » 21 Oct 2013, 08:02

dancresp escribió:
Hark0 escribió:¿puedes poner por aqui el doc que comentas en ingles y también el emulador?

Esta semana subiré un PDF redactado 100% por mi con el manual de instrucciones del GMC-4, como se programa, software de terceros y como funciona el emulador y su ensamblador.

Por el resto, no me costó encontrarlo pero casi todo lo que hay está en japonés.


Estuve pegandole al gugle y encontre un PDF que es el que viene con la revista (fotos, en gris, set inscrucciones etc) en ingles...

Es más, encontre en ebay 5 ejemplares de esa revista... que me sale a 45 pavos si quiero uno... maldita crisis... :x

Si acaso, lo subo aqui luego...

Saludos.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.


Volver a “Programación”

¿Quién está conectado?

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