martes, 12 de abril de 2016

Cómo escribir juegos para el ZX Spectrum. Introducción

Índice de entradas

Esta serie de artículos han sido traducidos a partir del documento "How to Write ZX Spectrum Games" con permiso de su autor, Jonathan Cauldwell, un gran desarrollador de juegos para el Spectrum, os recomiendo visitar su Web donde está el texto original. El documento original, y por tanto esta traducción, tiene © Jonathan Cauldwell y solo puede duplicarse con permiso expreso por escrito de su autor.


Introducción

Introducción

Ya has leído la documentación sobre el Z80, ya sabes cómo las operaciones afectan a los registros, y ahora quieres poner este conocimiento en práctica. A juzgar por el número de correos electrónicos que he recibido preguntando cómo leer el teclado, como calcular direcciones de la pantalla o como se emite ruido blanco por el altavoz, es evidente que en realidad no hay mucha información sobre recursos para el nuevo programador de Spectrum. Este documento, espero, crecerá para llenar este vacío en el momento oportuno. En su estado actual está claramente lejos de su finalización, pero con la publicación de los capítulos básicos que existen hasta la fecha espero que sea de ayuda para otros programadores.

El ZX Spectrum fue lanzado en abril de 1982, y para los estándares de hoy en día es una máquina primitiva. En el Reino Unido y otros países fue la máquina de juegos más popular de la década de 1980, y usando emuladores muchas personas están disfrutando de un viaje nostálgico en el tiempo a los juegos de su infancia. Otros ahora están descubriendo la máquina por primera vez, y algunos incluso están asumiendo el reto de escribir juegos para este pequeño y sencillo ordenador. Después de todo, si puedes escribir un juego decente en código de máquina para un equipo de 1980, probablemente no hay ninguno para el que no lo puedas escribir.

Los puristas odian este documento, pero escribir un juego no se trata de escribir "perfecto" código máquina del Z80 - como si existiera tal cosa. Un juego de Spectrum es una empresa importante, y no lo vas a terminar si estás demasiado obsesionado con la escritura de los mejores algoritmos para los marcadores o para la lectura del teclado. Una vez que has escrito una rutina que funciona y que no causa problemas en otros lugares, pasar a la siguiente rutina. No importa si está un poco desordenada o es ineficiente, ya que la parte importante es conseguir que funcione el juego. Nadie en su sano juicio va a desmontar el código y encontrarte los fallos.

Los capítulos de este documento se han ordenado para que el lector pueda empezar a escribir un simple juego tan pronto como sea posible. Nada es mejor que la emoción de la escritura de tu primer juego completo en código máquina, y he establecido este manual de tal manera que se cubran los requisitos mínimos muy básicos para esto en los primeros capítulos. A partir de ahí se pasa a métodos más avanzados que han de permitir al lector mejorar la calidad de los juegos que es capaz de escribir.

A lo largo de este documento se ha realizado una serie de supuestos. Para empezar, se supone que el lector está familiarizado con la mayoría de los códigos de operación del Z80 y lo que hacen. Si no es así, hay un montón de guías que explican esto mucho mejor de lo que yo lo podía hacer. Aprender instrucciones de código máquina no es difícil, pero saber cómo ponerlos juntos de manera significativa puede serlo. Familiarizarse con las instrucciones de carga (ld), comparación (cp), y salto condicional (jp z / jp c / jp nc) es un buen sitio para comenzar. El resto irán a su lugar una vez que estas se aprenden.

Herramientas

Hoy en día tienes el beneficio del hardware más sofisticado, ya no hay necesidad de desarrollar software en la máquina para la que está destinado. Hay un montón de ensambladores cruzados adecuados que te permitirán desarrollar el software del Spectrum en un PC y el archivo binario producido puede ser importado en un emulador - SPIN es un emulador popular que tiene soporte para esta función.

Para los gráficos hay una herramienta que yo uso llamada SevenUp, y lo recomiendo encarecidamente. Puede convertir mapas de bits en imágenes del Spectrum, y permite al programador especificar el orden en que se clasifican los sprites u otros gráficos. La salida puede ser en forma de una imagen binaria, o con código fuente en ensamblador. Otro programa popular es TommyGun.

Para la música recomiendo SoundTracker, utilidad que se puede descargar de los archivos de World of Spectrum. También necesitará un programa compilador por separado. Hay que tener en cuenta que estos son programas de Spectrum, no herramientas de PC y necesitan ser ejecutados en un emulador. Beepola es una excelente herramienta para producir música por el altavós de los 48K, y funciona en un PC con Windows.

Como editores y compiladores cruzados no estoy en condiciones de recomendar el mejor disponible, ya que uso un editor arcaico y un macro ensamblador cruzado para Z80 escrito en 1985, que se ejecuta en una ventana MS.DOS. Ninguno de los dos son herramientas que recomendaría a otros. Si necesita asesoramiento sobre herramientas que podrían ser adecuados para ti, te sugiero que acudas a los foros de desarrollo de World of Spectrum. Esta comunidad amigable tiene una amplia gama de niveles de experiencia y siempre está dispuesta a ayudar (NDT: en castellano puedes pasarte por Va de Retro y te ayudaremos).

Peculiaridades personales

