Conserto de cartucho de Mega Drive com Chips BIOS antigos.

Olá.
Neste post vou mostrar meu cartucho flash de Mega Drive feito de chips velhos de BIOS e falar sobre o processo. Eu fiz isso porque meu cartucho do Sonic não estava funcionando desde sempre. Usei Arduino, Python e um pouco de Processing (bom para visualizar os bits e controlar os pinos do Arduino). Desculpe pelas fotos ruins e uma boa leitura!

O paciente

Eu tenho o Mega Drive desde 12, (tenho 20 agora). Um dos jogos que veio com ele foi ‘Sonic the hedgehog, mas que nunca funcionou bem. No início  dava defeito na fase ‘Marble Zone’, e depois ele começou a mostrar as mensagens dizendo illegal instruction” logo após o reset. Então eu nunca tive a oportunidade de jogar as outras fases senão a primeira, mas isso mudou esta semana

WP_20150127_13_22_15_Pro

As vítimas

Então, o que há de especial com esses flashcarts? Eles são flash, não é mesmo? Eu tenho uma pilha de sucata aqui em casa, e esses dias eu descobri essas memórias flash, eles estão em um monte de coisas: DVD players, placas de impressora e computadores velhos. As memórias que eu encontrei foram EN29F040, 39v040 entre outras, mas apenas uma delas tinha interface paralela, a EN29F040.

Eu vi pessoas fazendo flashcarts pra Game Boy, eles usam exatamente este tipo de memórias, mas eles são em formato SMD. A única memória que eu tinha, era uma de 8 bits, logo eu precisava de duas, pois o Mega Drive usa um barramento de dados de 16 bits.

Descobri que essas memórias são usados em alguns computadores realmente antigos, como na pilha de sucata que temos na universidade. Eu tentei colher o maior número de memórias que pude, o que significa 6, que foi o número de memórias que eu pude encontrar. As memórias utilizados nas essas placas-mãe são geralmente de 256KB ou 2 Mbit com barramento de dados de 8 bits.

Encontrei as seguintes memórias:

ASD AE29f2008

EON 29f002

Winbond W49F002u

Macronix 28f1000

2x SST 39s020

WP_20150211_12_41_16_Pro

Quem criou esta placa nunca pensou que eu iria fazer isso.

O plano

Ok. Agora eu consegui as memórias, mas elas são 8 memórias bit, e o Mega Drive é um videogame 16 bits, o que fazer agora? A resposta é simples: Basta usar dois chips.
Eu aprendi que em minhas aulas de microprocessadores, se você quiser fazer uma memória com um barramento de 2n bits de dados a partir de duas memórias com um barramento de n bits, apenas compartilhar os pinos de endereço(Address) e os pinos de escrita, leitura e ativação (Write, read e enable), deixando apenas os pinos de dados sem compartilhar.

O procedimento.

A primeira coisa que fiz foi empilhar as memórias e soldá-las nos pinos que falamos falamos antes, mais VCC e VSS, deixando apenas os pinos de dados sem soldar.

WP_20150127_13_51_57_Pro

Os pinos de dados não devem ser soldados.

WP_20150127_14_01_40_Pro

16 bit memory. Done.

A pinagem das memórias que consegui na sucata:

020
Pinagem da SST 39sf020.

Depois retirei o chip com problemas do cartucho. Isso foi fácil.

WP_20150127_14_38_48_Pro

Chip original removido, os capacitores também foram trocados.

Alguém felizmente já havia descoberto a pinagem do chip do Sonic, Que sorte. Nesse link você também pode entender um pouco sobre desenvolvimento de jogos para Mega Drive.

pinout Imagem retirada de zophar.net

Sabendo disso, eu remapeei cada pino das memórias flash para seu correspondente na ROM original. Não é a coisa mais bonita que você vai ver hoje, mas me deu os resultados esperados.
Eu usei os pinos D7-D0 de uma das memórias como D15-D8 do cartucho.

 

WP_20150211_12_43_06_ProCartucho Pronto.

A coisa estava construida, mas sua alma ainda era de programas BIOS, Eu só precisava colocar 4194304 novos bits em seus lugares exatos.

Fios e Fios.

Eu tinha o cartucho em mãos, como saber se ele funcionava, pelo menos?
Sim, eu poderia usar um ATmega8 em uma protoboard e alguns 595s para controlar os 18 pinos de endereços, 16 pinos de dados e 3 pinos de controle. Ei! Eu poderia usar apenas portas NAND! Brincadeira, eu usei meu Arduino Mega mesmo.

