Reproducciones de SNES

Para consultas y debates sobre el contenido de este artículo, visita el Hilo oficial.

En construcción.png

Este artículo está en construcción.

Por esta razón, seguramente habrá lagunas en el contenido o en el formato. Por favor, antes de cambiar el contenido, consulta la página de discusión del artículo.


Reproducir un juego consiste en reprogramar un juego de una determinada consola con la finalidad de reciclarlo para jugar a un juego nuevo cualquiera, un prototipo, un juego casero o una modificación de un juego original.

Contenido

  • Nota del creador de los tutoriales, josete2k:

Bien, antes de nada deciros que si bien el proceso es relativamente sencillo, el coste que nos puede suponer para una sola reproducción es algo exagerado (programador, memorias, cartucho donante) y también dependiendo del juego que queramos realizar por usar una o más memorias.

Gracias a todos los que vais manteniendo el hilo vivo, a vtec16, FFantasy6, azulantares y sobre todo a magno por su apoyo contínuo...

Es electrónica MUY simple y SEGURO que TODO está respondido en la web (no necesariamente referido a repros de SNES, por supuesto).

How EPROMS Work

Recopilando datos

  • Antes de nada, hay que saber los datos de la ROM que queremos, ya que el cartucho donante ha de poseer las mismas características.
  • Tipo de ROM; LoRom o HiRom.
  • Tipo de save, el tamaño de la SRAM en kb.
  • Tamaño de la ROM en Mbits.
  • Uso o no de chips de apoyo especiales como el SuperFX o el DSP.
  • ¿Cómo saberlo?: la manera más fácil es ejecutarla en un emulador y ver la info en pantalla (snes 9x es muy útil). En http://www.snescentral.com tenéis una amplia lista de PCBs con sus características y los juegos que las montan.
  • Sobre el tamaño, sabemos, o al menos deberíamos saber, que los MEGAS que nos vendían en la época de SNES y MegaDrive eran Megabits, es decir, una octava parte de un MegaByte (los MEGAS que nosotros conocemos).
  • Partiendo de eso, una ROM como Zelda ocupa 1MB = 8Mb así que necesitaremos un almacenamiento de 8Mb para nuestra ROM.
  • Las EPROM más usadas en este ámbito son las 27c080 o 27c801 (son equivalentes) que poseen memoria de 8Mb, ideal para este juego. En juegos con más tamaño, se usan varias EPROM concatenadas, pero eso lo dejaremos para más adelante.

Las memorias

  • Como ya se ha dicho, las más utilizadas son las EPROM 27c801 100F porque concuerdan en casi todo el patillaje con la MASKROM (ROM original).
  • Fijáos bien en el último parámetro 100F, que define el tiempo de respuesta de la EPROM en nanosegundos. Esto es crucial porque si bien con 120F una ROM FastRom de un sólo integrado funciona, cuando usamos varias EPROM, el tiempo de respuesta aumenta y 120 NO SIRVE (gracias a magno por el aviso).
  • Para grabarlas, un programador Willem a pelo (no hacen falta adaptadores).
  • Para borrarlas, es necesario un borrador ultravioleta ya que son EPROM y no EEPROM. ¿Es necesario borrador?, bueno, las EPROM no suelen ser nuevas, así que a veces no vienen borradas correctamente. Si no están bien borradas, no se graban.
  • Existen alternativas como las Flash 29F032 de bus de 8 bits y capacidad 4MB, estas se pueden borrar y grabar las veces que quieras, sin necesidad de borrador ultravioleta, directamente con el programador de memorias, en estas tampoco es necesario hacer bankswap.
  • Hay también juegos específicos como el MarioRPG que necesitan una EPROM de 16bit de bus y 4MB como la 27C322 por llevar un chip de apoyo llamado SA-1.

Primer nivel: The legend of Zelda - A link to the past

Manipulando la ROM

  • Software:
  • Empezamos consiguiendo la ROM a grabar/modificar en formato *.smc y el correspondiente parche (si procede). El parche de Pablito´s para traducir el Zelda lo tenéis aquí.
  • Abrir WindHex32, abrir el fichero a modificar, en este caso el SMC.
  • Ahora es necesario saber si el parche está creado para usar CON o SIN header SMC. El orden de los dos pasos siguientes varían si el parche debe aplicarse antes o después de borrar la cabecera SMC.
  • Para el Zelda es necesario aplicar el parche ANTES de borrar el header.

Aplicar parches

  • Tan solo con F6 o en "Tools" -> "Patch current file", el programa nos preguntará si deseamos guardar la rom antes de seguir y ya sí nos dará a elegir el "ips" a aplicar.
  • Recordad salvar después de la operación.