Durante los muchos años que he estado escribiendo software para Spectrum he adquirido una serie de hábitos que pueden parecer extraños. La forma en que ordeno mis coordenadas, por ejemplo, no sigue las convenciones de las matemáticas. Mis programas en código máquina siguen la convención del BASIC de Sinclair PRINT AT x,y; donde x se refiere al número de celdas de caracteres o píxeles desde la parte superior de la pantalla, e y es el número de caracteres o píxeles desde el borde izquierdo. Si esto parece complicado al principio me disculpo, pero siempre parecía una manera más lógica de ordenar las cosas que se me quedó grabada. Algo de mi metodología puede parecer inusual en otros lugares, así que donde se puedes concebir una manera mejor de hacer algo en su lugar.

Otra cosa importante, comentar tu código a medida que avanzas es importante, si no esencial. Puede ser infernalmente difícil tratar de encontrar un error en una rutina sin comentar que escribiste hace tan sólo unas semanas. Puede parecer tedioso tener que documentar cada subrutina que escribes, pero ahorrarás tiempo de desarrollo a  largo plazo. Además, si deseas volver a utilizar una rutina en otro juego en algún momento en el futuro, será muy fácil extraer la sección requerida y adaptarla para tu próximo proyecto.

Aparte de eso, simplemente diviértete. Si tienes alguna sugerencia o informar de errores, por favor ponte en contacto.

Jonathan Cauldwell, enero de 2007.

Cómo escribir juegos para el ZX Spectrum. Índice

Esta serie de artículos han sido traducidos a partir del documento "How to Write ZX Spectrum Games" con permiso de su autor, Jonathan Cauldwell, un gran desarrollador de juegos para el Spectrum, os recomiendo visitar su Web donde está el texto original. El documento original, y por tanto esta traducción, tiene © Jonathan Cauldwell y solo puede duplicarse con permiso expreso por escrito de su autor.

Fue escrito originalmente en febrero de 2006 y ha sufrido varias revisiones, lo traduzco a partir de la versión de junio de 2015 tal cual fue publicado, solo he añadido algo en el apartado de herramientas sobre las referencias y algunas notas sueltas.

Este manual no es todo teoría de como hacerlo, hay muchas rutinas explicadas y desarrolladas en ensamblador, y desde el principio va desarrollando una variante sencilla del Centipede poco a poco para poder avanzar sobre algo práctico.

Este curso es completamente en código máquina, haciendo uso de llamadas a las rutinas de la ROM del Spectrum cuando es necesario, pero no es un curso para empezar de cero en código maquina, aunque no hay que ser un gran experto hay que tener al menos conocimientos básicos tanto del Spectrum como del ensamblador del Z80, ya que se da por supuesto que los conoces y entiendes, no se explica el lenguaje ni las directivas del mismo, por lo que recomiendo revisar tres temas antes de empezar: conocer como funciona un Spectrum, su pantalla, los colores, la ULA y los modelos existentes; conocer código máquina del Z80 usando por ejemplo el curso de Microhobby; y conocer las directivas del ensamblador leyendo por ejemplo el manual de PASMO (en inglés).

ACTUALIZADO 15/02/2018: Se añade un apéndice B de diseño propio que trata de como escribir y ejecutar los programas.

Índice

Capítulo  0: Introducción
Capítulo  1: Texto y gráficos sencillos
Capítulo  2: Teclado y Joystick
Capítulo  3: Efectos de sonido por el altavoz
Capítulo  4: Números aleatorios
Capítulo  5: Detección simple de colisiones con el fondo
Capítulo  6: Tablas
Capítulo  7: Detección simple de colisiones con aliens
Capítulo  8: Sprites
Capítulo  9: Gráficos de fondo
Capítulo 10: Marcadores y puntuación mas alta
Capítulo 11: Movimientos de enemigos
Capítulo 12: Temporización
Capítulo 13: Doble Buffer
Capítulo 14: Movimiento sofisticado
Capítulo 15: Matemáticas
Capítulo 16: Música y efectos AY
Capítulo 17: Interrupciones
Capítulo 18: Juegos que carguen y se ejecuten automáticamente
Capítulo 19: Diseño de juegos
Apéndice   : Direcciones útiles de ROM y RAM
Apéndice B : Edición y ejecución de los programas Apéndice C : Edición y ejecución de los programas, nuevo sistema 

lunes, 21 de marzo de 2016

Reparación de una Atari 2600 Madera de 6 botones

Esta máquina la revisé en Retro Consolas 2015, llegó con pantalla negra, lo que suele significar o bien que ha muerto el regulador de alimentación (el 7805) o bien la T.I.A. (Television Interface Adapter), lo que es mucho peor pues no hay recambios. Miré que no era el regulador, por lo que diagnostiqué que seguramente era la T.I.A. la que había muerto. Se la llevaron, y aunque tengo el taller cerrado, por ser de CKULTUR que lo conozco hace varios años le pedí que me la remitiera para revisarla mejor, y lo hizo junto a dos 2600jr como donantes, una que no funcionaba y otra que sí, ya que los chips que usan son los mismos.

Puse en marcha la 2600jr que funcionaba, y tomando el esquema de la placa miré los pines de los chips para comprobar con el osciloscopio y comparar las señales.

El procesador MOS 6507
 
