Programador Flash
Módulo SNES
Por: David J.
Senabre Albujer , 2006
Versión 1.
![]() Trasfondo... Si no te interesa pasa a visión general :-) Uno de mis objetivos era conseguir leer y grabar las partidas salvadas de los juegos de Megadrive y Super Nintendo, para poder así tener backups, y poder: - Seguir una partida empezada en la consola, en un emulador. - Seguir una partida empezada en un emulador, en la consola. - Poder cambiar la pila del cartucho habiendo salvado previamente la partida, para poder volverla a cargar (al cambiar la pila se borra, como probablemente sepas). Hace muy poco conseguí hacerlo para Megadrive, y ahora lo he conseguido para la SNES, pero por métodos muy distintos. Brevemente, en el caso de la Megadrive, escogí hacer todo el proceso en la propia consola. Construí un cartucho regrabable para arrancar una BIOS desde el puerto de expansión, una de cuyas funciones era permitirla conectarse al PC. Esto lo hice usando un protocolo de transmisión a través del puerto de mandos, por donde se conecta al puerto paralelo del PC con un cable. Otro programa en el PC se encarga de conectarse a la consola y darle las ordenes pertinentes, que la BIOS ejecuta (por ejemplo, leer la SRAM y mandarla por el cable, para que el programa del PC pueda grabarla en el disco duro, etc). En el caso de la SNES, una solución de este tipo es muy dificil de implementar, debido principalmente a su arquitectura. El primer motivo es que es muy laborioso y dificil meterle una BIOS. Llevo más de un año destrás de conseguirlo, pero aún no me he puesto. La SNES tiene un puerto de expansión de escasa potencia comparado con el de la Megadrive, que no permite cargar código, ni tener acceso al bus principal de la CPU. El segundo motivo es que su capacidad de entrada/salida a través del puerto de mandos es también muy limitada. Buenisima para conectar mandos (bastante mejor que el de Megadrive) pero pésima para mandar datos por él. Por tanto, para conectarla al PC, anque cargara una BIOS, necesitaria usar el puerto de expansión y el manejo del protocolo de transimisión y su programación sería más compleja.Visión general La solución a todo esto era usar mi programador de memorias. Como su construcción es modular, sólo tenía que diseñar una placa de expansión que conectada a la placa madre, con muy pocos componentes, me permitiera leer y grabar cualquier cosa en el cartucho. Al final bastó un simple multiplexor, y un conector de cartuchos de SNES. Para conseguir acceso total al cartucho tuve que dedicar mucho tiempo en investigar el maldito mapa de memoria de la SNES, que a mi modo de ver es estúpidamente complicado, y que además puede funcionar en modo HiROM o LoROM. Es muy dificil al principio entender perfectamente este mapa de memoria, pero es vital si se quiere dominar la máquina. Por si fuera poco, para acceder a la SRAM de cartuchos que usan HiROM, hay que tomar precauciones especiales, y esto unido a otras tantas cosas, hizo que desarrollar el programa de control fuera algo laborioso, con mucho debugging por medio. En definitiva, para controlar esta nueva placa necesité realizar un par de modificaciones a la placa madre, para aumentar su capacidad de direccionamiento de 4 a 16Mb, y añadir una líneas de control adicional (por suerte, basta con soldar 3 cables). Como el control del programador Flash, que fue el primer modulo que diseñé para la placa madre, era sencillo, aproveché para simplificar el diseño. Pero no ha sido posible mantenerlo en este caso. Por tanto para usar el programador de SNES necesitas usar la placa madre 2.0 Y para usar el programador Flash puedes usar la placa madre original o la 2.0La construción Es muy simple. Hay que hacer tomar todas la lineas de dirección de la placa madre y llevarlar a las lineas de dirección del cartucho. A todas menos a la A23. Como la placa 2.0 tiene 24 lineas de dirección, 23 de ellas se tendrán que conectar a las 23 linéas bajas de dirección del cartucho (A0-A22). La A23 del cartucho irá conectada a 5v a través de una resistencia (no se necesita). La señal de dirección de la placa madre que nos queda libre la vamos a usar como selectora de un multiplexor, que se usará para controlar la señal /CART del cartucho. Normalmente, /CART será controlada por la señal /RD de la placa de control, pero cuando se quiera grabar la SRAM en cartuchos LoROM, habrá que conectar /CART a tierra*. Ese será el cometido del multiplexor, controlado por A23 de la placa de control. A la señal /WR del cartucho irá coenctada la señal /WR de la placa de control, sin más. A la señal /RD del cartucho irá conectada la señal de control adicional de la placa 2.0 Las lineas del cartucho A23, RESET e IRQ van a 5V a través de una resistencia. El resto, flotando. Y ya está. (*): Para habilitar la señal /CS-RAM cuando se grabe en ella, sino no haría efecto. En HiROM es distinto, ya que /CS-RAM se habilita cuando se da una dirección dentro de la zona de la SRAM, sin activar /CART. Es más, si activas /CART se deshabilita la SRAM (en HiROM), así que mucho ojo. En HiROM, siempre que activas /CART, se habilita la ROM, por tanto, cualquier RAM queda inhabilitada. Esto es poco intuitivo, y difícil de entender, así que míralo como una excepción. No sé por qué Nintendo hizo algo así. Explicando un poco el direccionamiento... En función de qué acción quieres hacer, las líneas /CART y /RD del cartucho deben ser controladas de cierta forma: LoROM
HiROM
Las señales /CART y /RD necesitan aclaración. /CART es una señal que se usa para indicar al cartucho que se está intentando acceder a él. Internamente está conectado a /OE-ROM (señal de lectura de la ROM) y /CS-RAM (señal de habilitación de la SRAM). /RD en realidad está conectado a la señal /CS-ROM, y /OE-RAM. De primeras es poco intuitivo, ya que cabría esperar que /RD estuviera conectado a la señal /OE-ROM, y esto ha llevado a algunos (que en mi opinión, no lo han enfocado correctamente) a llamar /CS a /RD, y /RD a /CART. Es decir:
Yo considero que es mucho mejor verlo como /RD, y /CART, porque se acaba entendiendo mejor el funcionamiento y el uso del mapa de memoria de la SNES. Sin duda. Aunque /ROM es un nombre bastante razonable, si con ello entendemos que significa acceso al cartucho en conjunto. Aunque como ya habré dicho, este sistema que usa la SNES para acceder al cartucho, puede parecer bastante rebuscado. Yo habría hecho lo que se suele hacer siempre, que la señal de /RD fuera conectada a /OE-ROM y /OE-RAM, y la /CS a /CS-ROM y /CS-RAM. El sistema elegido por Nintendo complica conceptualmente todo. En mi opinión. Aunque con el tiempo se acaba por entender perfectamente. Paciencia. Conector Pinout del módulo lector SNES
Versión 2 de la placa de control La versión 2 es mandatoria. Y recuerdo que el conector de la placa de control tiene el siguiente pinout: Pinout del FlashUSB de la placa madre v.2
(*) La señal Ctr no proviene del 8255 sino del puerto paralelo. Software de control El programador se maneja con un programa para Windows. Puedes descargar desde la sección de descargas de la web el que sirve para grabar memorias Flash tipo 29F0x0. No obstante, el módulo SNES requiere otro software, y que si alguien está interesado, colgaré. Aquí. |