Reparar checks

  • En el mismo apartado "Tools" elegimos la opción "Repair SNES Checksum", tras una serie de avisos, arregla el check de la ROM (este paso no es obligatorio).
  • ¡No olvidéis salvar el archivo antes de cerrar WindHEX!.
  • Esto está bien para además modificar el header real de la rom, con lo que podemos conseguir algo así:
  • Ahora usar el programa de magno para swapear parte de la ROM y así evitar casi todos los cables a soldar.
  • Este esquema representa el pinout de una MaskROM y una EPROM 27c801antes y después de pasarla por BankSwap, como veis sólo cambian dos patillas entre ambas al finalizar el proceso:
  • Simplemente arrastrando el *.SMC sobre BankSwap.exe, nos dará un archivo resultante *_0.bin que debe ocupar exactamente 1.048.576 bytes = 1MB = 8Mb. Ya está vuestra ROM preparada para grabar.
  • El orden del proceso es bastante irrelevante, se puede calcular el checksum y luego borrar la cabecera o al revés, el resultado es el mismo. Lo que no se puede hacer lógicamente es calcular el checksum y luego parchear.

Grabación de la EPROM

  • Para grabar se puede usar un Willem (en eBay por unos 18 euros). No es la última PCB pero para las 27c801 va sobrado. Eso sí, necesitamos puerto paralelo LPT (DB25) en nuestro equipo. Es recomendable tener el EPP activado en la bios de vuetro PC.
  • Primero bajamos el software que subió el usuario socram8888 y lo instalamos: http://www.elotrolado.net/hilo_programa-para-grabar-eeproms_1606706
  • Ahora toca configurar el Willem para 27c080/27c801 si tenéis uno antiguo como el que se usa en el tutorial (si es de los nuevos los jumpers son casi automáticos):
  • Abrimos EPROM3 y tras hacer el test de hardware (si todo va bien):
  • Seleccionamos el dispositivo en Device:
  • Comprobamos que el chip esté BIEN vacío con:
  • Si no está vació nos saldrá:
  • Pues nada nada, a la lavadora unos tres minutos:
  • Tapamos la ventanita de la EPROM con cinta aislante negra:
  • Abrimos nuestro bin y:

Constuyendo el cartucho

  • Videotutorial por cortesia de vtec16:
Icono YouTube.png Tutorial - Tutorial Eproms Super Nintendo (26/06/2011) 13:14

LOROM CARTS - single sided solder + 8KB SRAM:

    FIFA Soccer 96
    FIFA 97
    FIFA 98
    NBA LIVE 95 (two ROMS)
    NBA LIVE 96
    NBA LIVE 97
    NBA LIVE 98
    90 Minutes European Prime Goal
    Super Mario Allstars & Super Mario World
    Super Metroid
    Super Punch-Out!!


  • Esta lista es muy concurrida por la red, pero no deja de ser válida, además las maskrom son soldadas por una cara, lo que facilita su extracción. Recordad 64kb=8KB
  • Localizando cartucho donante, lo abrimos y vemos que tipo de placa usa:
  • Localizamos la MaskRom, la SRAM, la pila, el CIC y el decodificador de direcciones MAD-1.
  • No todos los cartucho tienen decodificador, sólo aquellos que usen más de un integrado (sin contar el CIC) deben usarlo porque la SNES es muy tonta y no sabe distinguir un acceso de otro.
  • Desoldamos la MaskROM usando un desoldador preferiblemente, sale muy muy bien:
  • Ahora destacar que las MaskROM de SNES suelen tener 36 patillas en contra de las EPROM que cuentan con 32. Esto no es relevante puesto que si os fijáis en el pinout que colgué antes hay cuatro patillas que son "desechables", al menos por ahora. Presentamos las herramientas (fijaos que la EPROM ya está puesta (no soldada) y sobran 4 pines por la parte derecha del cartucho):
  • Levantamos las patillas 24 y 31 de la EPROM. Soldamos un cablecito en los huecos correspondientes a dichas patillas (en la PCB son, contando desde la derecha, el hueco 4 y 11). Y ya sí, soldamos todo en placa y los cables a las patillas contrarias:
  • Y ya está, a probar:

Segundo nivel: Soul Blazer

Partir archivos con BankSwap

  • Usar dos EPROM para construir un juego de más de 8mb.
  • En laa trilogía "Heaven and Earth Saga" (La saga del cielo y la Tierra), compuesta por Soul Blazer, Illusion of Time y Terranigma, uno de los tres juegos nunca llegó en castellano: Soul Blazer (en japón "Soul Blader" ソウルブレイダー, Sōru Bureidā).
  • La reproducción de este juego comparte elementos comunes con el ZELDA ya que el original ocupa lo mismo y es del mismo tipo:
  • Gracias a HeXPLuS (Fortaleza Romhack) y (una vez más) a magno podemos disfrutar de un parche para traducir el juego:
  • Y ahora viene lo peliagudo, el parche transforma la ROM de 8mb en una preciosa ROM de 12mb, así que toca usar dos EPROM o pedir un parche con menos añadidos (como se ve, los checksum están ya corregidos en el parche así que no hace falta usar windhex como en el Zelda). Usaremos dos EPROM 27c801.