El chip T.I.A. en sus dos versiones, PAL y NTSC.
Aunque este tipo de averías se detectan rápido pues si un chip no funciona las líneas de direcciones que salen del chip están siempre muertas, por tener un punto de comparación empecé a medir señales primero de la que funciona y luego de la que no:

Mi osciloscopio en marcha (la pantalla corresponde a la averiada, arriba el reloj de entrada y abajo el de salida)

Consola que funciona. Señal de vídeo, es una típica señal de televisión.

Consola que funciona. El procesador tiene dos pines de reloj, arriba el de entrada (pin 27) y abajo el de salida (pin 28), vemos que ambos funcionan, las señales debían ser cuadradas pero como lo que cuenta es el pulso de subida, no es significativo.

Consola que funciona. Arriba el reloj de entrada (pin 27), abajo la señal en D0 (pin 25), un cero es la línea por abajo y un uno la línea por arriba, cada pulso de reloj se corresponde con un bit de datos, mientras la señal esté arriba serán unos y mientras esté abajo serán ceros, la señal debe ser perfectamente cuadrada, pero ni el osciloscopio es el mejor del mercado ni las señales son perfectas nunca.

Consola que no funciona, arriba el reloj de entrada y abajo D0. Vemos que el procesador está muerto, encefalograma plano señal siempre a 1, para asegurarse hay que revisar algunas señales mas, asegurándonos de que no esté parado por que algún otro componente lo pare, y por tanto la avería está en el procesador, esas dos señales daban exactamente la misma pantalla que la mostrada.

Veamos todas las señales que hay que mirar para asegurarnos de que el problema está en el procesador y no en alguna señal externa que lo pare antes de liarnos mas:

  1. El pin 2 es la masa y el pin 4 el de +5 voltios, es lo primero a verificar siempre. En este caso es correcto.
  2. Lo segundo punto a mirar es el reloj. En esta máquina el reloj proviene de la T.I.A. que a partir del reloj maestro de 3.54Mhz lo divide para obtener el reloj de 1 MHz del procesador, y los relojes de temporización para la señal PAL de 15'625 KHz. Esta señal entra a la TIA por el pin 11 y que por el pin 4 produce el reloj del procesador, que recibe este por el pin 27, y que saca a su vez por el pin 28 para sincronizarse con otros periféricos. En este caso es correcto.
  3. Ahora miraremos señales externas que puedan afectar al procesador, dependiendo del que sea tendrá unas u otras, este es muy sencillo y solo tiene dos:
    • El pin 1 es la señal de RESET, viene negada por tanto cuando esta a 1 (5 voltios) el procesador funciona, cuando está a cero (0 voltios) se resetea el procesador. Si la señal se queda a cero se resetea continuamente y no funciona el procesador. En este caso la señal es estable y está a 5 voltios, por lo que es correcto.
    • El pin 3 es la señal de READY, cuando el procesador recibe esta señal puede trabajar, cuando está a cero el procesador se para esperando a algún periférico. En este caso es estable y permanece a 5 voltios, por lo que es correcto.
  4. El resto de pines los maneja el procesador y deben estar continuamente cambiando habitualmente:
    • Los pines 5 al 17 son los de DIRECCIONES, el procesador los activará cuando desea leer o escribir en una dirección de memoria según el valor deseado. Siempre que el procesador trabaje deben presentarse valores en estos pines,
    • Los pines 18 al 25 son los de DATOS, el procesador envía el dato a guardar o recibe por ellos el dato a leer de la dirección seleccionada. Siempre que el procesador trabaje deben presentarse valores en estos pines.
    • El pin 26 es del LECTURA/ESCRITURA, el procesador lo activará cuando desea usar el bus para leer o escribir, y debe estar cambiando habitualmente.
La forma de verificar que el procesador funcione es verificar  correlativamente los puntos 1 al 3, y luego asegurarse de que por cualquier línea de direcciones hay cambios en la señal. En este caso no lo había, por tanto el primer sospechoso es el procesador. En la 2600 madera los tres chips que usa, procesador, memoria y T.I.A. van en zócalo, pero en las 2600jr no, por tanto hay que desoldar, yo para ello utilizo aire caliente, es mas rápido y efectivo, con una decapadora que tengo le aplico calor y sale sin mucho esfuerzo y sin problemas con ningún pin. Cambio el procesador y al arrancar aparece el juego en pantalla.

El aparato funcionando, arriba el reloj y abajo señal de Datos D0.

El juego en pantalla, el Combat en este caso, la foto está borrosa pero no tengo otra.

Así debe verse el juego, aunque yo lo puse en un nivel que no tiene obstáculos en la pantalla por que así es mas sencillo probar que los dos mandos respondan.

jueves, 17 de marzo de 2016

MOD Saturn sin interruptores y sin procesador

Índice de entradas de MODs para la Sega Saturn.
Con Interruptores: Parte 1      Parte 2   
Sin interruptores: Sencillo    Con micro   Mi versión


Tras la entrada anterior en que se cambia entre las tres zonas y la velocidad usando el botón de RESET con un micro controlador, voy a hacer casi lo mismo, pero usando solo componentes discretos, esta entrada va mas de electrónica digital que otra cosa.

NOTA IMPORTANTE: Esta entrada es la parte teórica del montaje, no voy a desarrollar el prototipo en este momento, pero si alguno lo desea probar ya tiene la información para hacerlo, pero no aseguro de que funcione al no haberlo probado por mi mismo.

