Registrarse

Aprendiendo a hacer cartuchos de GBA (Día 13: Más circuitos)

Estado
Cerrado para nuevas respuestas.
Viendo que en este foro no hay nada de documentación acerca de los cartuchos de GBA, y estos son bastante importantes porque aunque no los usemos para ROMhackear son el soporte físico en el que los juegos originales vienen, he decidido hablar un poco acerca de ellos.

En este post iré detallando los aspectos técnicos de varios juegos de GBA, principalmente me centraré en los juegos más usados por aquí, pokémon rubí y pokémon rojo fuego.


Este es el esquema básico de un cartucho de GBA, en próximas actualizaciones detallaré el funcionamiento de los pines.

Pokémon Rojo Fuego



Este cartucho contiene una Mask ROM*1 (Mask Read-Only Memory, circuito integrado en el que se almacenan de fábrica datos y no se puede modificar)
Y una memoria flash*2 de 1Mbit (128Kbytes) en la que se guarda la partida.


Pokémon Rubí



Este cartucho es algo más complejo que el anterior, vuelve a presentar la Mask ROM y la memoria flash, pero en posiciones distintas pues este cartucho ha de dejar espacio para un módulo RTC (Real-Time Clock), compuesto por una pila*3, un cristal oscilador*4 y un circuito integrado*5 (un DS1307 o parecido) para contar los segundos, en definitiva el RTC es un sistema que permite controlar el tiempo transcurrido aunque el cartucho no esté enchufado en la consola puesto que la pila alimenta este sistema, se estima que un sistema de estos funciona entre 9 y 17 años con una sola pila. El juego usa este sistema para controlar si es de día o de noche y el crecimiento de las bayas, ademas de otros eventos temporales.

Pronto actualizaré con más cartuchos, información acerca de los pines y más :D

PD: un adelanto de como es una Mask ROM por dentro:


Esto es una ampliación del interior de una Mask ROM, los puntos oscuros y los brillantes se pueden interpretar en binario como 0's y 1's respectivamente
 
Última edición por un moderador:
Respuesta: [Hoy en así se hace (?)] Cartuchos de GBA

Bastante interesante el asunto. Es bueno tener diversidad de usuarios que amplian el panomara de lo que es un videojuego.

Por mi parte estaré pendiente a las cosas que puedas actualizar, muchas gracias.

PD: El titulo deberia ser [Hoy en: "así se hace" (?)]
 
Última edición:

Caeles

Midnight Melody
Re: [Hoy en así se hace (?)] Cartuchos de GBA

Uuuh, es como mis esquemas de clase (?)

Bromas aparte, gracias por traer esto aquí, no tenía ni idea de que un armatoste como el RTC vivía dentro de mi cartucho de Zafiro. Estaré pendiente de las actualizaciones ^^
 

VGS

I Love Enchiladas ♥
Respuesta: [Hoy en así se hace (?)] Cartuchos de GBA

Wow, me acuerdo a ver abierto un cartucho pero no sabia que cosas contenía.
Muy buena información y si es importante.
Estaré al pendiente de las actualizaciones :3
Un saludo.
 
Respuesta: [Hoy, en: "así se hace" (?)] Cartuchos de GBA

Nueva actualización :3

He decidido desoldar los chips de un carctucho que tenía por ahí (mario vs donkey kong), para ver como son las conexiones de la Mask ROM y la memoria flash, es un cartucho prácticamente idéntico al el del pokémon rojo fuego.

Aviso que las imagenes tienen un tamaño gigantesco, están escaneadas a 1200 dpi para no perder nada de detalle.



Cuando haya terminado publicaré las conexiones del chip en una sola imagen mostrando las dos capas (fron y back).

Respecto a la imagen que había publicado con anterioridad mostrando los pines del cartucho hoy os explicaré la función de cada uno.



El acceso puede ser tanto secuencial como no secuencial. El primer acceso ha de ser no secuencial. Este tipo de acceso se hace poniendo los 16 bits de la dirección de la ROM en los pines AD0 a AD15 y poniendo el pin /CS en "low" para fijas la dirección. Entonces /RD se pone en "low" y luego en "high" para leer 16 bit de la dirección de la ROM. Las siguientes direcciones de la ROM se pueden acceder volviendo a poner /RD en "low" y "high" sin necesidad de especificar la nueva dirección pues hay un contador en la ROM para saber que nueva dirección leer.
Créditos a Gameboy Advance por las indicaciones y mucha información acerca de los cartuchos de GBA
 
Última edición por un moderador:
Respuesta: [Hoy, en: "así se hace" (?)] Cartuchos de GBA (Día 2)