¿Como partir la ROM?

  • BankSwap parte las ROMs de forma automática (recordad tenerla sin header) pero está diseñado para trabajar con ROMS enteras múltiplos de 8mb [1MB] como 8, 16, 24, 32, 40, y como vemos la ROM resultante tras aplicar el IPS es de 12mb (1.5MB).
  • Se puede ampliar el tamaño de ROM con Windhex pero para facilitar la tarea se ha preparado un BAT que hace TODO el proceso solo.
  • Usando los archivos de este RAR el proceso es tan simple como:
  • Extraer el contenido del rar junto a la ROM.
  • Renombrar la ROM ya parcheada a IN.SMC
  • Ejecutar BankSwap.bat (el bat, no el exe).
  • El resultado serán dos bin preparados ya para grabar con el willem:
  • Para grabar este juego, lo ideal es un NBA Live 95 porque ya posee el hueco para dos maskrom/eprom.

Montando el cartucho

  • El NBA Live 95 es ideal en este caso, LoRom y con hueco para dos maskrom.
  • Como se puede ver, esta vez son DIP32 con lo que ajusta perfectamente con nuestras EPROM. Así pues basta con intercambiar los pines que bankswap no es capaz de cambiar en ambas eprom y listo. Cuidado con los pines levantados de la EPROM de arriba (#2) ya que si no los dejamos cortitos tocarán con la EPROM de abajo (#1).
  • Probamos el juego y metemos la etiqueta:

Tercer nivel: Secret of Mana

Tipo HiRom, con dos EPROM

  • El parche para este juego lo podéis encontrar AQUÍ.
  • Bueno, a raíz de los problemillas que sacamos con este juego, me he decidido a documentar el proceso.
  • Como la placa que voy a usar es una como la del Illusion of Time (en este caso el donante es Super Momotarou Dentetsu DX JAP), el MAD está preparado para trabajar con una ROM de 2Mb de tamaño. Las EPROM a usar siguen siendo las 27C801 y éstas son de 1Mb así que necesitamos recablear el MAD para que soporte EPROMs de 1Mb.
  • Bien, según las indicaciones de magno y mirando este apartado de ROMLab, vemos que nos dice claramente que la patilla 13 del MAD ha de ir conectada a A20 para usar 1Mb.
  • Seguiremos este esquema para el MAD:
  • Pinout de una MASKROM:
  • Pues nada, tras mirar continuidades con un polímetro, se ve que esto en el cartucho usado no se cumple, así que desoldamos el MAD y sacamos la patilla en cuestión:
  • OJO, sacad sólo la de la derecha (PIN 13).
  • El proceso se resume en montar la segunda EPROM en el hueco de la MASKROM y la primera en la parte de abajo, uniendo las patillas con estaño.
  • Aquí ya está el recablado hecho se ve el cable que va desde la segunda patilla contando desde la derecha hacia el hueco A16 de la placa y el cable que sale del OE hacia el MAD.
  • Por la cara de arriba, hacemos lo propio con la EPROM #2 y además, conectamos 13 del MAD con A20.
  • Y listo:
  • Ahora sí, GRABANDO.

Cuarto nivel: Secret of Mana 2

Usando 4 EPROM 27C801 y 1 74LS139/74HC139

  • El parche para este juego lo podéis encontrar AQUÍ
  • El punto OE usado en el MAD verá la totalidad de la memoria asignada, así que no hay que recablear. La gestión de las EPROMs las va a realizar el LS (HC o LS sirven igual).
  • Nota: Perdonad que no me alargue mucho con este apartado.
  • Antes de nada, tener la rom SIN header y pasarla por BankSwap, que nos dará como resultado 4 archivos bin a grabar en 4 EPROMs. Recordad marcar bien cuál es cuál.
  • Bien, ahora nos vamos a regir por el siguiente esquema:
  • Lo explico un poco, TODAS las EPROM han de compartir TODOS los puntos MENOS el OE que será el que haga activarse una u otra dependiendo de la zona que el juego necesite. Para ello los OE de las EPROM ha de conectarse al 74xx139 (el 138 creo que sirve igual) siguiendo el esquema anterior.
  • Dependiendo de la placa donante, podemos encontrarnos con estos montajes:
  • Placa HiRom con hueco para dos MASKROM
  • Este montaje (cortesía de magno) utiliza los dos huecos de las maskrom para evitar recablear los puntos de unas EPROM a otras... como véis, los OE están al aire (van al LS) y las EPROM están concatenadas por las dos caras y las de la parte alta del PCB a su vez con las de la parte baja.
  • ¡OJO! RECORDAD QUE HAY UN PUNTO DE LA EPROM QUE NO CONCUERDA CON EL DE LA PLACA
  • Detalles:
  • Placa HiRom con hueco para una MASKROM
  • Foto cortesía de kogami (un compañero francés). Aquí se usa el hueco para la maskrom y luego se recablea hacia TRES EPROMs apiladas.
  • El resto de fotos de este apartado las he sacado de romlab

Usando una Flash de 32 Mb en lugar de cuatro EPROM

  • El parche para este juego lo podéis encontrar AQUÍ
  • De nuevo usamos la placa del Illusion of Time, el MAD está preparado para trabajar con una ROM de 2Mb de tamaño... pero en este caso, el punto OE usado en el MAD verá la totalidad de la memoria asignada, así que no hay que recablear.
  • Las memorias flash 29F032 tiene la ventaja de que son más duraderas y, por lo menos en las que yo tengo el tiempo de respuesta nunca es mayor de 90ns con lo que nos aseguramos que va a funcionar para SNES siempre.
  • Bien, tras haber grabado convenientemente una memoria flash 29F032 con la rom parcheada (hace falta el adaptador TSOP40b para willem), ojo, SIN APLICAR BANKSWAP la montamos en un adaptador universal para facilitar la tarea y simplemente cableamos hacia los puntos del PCB donante:
  • Pinout de una MASKROM:
  • Como veis, el A22 no se usa, hay cuatro puntos que van a +5v (Vcc) y dos puntos que van a masa (GND, Vss)
  • Pues nada, tras hacer la faenita, nos quedará algo así:
  • Y listo, a probar:
  • De nuevo comprobamos si graba partida.
  • Lo dejamos molón:
  • Se ha usado el SOM2 pero este proceso es ideal para juegos de 3 o 4 MB como el FinalFantasy VI, Chrono Trigger o similares.

Quinto nivel: Tales of Phantasia

64 Mb de cartucho con dos TSOP, casi ná

  • El parche para este juego lo podéis encontrar AQUÍ
  • Esta parte es como la anterior, tan solo difiere en que se van a usar dos TSOP, con lo que hay que recablear el MAD para que admita dos partes de 32Mb.
  • Antes de nada, parchear la ROM, ampliarla a 64 Mb con WindHEX, partirla en dos y grabar las TSOP correspondientes.
  • Presentamos el material
  • Juntamos las TSOP.
  • Como soy un perrete he soldado tods los pines y luego cortado los de OE, WE y NC... para evitar contactos entre OE he dejado los adaptadores un poco separados, lo malo es que de esta forma el cartucho cierra muuuuuuy ajustado aún rebajando el plástico interior.
  • Si pegamos más las tsop el cartucho cierra perfectamente, así que ya sabéis.
  • El procedimiento es parecido al que hicimos en el SOM, levantando la patilla 13 del MAD y llevándola esta vez al pin 48 del slot.
  • En el donante usado que es de nuevo la placa SHVC-1J3M-20 (esta vez proveniente de un Super Momotaro Dentetsu 3), este pin está comunicado con A22 así que basta con unir el pin13 del MAD con el A22.
  • Y cableamos como antes, ojo con dejar espacio para el pivote de plástico del cartucho (yo lo marco con un rotulador).
  • Tan solo cuidadito al conectar los OE antes al MAD.
  • Probado y el guardado funciona perfectamente
  • Ale, ya me he quedao agusto...

Sexto nivel: StarFox 2

¿Chip FX2? Pa qué....

  • Bueno, aquí se pueden grabar varias roms lamentablemente, el parche a español añade una imágen al inicio que aumenta la rom a más de 8mb.
  • PARCHE ESPAÑOL (SEMI): http://www.mediafire.com/?aiucaschfk54hd6
  • Voy a usar una rom con el parche retail a inglés, que además de traducirla le quita las opciones debug que lleva la rom liberada. Vamos, queda como un juego original.
  • Primero grabamos la rom en una 27C801, yo he pasado bankswap para no tener que cambiar tantos pines a la hora de cablear (el pinout de la maskrom, pese a ser SMD, coincide con el formato DIP). Se puede hacer sin bankswap ya que esta vez toca meter cables sí o sí.
  • Preparamos la EPROM doblando las patillas hacia arriba:
  • Ahora ya, a por el cartucho......
  • Partimos del juego Stunt Race FX donde localizamos y quitamos la maskrom:
  • Antes de cablear, he quitado la pila para ponerla en el lado contrario con tal de que no estorbe en nuestra labor... cableamos:
  • Vamos juntando cables con pines de la EPROM:
  • Dejamos el pin 24 y el 31 al aire ya que esos hay que intercambiarlos:
  • Probamos, et voilà:
  • El tema es que leyendo por ahí hay forma de overclockear el juego cambiando el XTAL por un de 24Hz en lugar del de 21 que lleva. El problema es que según comentan sólo funciona con juegos SuperFX2 y yo he usado el Stunt Race FX (SuperFX1).
  • Ya tenemos un UNRELEASED en nuestra SNES.

Séptimo nivel: The Legend of Zelda: Ancient Stone Tablets

¡Cartuchos multi-rom!

Icono YouTube.png Scene - Imagen 1082 (19/12/2013) 0:38
Icono YouTube.png Scene - Zelda multicart ALTP + Parallel Worlds Remodel (31/8/2013) 1:59
Icono YouTube.png Scene - Zelda Ancient Stone Tablets Switchless cart. (31/8/2013) 2:17

Con un PIC 12F629 y las roms de 2mb en 2x29F032

  • NOTA: NC es NC, no conectéis nada ahí que en realidad son patillas de salida para control de sram, pero en el AST NO SE USAN.
  • Descarga: 12f629.ZELDA_AST.2mb

Con un PIC 12F629 y las roms de 2mb en 2x29F032, AVANZADO

  • Seguramente sea mi último aporte en el tema del Zelda AST.
  • Este selector lleva implementado el cambio de juego con un reset superior a 2 segundos, es decir:
Reset -> reinicia la consola
Reset +2seg -> cambia de juego y reinicia la consola
  • Como añadido, guarda el estado del último juego, pero no es cíclico: detrás del 4 no vuelve al 1... si queréis volver al primer juego, hay que volver a grabar el PIC, con lo que es recomendable usar un zócalo para su instalación.
  • La única pega es que los que tengan supercic deben tener el hex que se modificó para hacerlo compatible con el powerpak... donde un doble click de reset genera una señal de 7 segundos de duración, suficiente para cambiar de juego.

Octavo nivel: The Legend of Zelda: Ancient Stone Tablets: Master Quest

¡Cartuchos multi-rom (BIS)!

Contador binario, decodificador y roms de 4mb en 4x29F032

  • Aportación del usuario elnaib.
  • Os voy a comentar cómo se haría un multijuego de 4 juegos diferentes de 4mb y una sram de 256kb, con un 74HC393 y un 74LS139 por si alguien no quiere utilizar un pic.
74LS139

            MAD-1 #4       |01 \/ 16| +5V
            74HC393 #3     |02    15| NC
            74HC393 #4     |03    14| NC
            TSOP 1 (/OE)   |04    13| NC
            TSOP 2 (/OE)   |05    12| NC
            TSOP 3 (/OE)   |06    11| NC
            TSOP 4 (/OE)   |07    10| NC
            GND            |08    09| NC
74HC393

   RESET (MAD-1 #9)   |01\/14| +5V
            GND       |02  13| 393 PIN#1
          74LS139 #2  |03  12| 393 PIN#2
          74LS139 #3  |04  11| A13 (SRAM #26)
             NC       |05  10| A14 (SRAM #1)
             NC       |06  09| NC
            GND       |07  08| NC
  • Para que funcione el segundo contador, el que controla la sram, hay que conectar el pin 12 al pin 2 y el 1 al 13 del 393.
  • Para que no haya problemas con el arranque del juego haremos un circuito RC con un delay de 1/10 de segundo, eso se consigue haciendo que el valor del condensador en faradios multiplicado por el valor de la resistencia en ohmios debe valer 0.1, y se conectaría de la siguiente forma
5V—condensador—393 pin 2—resistencia—ground
  • Como consejo todas las patillas que no están conectadas (NC) es mejor dejarlas conectadas a masa.
  • El sistema está probado en el multijuegos de shooters que hice y que se puede ver en el video de la primera página, comentar que no lo he probado con 4 TSOP de 4 mb, pero lo haré pronto pues me tiene que llegar el material.
  • Bueno pues ya sabéis como se hace un multijuego de 4 juegos diferentes de 4 mb, a ver si alguien postea su experiencia.

PIC 12F629 y roms de 4mb en 4x29F032

  • MASTER QUEST, son 4x32mb, o cualquier multi con 4 juegos en 4 memorias. Sin gestión de sram, me faltan pines para ello (tendría que usar un 16F630).
  • NOTA: los /OE de TODAS las EPROM/FLASH han de ir unidos, sacados de la PCB y direccionados a MAD#4
  • Cambio de juego manteniendo reset 2 segundos:
:020000040000FA
:100000000000000000008312073099008B01831666
:100010002830850081019B011C141A088312850079
:100020008C01851D11288B014B20051C3028851C57
:100030003328051D36283928851D1F281C284B20EC
:1000400085191C284B2085191C284B2085191C2834
:100050004B2085191C282C28300885003C201128AD
:100060001530B0001C281330B0001C280730B00039
:100070001C281630B0001C28300883169A0038302F
:100080009B081C1555309D00AA309D009C141C1126
:1000900083128C0108000330B1001830B200023026
:1000A000B300B10B5428B20B5628B30B5128582873
:0200B000080046
:0400B20000340034E2
:02400E00543F1D
:1042000016006A006F0073006500740065002000EE
:00000001FF
  • Cambio de juego con reset:
:020000040000FA
:100000000000000000008312073099008B01831666
:100010002830850081019B011C141A088312850079
:100020008C01851D11288B014B20051C3028851C57
:100030003328051D36283928851D2C281C284B20DF
:1000400085191C284B2085191C284B2085191C2834
:100050004B2085191C282C28300885003C201128AD
:100060001530B0001C281330B0001C280730B00039
:100070001C281630B0001C28300883169A0038302F
:100080009B081C1555309D00AA309D009C141C1126
:1000900083128C0108000330B1001830B200023026
:1000A000B300B10B5428B20B5628B30B5128582873
:0200B000080046
:0400B20000340034E2
:02400E00543F1D
:1042000016006A006F0073006500740065002000EE
:00000001FF

Anexo 1: ¿Donante NTSC o PAL?

Probando la rom en un emulador

  • Los emuladores no tienen región, adaptan el funcionamiento y la emulación a los datos contenidos en la cabecera de la rom. Así pues una rom con región JAP establecida en su cabecera, el emulador será ejecutada como si de una cartucho japonés en una Super Famicom japonesa se tratara, en cambio, si la región de la cabecera está establecida en Europa, el emulador se convierte en una SNES PAL a todos los efectos, 50Hz y restricciones PAL.
  • Para saber si una rom NTSC va a funcionar en un donante PAL o viceversa, nos podemos valer de un truquito basado en la modificación de la cabecera REAL de la rom. Cambiando el dato de región para que, aún siendo una rom NTSC, el emulador la ejecute en modo SNES PAL y veamos si funciona, tiene cuelgues o fallos.
  • Este paso se puede hacer sin arreglar el checksum y también sin borrar el header smc de la rom (el que borramos para grabar en una EPROM), es sólo a fines de testeo antes de elegir donante
  • En el ejemplo, voy a cambiarle la región al Dragon Ball Z Super Butouden 3, el cual lleva protección por software en su versión japonesa. Por contra, la versión PAL llamada "Ultime Menace" NO lleva protección.

Pasos

  • Abrir la rom en el emulador y anotar o simplemente recordar el nombre INTERNO de la rom, en este caso "SFX SUPERBUTOUDEN3"
  • Podéis ver la región de la rom en el dato más bajo, "Japan" y el tipo de salida en "Output: NTSC 60Hz".
  • El emulador ahora se comporta como una Super Famicom japonesa.
  • Bien, abrid WindHex32 y abrid la rom en cuestion, pulsáis Ctrl+F o vais a Text Search:
  • Escribid parte del nombre interno de la rom (marcad la casilla "Ignore Case" para que no distinga mayúsculas y minúsculas)
  • Buscad el byte que os marco en la imagen:
  • Como podéis ver, es un 00 y como dato, corresponde a Japón (NTSC).
  • Activamos el editor de WindHex32:
  • Y acto seguido cambiamos el byte 00 por 02
  • Guardamos la rom y probamos de nuevo en emulador, que ahora actuará como una SNES PAL como indica en "Output":
  • Ojo, la rom sigue siendo JAP, tan solo hemos engañado al emulador para que se convierta en una SNES PAL.
  • ¡Vaya qué lástima, esta rom está protegida por software!. Bueno, ya lo sabíamos.

Anexo 2: SuperCIC en la consola

Cómo hacer tu SNES multirregión

  • Los pines (¿o se dice pins?) de las PPU (ambos) han de levantarse y el CIC de la consola mejor extraerlo. Resultado:
  • Características y funcionamiento:
  • El funcionamiento es simple, con el reset de la consola pasamos de PAL-forzado, NTSC-forzado y modo AUTO (detecta la región del cartucho).
  • Compatible con el 100% de los cartuchos. Funcionan tanto Super MArio RPG como Star Ocean y cartuchos normales.
  • Si metemos un juego NTSC y tenemos el forzado PAL, el juego arranca en NTSC y cambia automáticamente a los 9 segundos. Esto permite saltarse algunas comprobaciones al arrancar el juego. O sea, arranca en el modo del cartucho y luego establece el modo que le ponemos. Esto es siguiendo el esquema que os propongo.
  • Se puede cambiar de modo en caliente, o sea, en cualquier momento.
  • Haciendo doble reset se envia una señal reset de 7 segundos. Útil para los poseedores del powerpack, ya que es necesario presionar reset 7 segundos para transferir la SRMA a la tarjeta de memoria (CF)... o sea, en lugar de 7 segundos, basta con pulsar doble el reset (como hacer doble click en el ratón).

Anexo 3: SuperCIC KEY

Cómo hacer tus cartuchos multirregión

  • Bueno, me enteré gracias a magno (una vez más) y su hilo sobre el SuperCIC de que podemos disfrutar de una consola multirregión automática. ¿Sólo la consola?, no.
  • El creador del código del SuperCIC ikari_01 nos ha brindado además con código para sustituir el CIC de los cartuchos, dándonos la oportunidad de hacer nuestros cartuchos REGION-Free. OJO, esto hace el cartucho libre de región, pero si el juego lleva protección por software, el resultado será nulo igualmente.
  • Bien, en el paquete del SuperCIC tenemos dos archivos *.hex que corresponden al código a grabar en nuestros IC.
  • Para sustituir el CIC de la consola se usa el archivo LOCK (cerradura) grabado en un PIC 16F630 (ver hilo de magno para más info).
  • El archivo que nos interesa es el KEY (llave), que va a ir grabado en un PIC 12F629.
  • Os dejo el esquema e iré ampliando la info de grabación del PIC y montaje en unos días. Resultado:
  • Pequeño inciso sobre la grabación de estos PICs. Yo suelo usar WinPIC800 pero por algún motivo inexplicable, la remesa que tengo de chips 12F629 dan error contínuo con WinPIC así que me toca usar de nuevo el acalamado ICProg. Para programar tengo un TE-20.
  • Bien, para cumplir los valores de oscilación (timing) del fabricante, estos chips vienen calibrados de fábrica así que usan los últimos bits para ello... además el bandgap ha de mantenerse como vino de fábrica también.
  • Si abrimos el ICProg y leemos el dispositivo, veremos al bit final algo así (343C):
  • Anotamos el valor porque es propenso a borrarse.
  • Cargamos el hex, fijáos que el valor Oscilador ha cambiado del valor que tenga a EC (externo):
  • Y al darle a programar nos dará esto:
  • El uso que le vamos a dar actualmente (superCIC_key) prescinde del oscilador interno y lo coge del CLK de la consola, así que es totalmente innecesario que mantengamos el valor de calibración, aun así, lo ideal es darle al NO porque así mantendremos la calibración de fábrica por si quisieramos en un futuro darle un uso alternativo (que lo dudo).
  • Si nos preguntase por cambiar el bandgap y usar el del archivo, le decimos que no.
  • ¿Qué pasa si ya la hemos liado? ¿Si ya hemos borrado el OSCCAL y no sabemos cuál es?
  • Pues, estamos de suerte, no pasa NADA (en el caso que nos ocupa, claro) ya que como he dicho el valor CLK lo cogemos de la consola, podemos darle al Sí como al No. OJO, tal vez de valor ausente porque no detecte el chip o esté defectuoso... en ese caso fallaría la verificación seguro.
  • Al final:
  • Felicidades, ya tienes tu SuperCIC_key grabado y funcional.

Anexo 4: Usando dos tipos de adaptadores TSOP-DIP

La facilidad de no cablear

  • Existen varios adaptadores de TSOP a formato DIP, no es difícil encontrar en la red fotolitos para poder meter nuestras tsop en un cartucho de snes sin tener que cablear nada. Por ejemplo el de romlab:
  • Este en concreto lo tengo comprobado y funcionando, mirad:
  • Bien, hay otros tipos. Este por ejemplo:
  • Este en especial, nos dio problemillas a FFantasy6 y a mi porque tiene una pista mal y los A20 y A21 están intercambiados. Podéis bien pasar esos puntos con cables o simplemente manipular la rom para que A20 y A21 estén permutados. ¿Cómo?:
  • Ampliando la rom a 4Mb (si no lo está ya).
  • Partirla en 4 partes.
  • Cambiar el orden de las dos partes centrales (la dos por la tres y viceversa).
  • Volver a unir.
  • La rom resultante NO funcionará en ningún emulador, únicamente en el adaptador "malo". Debéis puentear R1 y R3.

Actualizado 25/5/16

  • Si no quereis hacer nada de esto podeis pedir el tsop adapter III o adapter III.1 a buyicnow y no tendreis que cablear nada ni hacer lo del A20 con A21.
  • Podeis usar distintas memorias, de 32 mb 29f032 o 29f033, de 16 mb como la 29f016 etc , en el caso de 29f016 al menos ya sea tsop40 o tsop48 lo acepta este adaptador, las tsop48 solamente teneis que dejar sin soldar 4 pins por arriba y 4 por abajo, o sea, centrarla en la tsop ya que la tsop sólo tiene para 40 pins.


  • Con esa pcb, un zocalo zif 40 y unos pin header de 2,54mm ya lo tendreis listo para programar, así:

Fijaros en los 2 puentes que hay hechos con estaño! Si no os vienen esos puentes no hace falta puentear, pero si os vienen y no los puenteais no os dejará grabarlas:

Anexo 5: Swapbin para usar placas LOrom (con MAD-1) con binarios HIrom

Utilizando placas LOrom con juegos HIrom

  • Si tienes un lote de placas LOrom con MAD-1 sin usar, esta info será interesante, ya que existe la manera de utilizar una placa LOrom con un juego que es HIrom, claro está, mediante algunas modificaciones.
  • Cabe mencionar que esta técnica está pensada para ser usada con una memoria montada en un adaptador tipo 3, aunque se podría usar con memorias eprom u otras haciendo las modificaciones necesaras.
  • Las modificaciones son las siguientes:
  • 1.- Levantar algunos pines del MAD-1
  • 2.- Recablear los pines levantados
  • 3.- Hacer un swapbin al binario del juego para cambiar su pinout
  • Veamos el punto 1, los pines del MAD-1 a levantar son los siguientes:
  • 10, 12, 14, 15
  • Con cables unir de la siguiente forma:
  • MAD-1 PIN 10 -> +5V
  • MAD-1 PIN 12 -> PCB PIN 47
  • MAD-1 PIN 14 -> A14
  • MAD-1 PIN 10 -> A13
  • El siguiente paso es crear un ejecutable para hacer el swapbin.
  • La version de python a usar es la 2.7
  • De la página del proyecto python, https://www.python.org/downloads/release/python-2713/ (v: 2.7.13 Si no funciona probar con otra version anterior.) bajar el instalador para windows de python
  • Instalar python
  • Crear un archivo con extensión pyw (ejemplo: swap_hi_to_lo_pinout.pyw) con el siguiente contenido:
import os, sys, tkFileDialog,Tkinter

root = Tkinter.Tk()
root.withdraw()

formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]

input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Select file to swap bin HI to LO like A16->A15, A17->A16...A21->A20 and A15->21')
if not input:
        print "Error: Cannot open file"
        sys.exit()

output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Create output file name')
if not output:
        print "Error: cannot create output file"
        sys.exit()
        

# reading input file to a byte array
data = bytearray(input.read())

# calculating rom size in 2 exponants
expsize = 0
bytesize = len(data)
while bytesize > 1:
        expsize += 1
        bytesize = bytesize // 2

# init a proper size empty bytearray
buffer = bytearray()
for i in range(2**expsize): buffer.append(0)

# let's do the swap	
count = 0	
for i in range(len(data)):
        addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) +	((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
        if addr != i: count += 1
        buffer[addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))

# writing output file
output.write(buffer)

# close file handles
input.close()
output.close()

  • El swapbin realiza el cambio de los sectores del binario para que salgan por los pines deseados, para realizar la menor cantidad de recableado posible.
  • A15-> A21
  • A16-> A15
  • A17-> A16
  • A18-> A17
  • A19-> A18
  • A20-> A19
  • A21> A20
  • Para utilizar el swapbin solo hará falta una rom HIrom, que utilice saves, idealmente de 4MB. Al ejecutar el archivo que hemos creado nos pedirá abrir un archivo, seleccionamos un rom sin header, al que no se le ha hecho nada más que remover el header, o corregir checksum. Al seleccionar y abrir el archivo, pedirá indicar el nombre de cómo lo queremos guardar, después de indicarlo, ejecutará su rutina y nos creará el archivo deseado.
  • Luego de montar todo según instrucciones, debería quedar algo parecido a esto:
  • Nota: Es posible hacer el swapbin para juegos que no usan saves, y usar una placa LOrom 1A0N, ajustando el procedimiento e ignorando lo relacionado al MAD-1
  • Agradecimientos a usuarios del foro ultimate-consoles por haber aportado a esta solución:
  • Usuario SKUNK (Iniciar el hilo para usar memorias sin saves lorom para juegos hirom)
  • Usuario AKIRA76 (Creador de versión inicial de script en python)

Enlaces relacionados