El circuito se comportará de esta manera solo usando el pulsador de RESET:
  • Al pusar brevemente el botón de RESET irá cambiando entre regiones, alternando entre EUROPA PAL, EUROPA NTSC, JAPÓN y USA. 
  • Al pusar un periodo largo el RESET se reseteará la consola. 
De esta forma se puede establecer la consola en una región y resetearla para que se active, y cambiar sin resert entre PAL/NTSC para europa.

Para este montaje hay dos partes, ya que está pensado para poder aplicarlo a mas consolas, la primera es general y se puede usar en varios montajes, la segunda es específica para cada consola:

  1. El circuito de entrada de reset y salida del reset mas el detector de tiempo de pulsación, parte genérica que se puede aplicar en mas consolas.
  2. El selector de zonas y velocidad que activa los Led es específico para la Saturn. La placa de led irá por separado.

1. Selector del Reset o cambio de zona

Este es el esquema general de esta parte del circuito, dividida en 5 partes que desglosaré de manera individual:


Bloques del circuito del selector de RESET o cambio de Zona

1.1. Entrada y salida del pulsador de RESET

El primer elemento que necesitamos es la señal de reset, que viene del pulsador, más su retorno hacia el circuito para que se efectúe el reset en sí. El problema es lo que se conocen como rebotes, al acercarse el pulsador a su tope se producen una serie de pequeños traspasos de electricidad entre las dos placas aun separadas pero próximas, estos pequeños picos de corriente no se aprecian normalmente por ser muy pequeños, pero los circuitos digitales son muy rápidos y pueden detectarlos,indentificándolos como pulsaciones rápidas en lugar de como rebortes. Por tanto lo primero será eliminar los rebotes. Para ello  se pueden usar circuitos mas o menos complicados, lo mejor es un Trigger de Smith, pero yo usaré un pequeño retardo que es más sencillo y da buenos resultados en general:

Entrada del RESET y salida para RESET y cambio de zona


Tenemos arriba la entrada desde el pulsador de RESET con el anti-rebotes, que es un sencillo temporizador, al pulsar el reset se carga el condensador C1, cuando cae el voltaje por el rebote este se descarga manteniendo la corriente en el circuito, así en cada rebote hasta que se mantiene la corriente estable en el pulsador, y el condensador ya no influye. Al soltar el pulsador ocurre lo mismo, pero cuando se han separado completamente las láminas del pulsador se descarga el condensador y libera el circuito. Este pequeño retraso no influye apenas al soltar el pulsador.

Debajo están la salida hacia el circuito de Reset y la salida hacia el cambio de zona, cuyas señales provienen del selector del punto 1.4.

1.2. Temporizador

Para esta parte se usa un circuito muy probado, un 555 como mono-estable, cuando recibe un impulso pone su salida a nivel alto y empieza a contar el tiempo hasta que se cumple, en ese momento pone otra vez la salida a nivel bajo, y permanece así hasta recibir otro pulso. El tiempo de retardo se calcula usando una resistencia y un condensador, con la fórmula Tseg = 1'1 x Rmega x Cmicros

De esta manera si usamos un condensador de 1uF (un 105) y una resistencia de 2MOmios el retardo será de 2'2 segundos, ambos son valores sencillos de encontrar y el tiempo sobre 2 segundos pienso que es el adecuado, con una resistencia de 3M seria de 3'3 segundos, y con una de 4M sería de 4'4 segundos, podéis elegir el valor que deseéis, en el esquema he puedo 3M pero creo que es mucho tiempo y que con 2M es suficiente

Temporizador
El circuito es muy sencillo, En la salida TMP no hay señal alguna, al recibir la señal de RESET (filtrada de rebotes) se activa el temporizador durante el tiempo configurado, durante ese tiempo la señal TMP estará activa, y al transcurrir el periodo se desconecta. Al añadir un inversor disponemos de la señal invertida en todo momento.

1.3. Detector de liberación del botón de reset

Para elegir si se desea un reset o un cambio de zona miraremos si el 555 sigue activo al soltar el botón de RESET, en este caso sabremos que han soldado el botón antes del tiempo indicado y realizamos el cambio de zona, si ya no está activo es que han pasado los 3'3 segundos y debemos aplicar en su lugar el reset.

Para ello debemos detectar el flanco de bajada de la señal de reset, para lo que se emplea un inversor y una puerta NOR:
Funcionamiento del detector de flanco de bajada
Cuando hay una señal en la entrada el inversor la replica invertida en su salida, pero este elemento introduce un pequeño retraso en el circuito, por lo que justo en el momento de caer la señal durante un pequeño tiempo que tarda en cambiar el inversor ambas señales están abajo, por lo que activa la puerta y se produce en su salida un impulso.

Detector de liberación del botón de Reset

1.4. Selector de Reset o cambio de zona

Con la señal de flanco ya podemos mirar si se está en el tiempo o fuera del mismo, para lo que necesitamos comparar la señal del temporizador y la inversa de la misma con la de flanco, buscando cual de las dos está activa y actuar en consecuencia.

Selector de Reset o cambio de zona con puertas AND


Como es fácil de entender, se puede elegir cual deseamos que responda a la pulsación larga si el reset o el cambio de región, simplemente hay que intercambiar en este ultimo esquema las dos salidas.