Outra coisa tirada da sucata foi o slot ISA que eu consegui em uma placa-mãe velha também. O slot ISA, ou seu maior sub-slot (existe essa palavra?), tem na verdade, 2×31 pinos e o cartucho de Mega Drive possui 2×32 pinos, a coisa boa é que os últimos pinos são um GND redundante e um pino sem função, de modo que o slot ISA pode ser usado muito bem para conectar um cartucho de Mega.
Eu usei os pinos 14-29 para dados, 30 -50 para endereços e 51-53 como controle, (
Write, read e enable).

WP_20150212_16_07_26_Pro

Desculpe pela qualidade ruim.

Programando.

Eu fiz o cartucho em uma tarde, pensando que eu poderia terminar o software antes do dia depois,estava completamente errado, eu não sei nada

Eu usei três pares de software:

1 – Software de teste, o exemplo Standard Firmata no Arduino e uma adaptação de um dos exemplos da Firmata no Processing, que me deixa acessar cada word no chip e ver o que está programado, e comparar se os bits são iguais aos da imagem de ROM e testar se todas as linhas estavam ligadas certas e se estavam funcionando.

Captura de Tela (30)Esse é o começo da ROM. 0x5345 pode ser lido, isso é Ascii ‘SE’ de ‘SEGA MEGA DRIVE’.

2 Dumping software, esta foi uma viagem de aprendizado, por que não aproveitar o hardware para fazer backup de ROMs? Isso também me permite saber se a imagem ROM programada está funcionando. Ele é composto por um código Arduino que lê as os bytes no cartucho e envia-os para o computador, e um script python que recebe os bytes e os salva em um arquivo.
3 – Software de Gravação, o software de gravação é composto por um script python que lê um arquivo no formato .bin” e envia-o pela porta serial, e um código de Arduino para receber os bytes e colocá-los em seus lugares na flash.

Os códigos podem ser encontrados aqui.

E funciona mesmo!

Para minha surpresa, o cartucho funcionou muito bem, sem bugs ou as mensagens de  “illegal intruction” como no chip antigo.

Abaixo está um vídeo do cartucho funcionando, não sou muito bom em Sonic, mas pelo menos consigo chegar na fase Spring Yard agora.

É isso, obrigado pela leitura. Até a próxima.

Creative Commons License
Este trabalho está sobre a licença internacional Creative Commons Attribution-NonCommercial-ShareAlike 4.0.

Robson Couto

Estudante de engenharia elétrica. Gosto de dedicar meu tempo a aprender sobre computadores, eletrônica, programação e engenharia reversa. Documento meus projetos no Dragão quando possível.

17 thoughts on “Conserto de cartucho de Mega Drive com Chips BIOS antigos.

        1. eu vou tirar um dia pra montar de novo esses “flashcarts” de atari, mas soldando um cabo flat na entrada do cartucho e numa placa que contem a memória ROM e uma porta inversora que será o CS do chip

  1. Parabens pela descoberta, Robson! Agora implemente o que voce conhece de matematica binaria pra fazer um cartucho com 2 ou mais jogos :D

    Dica: As eproms e as flashes de 40 pinos tem a mesma pinagem do cartucho (ou bem semelhante) :)

      1. Robson, depende de onde voce está. Esses chips (de 32 pinos DIP de placa mae) sao muito comuns, praticamente sucata, aqui em SP. As memorias que encaixam direto ai seriam as de 4 digitos (27C1001, 2001, 4001, 8001, 27C160, 27C322) mas sao todas muito caras, o ideal é ir no caminho que voce está mesmo. Boa sorte!

        1. Valeu Alexandre, eu nunca tentei usar EPROMS porque elas, além de serem caras como disse, precisam de tensões maiores que as que o Arduino pode fornecer para serem gravadas, além de que pra apagar é necessário uma luz UV se não me engano.

  2. Muito bom cara, a tempos venho querendo fazer isso pois o flash cart everdrive para mega ainda é muito caro, parabens pela sua descoberta, fez um otimo trabalho.

    1. Muito obrigado Mardex, desculpa o atraso na resposta.
      Sim, realmente bem são caros, apesar de serem relativamente simples.
      O flashcart de GBA, que é um sistema mais avançado, é vendido no Brasil mesmo até de cem reais.
      Mas minha intenção era mesmo consertar o cartucho, ou quem sabe testar se a ideia era possível.
      Obrigado novamente e volte mais vezes.

Leave a Reply

Your email address will not be published. Required fields are marked *