Otra nueva actualización!




Ya he trazado las conexiones del cartucho por ambas caras y las he representado en colores distintos (azul capa superior, rojo capa inferior) los puntos negros son unas cosas llamadas vías que permiten conectar trazados de cobre de una de las caras con los de otra cara.

Con la próxima actualización traeré información sobre la memoria Flash y la Mask ROM empleados en este cartucho.

Si queréis saber cualquier cosa acerca de los cartuchos que no haya comentado o algo nos ha quedado claro no dudéis en dejar un comentario preguntando al respecto! :D

PD: Por si no os habias dado cuenta con esta documentación/investigación pretendo llegar hasta la producción casera de cartuchos de GBA
 
Última edición por un moderador:

enanogm

Usuario antiguo de Wah
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

la verdad nunca jamás tuve un cartucho de gba en mis manos (solo de sega y family ja), y tampoco creo que lo tenga (a estas alturas...)

pero aún así encuentro muy muy interesante este post.
Creo que compartir este conocimiento técnico es útil y le da un toque de "profesionalismo" al foro y a lo que se hace acá.

en verdad muy buen aporte y felicitaciones por el laburo de investigar y explicar!

saludos!
 
Última edición:
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

Información anticuada, el chip de 128Mbit de ese PDF no cumple las características necesarias, pues no tienen versión de 16 bit. La ultima actualización sobre los IC requeridos corrige este error con otro modelo de memoria flash

Como ya tengo la estructura del circuito tanto de la Mask ROM como de la memoria flash he decidido buscar en internet componentes con características parecidas.

La Mask ROM (donde se almacena la ROM del juego) es basicamente una memoria flash de 48 pins con una capacidad de 128Mbit (16MByte, que curioso justo lo que pesa una ROM de pokémon), y una interfaz de datos de 8 bit.

Esta es una memoria flash con esas carácteristicas y la tenemos tanto en 128Mbit como en 256Mbit, 512Mbit, y 1Gbit, tanto en interfaces de 16 bit como de 8 bit
http://www.farnell.com/datasheets/1499238.pdf

La memoria flash (donde se guarda la partida) es una memoria flash de 32 pins con una capacidad de 1Mbit, con una interfaz de 8 bit.
http://www.icchip.info/datasheet/M5M28F101RV-12.pdf

Intentaré hacer un presupuesto y comprar un par de estos componentes a ver si consigo montar un cartucho, ah por cierto para programar la memoria flash necesito un programador willem.

PD: para los curiosos, sí, se puede meter una ROM expandida a 32MByte solo hay que cambiar a una memoria flash de 256Mbit.
 
Última edición:

Cheve_X

MoonLover~
Miembro de honor
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

Con éste tema siempre logras ponerme cachondo (?

Oye, me encanta lo que te traes entre manos, créeme que me interesaría mucho si logras hacerlo, poder aprender algo :p (Si tuviera una GBA a lo mejor también lo pruebo xD)
Sigue actualizando, porfa D:
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

Muevo a la zona de investigación.

Por cierto, muy bueno tio, que no te habia dicho nada por aquí, pero es genial!
 
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

Bien, dado que mi gba murió inesperadamente he tenido que comprar una segunda de mano para poder seguir con la investigación y para mantener mi colección de consolas XD
No pasa nada, me salió muy barata y encima es edición limitada de groudon :3
En fin, sigamos con la investigación:
Tomando en mis manos el frio e inservible cuerpo de mi vieja gba desoldé el lector de cartuchos, pero el lector de cartuchos de por si no es más que una pieza de plástico con pines metálicos para establecer conexión con el cartucho, así que usando un arduino (una pequeña placa de hardware programable con la que se pueden hacer maravillas) haré una conexión con el cartucho, desafortunadamente el arduino que tengo (arduino uno) no tiene suficientes pines como para conectarme con el cartucho, así que he buscado por ahi un clon de un arduino mega (el original cuesta 45€ y a mi me ha costado 9$ XD) que me está llegando ahora mismo desde china, estimo que llegará en 2 semanas.

Mientras me llega el arduino estoy haciendo otras cosas, encontré por internet un diseño de un lector de cartuchos de gba que justamente usa un conector y un arduino mega así que usaré ese diseño. [Segmentation Fault]

El post contiene mucha información, bastante ya la sabía pero otra no y es muy util, el creador del post pone a disposición de todo el mundo toda la documentación de su investigacion (al igual que estoy haciendo yo :3), entre esa documentación se encuentra el diseño de un circuito para conectar el cartucho de GBA con el arduino mega, también te invita fabricar ese circuito desde una empresa llamada OSHpark pero a mi me parece bastante innecesario pues yo sé hacer estos circuitos por mi mismo, y me sale muy barato en comparación con los 25$ + gastos de envío que me cobran ahi por 5 circuitos.

También estoy tomando medidas de la carcasa de un cartucho de gba, ya que es importante tener las dimensiones si pretendo producir carcasas para los cartuchos.

Actualizaré a medida que vaya haciendo estas cosas ^^
 

Oigres

Wuɔɥo ɐ ɯuɔɥo
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 3)