Para simplificar el montaje, cambio las puertas AND por una NOR mas un inversor, y así quitamos un chip del montaje final.

Selector de Reset o cambio de zona con puertas NOR

1.5. Alimentación

La parte de alimentación de los chips con sus condensadores de desacoplo, estos no son estrictamente necesarios ya que los cambios no son rápidos ni continuos, pero es buena costumbre añadirlos:
Alimentación de los chips

Si somos muy puristas habría que añadir el poner a masa las entradas de las puertas no usadas, pero no lo haremos por simplificar el circuito.

2. Parte específica para la Saturn

Esta segunda parte es específica para la Saturn, pero es sencillo adaptarla a otras consolas como la Sega MegaDrive, que soportan solo las cuatro zonas que contemplamos. 

Selector de zonas para la Sega Saturn

2.1. Entrada de cambio de zona

En esta parte tenemos la entrada de cambio de zona, que proviene del montaje anterior desde el punto 1.1. del mismo. También pongo la salida de masa para la placa de leds.

Entrada de cambio de zona y masa para los Led

2.2. Contador asíncrono binario de 2 bits

Montaré un contador de 2 bits, con el puedo contar de 0 a 3 por lo que tengo las cuatro combinaciones posibles que voy a explotar. Usaré un contador asíncrono clásico con dos flip-flop J-K:
Contador asíncrono de 2 bits
El primero recibe la señal de cambio de zona, activando alternativamente su salida SC0, la que se envía al segundo  flip-flop que lleva la cuenta del segundo bit en su salida SC1, ambos disponen de las señales inversas, por lo que las usaré directamente y me ahorro inversores /SC0 y /SC1 serán las inversas. En esta disposición el sistema tomará los valores 00, 01, 10, 11, 00, 01... consecutivamente al recibir la señal de cambio de zona.

2.3. Selector de zonas y velocidades

Lo que nos interesa es realmente disponer de cuatro posibilidades de cambio: Europa PAL, Europa NTSC, Japón NTSC y USA NTSC, el resto de posibilidades no las usamos ya que no aportan mas funcionalidad. Montamos la tabla con lo que necesitamos:

Región Contador Jumper Leds
C0 C1 JPA JPB JPC JPD JPV LDJ LDU LDE LD6 LD5
Europa PAL 0 0 0 0 1 1 1 0 0 1 0 1
Europa NTSC 1 0 0 0 1 1 0 0 0 1 1 0
Japón NTCS 0 1 1 0 0 0 0 1 0 0 1 0
USA NTSC 1 1 0 0 1 0 0 0 1 0 1 0

Con esto vemos directamente y sin necesidad de simplificar mucho que las funciones que necesitamos para cada Jumper y para cada Led, que son las siguientes (las pongo en NOR para usar el chip mas sencillo en este caso):

JPA = /C0 AND C1 = NOT(C0 OR /C1)
JPB = no conectado
JPC = C0 OR /C1 = NOT(JPA)
JPD = /C1
JPV = /C0 AND /C1 = NOT(C0 OR C1)

LDJ =  /C0 AND C1 = JPA
LDU = C0 AND C1 = NOT(/C0 OR /C1)
LDE = /C1 = JPD
LD6 = C0 OR C1  = NOT(JPV)
LD5 = /C0 AND /C1 = JPV

Los desarrollos de algunas de las fórmulas, por si queréis verlos son (usando . por AND y + por OR):

JPC = (/C0 . /C1) + (C0 . /C1) + (C0 . C1) → Propiedad asociativa saco factor común /C1
JPC = /C1(/C0 + C0) +(C0 . C1) → Algo OR su contrario es siempre 1 y algo AND 1 es ese algo
JPC = /C1 + (C0 . C1) → por absorción
JPC = /C1 + C0

JPD = (/C0 . /C1) + (C0 . /C1) → Propiedad asociativa saco factor común /C1
JPD = /C1(/C0 + C0) → Algo OR su contrario es siempre 1
JPD = /C1

LD6 = (C0 ./C1) + (/C0 .C1) + (C0 .C1)  → Propiedad asociativa saco factor común C1
LD6 = (C0 ./C1) + C1(/C0 + C0)  → Algo OR su contrario es siempre 1 y algo AND 1 es ese algo
LD6 = (C0 ./C1) + C1 → por absorción 
LD6 = C0 + C1

Con todas las señales de entrada desde el contador y las de salida para jumpers y led, montamos el selector final que es el siguiente:

Selector de zona para la Saturn con 5 led de salida


Se puede alterar este montaje para usar 4 led en lugar de 5, solo es cuestión de usar esta otra tabla donde elimino LDE:

Región Contador Jumper Leds
C0 C1 JPA JPB JPC JPD JPV LD5 LD6 LDJ LDU
Europa PAL 0 0 0 0 1 1 1 1 0 0 0
Europa NTSC 1 0 0 0 1 1 0 0 1 0 0
Japón NTCS 0 1 1 0 0 0 0 0 0 1 0
USA NTSC 1 1 0 0 1 0 0 0 0 0 1

LD5 =  /C0 AND /C1 = JPV
LD6 = C0 AND /C1 = NOT(/C0 OR C1)
LDJ =  /C0 AND C1 = JPA
LDU = C0 AND C1 = NOT(/C0 OR /C1)

Selector de zona para la Saturn con 4 led de salida


Este cambio realmente no simplifica el montaje ya que cambiamos un puerto NOT por un NOR que tenemos libre.

2.4. Alimentación

Solo resta la parte de alimentación de los chips, con sus condensadores de desacoplo, estos no son estrictamente necesarios ya que los cambios no son rápidos ni continuos, pero es buena costumbre añadirlos:
Alimentación de la placa del selector de zonas

3. Placa de leds

La placa es la misma de los otros montajes, los 5 leds y sus resistencias, además de la masa, es lo que hace falta para montarla. Evidentemente si se desea usar solo 4 leds se elimina la entrada _LE, R32 y el LED3.

Conclusión

Con estos circuitos tenemos el montaje de un selector de 4 zonas para la Saturn, y con pequeñas modificaciones aplicable a otras consolas. No es tan sencillo como el que usa un micro-controlador PIC, pero no necesita un programador específico ya que todos los chips son discretos, solo hay que montar las tres placas y cablearlas internamente y entre sí, lo que no es demasiado difícil pero si laborioso al disponer de tantos chips. Recomiendo estudiar bien los diagramas antes de lanzarse, entenderlos bien, y luego establecer un esquema de conexiones entre los chips para abordarlo con éxito.

Aunque solo es un desarrollo teórico y no lo he probado, pongo los esquemas de las tres placas para ayudar si alguno quiere probarlo, yo ayudaré en lo que pueda si lo intentas. Como es mi costumbre, están pensadas para placa de topos, aunque sería muy sencillo hacerlo en una placa de circuito. Los puentes están marcados en rojo.

Posible placa de selección del RESET

Placa de selección de zona

Placa de leds

martes, 15 de marzo de 2016

Mod sin interruptores para la Sega Saturn con un microcontrolador PIC

Índice de entradas de MODs para la Sega Saturn.
Con Interruptores: Parte 1      Parte 2   
Sin interruptores: Sencillo    Con micro   Mi versión


Esta es la traducción del artículo publicado por Sebastian Kienzlen su web en el que describe su Mod para la Sega Saturn sin interruptores, usando un micro controlador PIC, es el complemento a las últimas entradas de mi blog sobre los mod de la Sega Saturn.

Mod sin interruptores para la Sega Saturn definitivo

Tabla de contenido
Soy el creador original del llamado "mod sin interruptor", que realicé para mi Sega Saturn en 2004. Desde entonces, numerosas personas han usado este sistema, y lo han usado en muchas consolas, incluso algunas tiendas de modding ofrecen mi modificación o un mod basado en él. Busca en YouTube "mod sin interruptores", encontrarás docenas de vídeos de demostración sobre el tema.

Para este Mod debes tener un poco de práctica empuñando un soldador (y si no mejor pregunta a un amigo que sepa manejarlo). También debes tener algún sistema para grabar el código en un microprocesador PIC de Microchip como el que he utilizado para este proyecto. 

El código y el archivo hex están disponible en GitHub.

¡Que te diviertas!

1. ¿Cómo funciona el mod sin interruptores?

Hacer un Mod para la Saturn que cambie entre 50/60Hz (PAL/NTSC) y para establecer la región (EUROPA/USA/JAPÓN) es de conocimiento común y no es nada especial. Hacerlo con interruptores normales que se montan de alguna forma maltratando mas o menos la carcasa es la forma más fácil, pero los amantes de la consola real no son muy aficionados a cambiar el exterior de sus bebés.

Así que aquí está: ¡El mod-todo-en-uno-sin-modificación-externa-definitivo!

Se hace mediante el intercambio del LED verde de Power por uno multicolor (he usado un LED de 3 pines rojo/verde, que da los colores rojo/verde/naranja) y multiplexando todas las funciones necesarias a través del botón de Reset. 

Los colores indican la configuración de la región actual:

Color Región Velocidad (Hz)
verde Europa 50
naranja USA 60
rojo Japón 60

De esta manera está todo controlado a través del botón de Reset:

Pulsación del botón en mseg Funcionamiento del LED Función Funcionamiento del LED al soltar el botón
menos de 250 no cambia reset normal ninguno
entre 250 y 1.250 apagado cambio entre y 50/60Hz (¡sin reset!) vuelve al color anterior con parpadeo
más de 1.250 color según región Mientras se mantenga pulsado el botón, se van cambiando las regiones cíclicamente (con 1 segundo entre cada cambio). Cuando se libera el botón se resetea la Saturn para que el cambio tenga efecto. Pasa al color de la región con parpadeo

Y esta tabla indica el cambio de la consola según la velocidad del parpadeo del LED:

Parpadeo Velocidad (Hz)
Parpadeo lento 50
Parpadeo rápido 60

Tras el cambio de región, también se establece la tasa de refresco por defecto (ver tabla anterior). Por supuesto, el MOD guarda la última configuración en su memoria EEPROM, por lo que si tienes tu sistema configurado para Europa/60Hz, esta configuración se restaurará la próxima vez que juegues. En el arranque, se realiza una "indicación parpadeante de zona".

Suena bien, ¿verdad? ¡Ahora es el momento poner tu soldador a calentar!

2. Construyendo la placa