Ni puta idea tienes tú sobre como de bien me viene esto. Gracias!
 
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 4)

Se ve bastante detallado el avance sobre el tema. Felicitaciones al respecto.
Sería muy (MUY interesante) continuar la investigación con la inserción de hacks pokemon en cartuchos para GBA. La última vez intenté con el R4gold en un GBA pero no tuve buenos resultados (el juego no cargó). Con mucha suerte la tarjeta sirve para cargar algunos clásicos de pokemon (Rojo Fuego, Rubí) pero con bastante lentitud, y mayormente sin sonido (ello implica comprar el cartucho de Fire Red, o Rubí para jugar normalmente. Pero éste cartucho tiene la ventaja de colocar bastantes juegos en uno solo). Si existe la posibilidad de insertar juegos hack en esta tarjeta ayudaría bastante al romhacking de hoy.
Lo otro que intenté fue usar un emulador que descargé de internet para mi DS lite. Es bastante útil para jugar los últimos pokemon (black 2, HGSS, Mystery Dungeon, etc.). Pero tampoco arranca correctamente para juegos de hack creados en el PC.
Saludos y buen trabajo!
 

CelticFrostie

Sexador de pollos
Lo primero gracias a @Sayer301! por moverlo a la zona de investigación, es donde debería estar desde el primer momento, ya que le da un aspecto más profesional al RH en éste foro.
Me alegra que haya gente que se atreva con estas cosas, yo no creo que fuera capaz de llegar a nada, pero la verdad es que si consigues completar la investigación y hacer funcionar hacks en una GBA tú solito, te llevas mi repu, mi amor incondicional (?) y todo lo que tú quieras.
Sobre todo en el caso de los hacks completos, es un detalle muy bonito tenerlos en cartucho (mientras sea para ti y no se lo compres a los chinos), y la verdad me gustaría tener varias betas por ahí.
Eso sí, sin las pegatas no son nada, espero que @Rdio. se encargue de hacerlas (?)
Y bueno, te seré sincero, de electrónica y hardware no tengo ni puta idea, así que lo único que te puedo enviar desde aquí es mis dieses y todo mi apoyo. Muy interesante y bonito, y como ya comenté, le da un toque más profesional al concepto de "ROM Hacker".
Saludos y suerte!
 
Re: Aprendiendo a hacer cartuchos de GBA (Día 4)

Bueno, pues como algunos sabréis he comprado un cartucho pirata de Pokémon Quartz a china para ver como funcionan estos cartuchos.

https://cdn.discordapp.com/attachments/488666706194071552/629720114933006377/e9hdDuhl.png[/img
Versión censurada (?)

https://cdn.discordapp.com/attachments/488666706194071552/629720249541066762/rMCuXw1l.png[/img
Versión sin censurar (?)

Ya lo he desmontado y el cartucho es bastante parecido a lo que me esperaba excepto por un par de cosas:
Primero la memoria donde se guarda la partida es SRAM no flash, lo que implica que la partida solo se mantiene guardada mientras haya una corriente fluyendo, que proviene de la pila osea que si quitas la pila (como me pasó a mi pues quería tener acceso al chip que hay debajo) pierdes la partida (en mi caso 1h de juego XD)
El otro factor que me llamó la atención aunque era de esperar es el pegote negro que hay en medio del cartucho, donde supongo que se esconde el RTC.

Bueno, ahora procedamos al análisis del cartucho:

La calidad de los materiales empleados es bastante peor de lo que podríamos ver en un cartucho normal de GBA, lo que es la placa en sí se la nota menos cuidada y los pines de cobre expuestos para conectar con la GBA no están cubiertos de esa capa dorada de lo cartuchos originales la cual sirve para proteger mejor el cobre, sobre el circuito además se pueden distinguir unas manchas blancas las cuales si calientas con el soldador se evaporar lo cual me hace pensar que es flux (más conocido en español como colofonia, es una resina empleada en cosmética, para mantener arcos de violines y para facilitar la soldadura con estaño) lo que puede indicar que partes del circuito se soldaron a mano.