Las siguientes instrucciones son para una Saturn Modelo 2 (botones redondos) - Estoy bastante seguro de que es igualmente posible en las otras Saturn, pero los puntos de soldadura no serán los mismos. Echa un vistazo a algunos de lugares sobre Saturn, debe haber descripciones de la mayoría de modelos de Saturn por allí.

Material necesario:
  • Soldador y estaño (y mano firme)
  • Algunos cables
  • Microchip PIC 16F630
  • Algo para poder programar el código en el 16F630
  • Nuestra herramienta favorita: ¡sentido común!
Antes yo usaba un grabador JMD por puerto serie de construcción propia, y el programa IC-Prog como la aplicación de grabación. Si no tienes nada disponible para grabar, hoy en día probablemente más fácil (y económico) conseguir un grabador en  eBay.

Este es el esquema del mod:
Schematic

Componentes:

C1 Condensador cerámico, ~ 100 nF
R1, R2    215 Ω 1/4w para ambos Led
D1 Led multicolor (3-pines)
IC1 PIC 16F630

Flipside
Por supuesto, el LED no va en el propio mod, va a sustituir el LED de encendido verde normal. Como se ve el circuito es muy sencillo, con una pequeña placa de topos y unos hilos se realiza en poco tiempo.






3. Conectando a la placa base

Bien, ahora tenemos que conectar los 6 cables de la derecha del esquema (J6, J10, J12, /RST, /BUTTON, /50), además de tres hilos para el LED (rojo, verde, GND) y dos de suministro de corriente (en total 11) a la placa base.

Primero un resumen:

Flipside

3.1. Región

Jumpers
Este es el aspecto que tenía en mi placa. La fila de la izquierda de las pastillas son todas de + 5V, la fila de la derecha son GND. Las resistencias de 0 ohmios se conectan ya sea a +5V o a masa por las patillas internas, y son las responsables de en qué región piensa la Saturno que está.











Estas son las configuraciones mas relevantes, al par interno les llamo como su jumper conectado a positivo:

Región JP6 JP8 JP10 JP12
Europa 0 0 1 1
Japón 1 0 0 0
USA 0 0 1 0

Como puede verse, mi Saturn era originalmente Europea. Note que JP8 es el mismo para todas las regiones, por lo que lo he dejado así.

Unsoldered jumpers ¡Quitaremos las otras tres!


Soldered cables
Ahora conecte tres cables a los puentes soldando cada cable a las dos patillas interiores, como aquí. Además, no deje los cables cortos, el mod probablemente se ubicará al otro lado de la placa base. También pegue los cables con cola caliente como medida de precaución.

Los cables van a J6 / J10 / J12 en el mod.









3.2. 50/60Hz

50/60 cable
Suelde un cable como en la foto y (¡con cuidado!) corte la pista de la placa, asegurarse de que realmente se corta. Pegue también este cable. El cable va a /50 en la placa.













Ok, hemos terminado con la placa base. Sea cauteloso que no lo pillar los cables entre la placa y el chasis, no queremos que pase nada malo.

Slippage

Hay un pequeño recorte entre el botón de reset y el controlador de puertos donde los cables encajan muy bien.
















4. Otras conexiones

4.1 Botón de Reset

Reset button
A continuación, corte la pista desde el botón de reset, ya que en el futuro será nuestro micro controlador el que decida si quiere reiniciar a la Saturn. Soldar dos cables como en la foto, el derecho va a /BUTTON y el izquierdo a /RST.












4.2. Alimentación

Reset button

Conecte +5V/GND al conector de alimentación, como aquí:


















4.3. LED

LED 1
Ahora, desuelda el led verde de encendido y prepara tu LED como en la imagen y pégalo de alguna manera, yo la pegué con cola caliente. El hilo central va a GND, los demás de acuerdo con el esquema (D1). La ley de Murphy dice que accidentalmente intercambiarás rojo y verde. En realidad no importa, pero me gusta mas el verde para Europa. 

LED 2










5. ¡Hecho!

Assembled
Hay que volver a montarlo todo, así es como se ve. También dibujo de posición para ubicar el Mod en la unidad, cerca del CD. 

Si no funciona, trata de poner el PIC en una placa de prototipos, añade el LED y un botón y compruebe si JP6/JP10/JP12 se comportan como deberían.









Gracias a los autores de los tutoriales de mod de 50/60 y región por darme el punto de partida.
El código y el hex-archivo está disponible en GitHub.

Referencias:
Copyright © 2015 Sebastian Kienzl

sábado, 12 de marzo de 2016

Sencillo MOD sin interruptores para la Sega Saturn

Índice de entradas de MODs para la Sega Saturn.
Con Interruptores: Parte 1      Parte 2   
Sin interruptores: Sencillo    Con micro   Mi versión


Esta es una traducción de un artículo de la página gamesx.com mencionada en la entrada anterior, en el que no indican la fecha ni el autor del mismo, con pequeñas modificaciones.

La modificación está pensada para américa, por lo que solo se cambia entre dos zonas NTSF, en concreto Japón y USA, pero se puede adaptar para cualquier pareja de zonas, como serían Japón y Europa, pero con necesidad de aumentar la lógica para cambiar también la frecuencia.

Modificación sin interruptor para la Saturn