Como ya había comentado el chip en el que se guarda la partida es una SRAM, es el chip que se encuentra a la derecha.


La pila es una pila normal de 3V como la que encontramos en lo cartuchos normales pero que además de alimentar al RTC (que teoricamente está debajo de esa mancha negra), también alimenta a la SRAM.

El chip de debajo de la pila debería ser la memoria flash en la que se almacena el juego aunque aún no he encontrado nada de información sobre él y tengo que mirarlo mejor porque parece tener más pines de los que esperaba que tendría, pero también puede ser que los contase mal porque esos pines son muuuy pequeños.

En definitiva el cartucho es algo peor que los originales pero funciona y eso es lo que importa y parece que ese chip de memoria flash me puede dar algunas pistas importantes sobre como producir mis propios chips.
Cada vez estamos mas cerca de poder producir cartuchos caseros! Ahora me voy a poner a buscar chips que cumplan las características que busco y ver si puedo conseguirlos y además crear algunos circuitos para ellos.
Aviso que los primero circuitos que haga serán completamente caseros así que la calidad de los mismos dejará bastante que desear... XDXD

Permaneced atentos para recibir novedades pronto! ^^
 
Última edición por un moderador:
Re: Aprendiendo a hacer cartuchos de GBA (Día 5)

Hago una pequeña actualización avisando de que ya he encontrado (teóricamente) los ICs (Integrated Circuits) que necesito.

Una memoria flash de 1Mbit a 8 bit de ancho de transferencia para guardar la partida.
http://www.icchip.info/datasheet/M5M28F101RV-12.pdf
Este IC se parece muchísimo al que venía en el Pokémon Quartz de hecho es del mismo fabricante (mitsubishi), la única diferencia que he encontrado es que este es una memoria flash y por tanto no necesita una pila para funcionar. También hay alguna diferencia en la colocación de los pines, pero por lo demás parece tener las mismas carácteristicas.

El otro IC también es una memoria flash pero de mayor tamaño, en un cartucho normal de GBA sería una Mask ROM pero recordemos que estas vienen preprogramadas de fábrica y no se pueden reprogramar. Es una memoria flash de 128Mbit a 16 bit de ancho de transferencia.
http://pdf.datasheetcatalog.com/datasheet2/7/0tyt6dxeiykj87yi2qs99a44y3ky.pdf
Se trata dentro de esa lista de memorias del modelo NAND128W4A que es el único que cumple las características que buscamos.

Hay que aclarar que como estas memorias flash son reprogramables una de las medidas de seguridad que suelen tomar los programadores en los juegos es poner unas lineas de código que intenten borrar la memoria flash del juego, si se trata de una Mask ROM esta acción será inocua, pero si usamos memoria flash podría borrarse todo el juego, afortunadamente estas memorias flash suelen tener un pin que cuanto no está conectado a voltaje impide la escritura en la memoria.

He pedido precios en alibaba por ambos IC y estoy a la espera de que respondan.

Ahora queda realizar el circuito para los cartuchos, si queréis que haga un tutorial sobre como diseñaré los circuitos y otro sobre como producirlos de forma casera decidlo por comentario, sino abreaviaré y mostraré directamente los resultados.

El arduino mega ya está en camino, asi que también podré ir haciendo el lector de cartuchos, para hacer "backups" de juegos que ya tengamos y más adelante convertirlo en un programador para programar los cartuchos caseros.
 
Última edición:
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 6)

Actualizo con jugosas y suculentas novedades! <3

Ya me he puesto en contacto con vendedores de chips en china! Y aunque las negociaciones vayan algo lentas, tienen vacaciones hasta el 25 de este mes pues es el año nuevo chino (si, increíblemente los chinos tienen vacaciones), ya he conseguido los primeros presupuestos ^^
El chip M5M28F101 me lo ofrecían por 10$/pieza o por 6$/pieza, pero negociando con el segundo vendedor lo conseguí por 4$/pieza. Este es el chip de 1Mbit en el que se almacena la partida.

Ese es el esquema del chip y su diseño para poder hacer circuito con él.

El otro chip, el NAND128W4A todavía no lo he conseguido pues los vendedores no me contestan... ya sabéis las vacaciones XD

Bueno, espero que pronto me respondan y me ofrezcan presupuesto ^^
Os mantendré informados :3
 
Última edición por un moderador:

Cheve_X

MoonLover~
Miembro de honor
Respuesta: Aprendiendo a hacer cartuchos de GBA (Día 7)

Hey! ;e alegro que vaya todo sobre ruedas ^_^

¿El software que usas (EAGLE) es propio del chip? :p
 
Estado
Cerrado para nuevas respuestas.
Arriba