Dispones de una atractiva Saturn japonesa, tal vez sea una super-cool V-Saturn (fabricadas por JVC), tal vez una unidad Skeleton (con carcasa transparente), o incluso una de las maravillosas unidades HiSaturn Navi (fabricadas por Hitachi con monitor integrado). ¿Quieres jugar con juegos lanzados en Estados Unidos, pero no quieres taladrar para instalar un interruptor gigantesco?. Bueno, no tienes que hacerlo. Mientras sepas realizar unas soldaduras en el interior de tu precioso sistema, puedes hacer un Mod de cambio de zona sin que sea visible externamente.

La teoría es simple y el MOD no es muy complicado. Necesitará un CI 74157 (cuadruple multiplexor de dos entradas) que se pueden encontrar fácilmente sobre un euro. Si no tienes acceso a uno, puedes sacarlo de un mando de 3 botones de la Megadrive o Génesis. A este chip sólo tienes que conectarle cinco cables: corriente, masa, Select y dos líneas de salida. Aquí está el pinout del chip y el diagrama:

[ 8 Pin 74157 Chip ]
 

 Pin 1 - SELECT Pin 16 - Vcc (+5V)
 Pin 2 - 1A Pin 15 - ENABLE (Masa)
 Pin 3 - 1B Pin 14 - 4A
 Pin 4 - 1Y Pin 13 - 4B
 Pin 5 - 2A Pin 12 - 4Y
 Pin 6 - 2B Pin 11 - 3A
 Pin 7 - 2Y Pin 10 - 3B
 Pin 8 - Masa Pin 9  - 3Y
 

Vemos en el pinout que hay cuatro multiplexores seleccionables de dos entradas A/B con una salida Y. Así 1A y 1B tienen como salida 1Y, y lo mismo para 2, 3 y 4. Lo que vamos a hacer es conectar la línea SELECT al botón de RESET o al interruptor de tapa abierta, la que sea más sencillo. Tomar un multímetro y buscar un punto en el que la señal pase de 0 a 5 voltios cuando se activa el interruptor elegido. No muestro cuál usar porque hay muchas variantes en los modelos de la Saturn (y soy un poco vago). Conectar el punto que encontraste a pin de SELECT del chip. A continuación, conecta los pines MASA y +5 voltios al lugar apropiado en la placa (para cualquiera excepto los HiSaturn Navi simplemente puedes soldar al conector de alimentación, que tiene los pines claramente etiquetados).
[ 8 Pin 74157 Chip ]

Los pines 9 y 12 deben conectarse al punto común de los pares de puentes que figuran respectivamente en el esquema, estos son los mismos que los utilizados de manera habitual para el Mod con interruptores. Para encontrar el punto común, utilizar el multímetro y mirar de cerca esos pares de puentes, donde un punto está conectado  a +5 voltios, otro a Masa y los dos puntos restantes son comunes, por lo que puedes conectar a cualquiera de estos puntos comunes. ¡Asegúrate de eliminar los puentes que se encuentren en estos pares de puentes! Si no se retiran los puentes existentes no va a funcionar, y tirará abajo la fuente de alimentación por el cortocircuito que puede provocarse.

Lo que hemos conseguido: Cuando la línea de selección está conectada a tierra, 3A y 4A se emiten a través 3Y y 4Y. Cuando la línea de selección está conectada a +5 voltios, 3B y 4B se emiten a través 3Y y 4Y. Se puede ver que con este cableado el chip está meramente intercambiando 5 voltios y Masa en cada salida cuando cambia la línea SELECT. Muy simple.

Ayudas visuales:

[ Hi-res overview ] [ Closeup of Jumpers ] [ Draw your power from here ] [ Using the reset switch ]
Esta imagen muestra el mod en una Saturn blanca (Japonesa) estándar.
Hay un montón de espacio para el chip y todo el cableado.
Haga clic en las flechas para acercar la imagen.



Las siguientes dos imágenes muestran el Mod en una HiSaturn Navi:




Este es el chip 74157 por detrás, con todos los cables conectados. Se pueden ver los bucles del hilo sobre el chip. Los dos cables de color naranja van hacia la inferior de la placa a los puntos comunes de los puentes,y los tres cables azules que bajan hacia abajo por su izquierda son + 5 voltios, Masa y Select.




Aquí se ver el hilo azul de SELECT conectado al botón de RESET.

Este mod en particular se hizo en una HiSaturn Navi, por lo que no verá nada similar dentro de su Saturn, pero la teoría es la misma.

Todo el contenido (c)2003 GameSX.com si no se indica lo contrario. Todas las marcas comerciales registradas por sus respectivas empresas. GameSX.com no asume ninguna responsabilidad por ningún tipo de daño ocasionado ya sea durante la visualización de esta información o por hacer cualquier cosa con dicha información. Si no te gusta, cambiar el canal. Parte de esta información puede provenir de otras fuentes, y no implica de ninguna manera propiedad por GameSX.com de esta información, nos limitamos a intentar proporcionar una fuente sencilla para encontrarla. Dicho esto, escribimos esto y agradeceríamos no lo publicaras en tu propia página sin el debido crédito. ¡Escríbenos!

NOTA: Aunque he pedido permiso a los autores para traducir este artículo, el mail indicado como contacto para ello me lo devuelve como dirección no válida, por lo que espero no moleste esta publicación.