Abrir Menu...
NETO (C) 2000-2023

Red Kid 2500
Manual de Programação e a minha história com este processador
Neto (e-Mail)


      Para quem não conhece o Red Kid 2500 é uma solução integrada de Mega Drive e é usado por vários consoles como o SEGA Gopher, MD Play, Pegavision, Mega Drive 2017 recentemente lançado pela Tec Toy, alguns modelos produzidos pela ATGames, alguns clones chineses etc...
      A maior reclamação dos usuários destes consoles baseados no Red Kid 2500 é a qualidade do áudio e problemas de incompatibilidade com alguns jogos.
      Até o lançamento do Mega Drive 2017 eu nunca passei nem perto de um destes console baseados no Red Kid 2500, todos os meus consoles até o momento eram baseados no hardware original da SEGA, porém com o anúncio do relançamento do Mega Drive pela Tec Toy nos moldes do antigo, resolvi adquirir por curiosidade, pois diferente dos anteriores este prometia interface de leitura de SD integrada e atualizações via SD.
      Sabendo desta possibilidade assim que tive acesso ao console coloquei o SD no PC e verifiquei os arquivos. Resumindo ao abrir o SD pude verificar que na estrutura de pastas haviam os jogos que supostamente seriam na memória e também um arquivo "MDI.BIN" em uma pasta "SYS". Nomes bem sugestivos, já que SYS vem de sistema e MDI me fez pensar logo em "Mega Drive Init", e me despertou a curiosidade que este arquivo pudesse ser responsável pelo funcionamento do aparelho o que pude confirmar ao remover o SD do aparelho e verificar que sem ele o aparelho simplesmente não funciona reportando uma mensagem de erro.
      Outra curiosidade que me chamou a atenção é que o arquivo de inicialização roda em código 68K, o que confirmei ao renomear um ROM de Mega Drive para MDI.BIN e colocar na pasta de sistema e o jogo carregar diretamente.
      Sabendo que o arquivo de inicalização rodava em 68K o próximo passo foi fazer a engenharia reversa do código do arquivo de incialização para saber quais os procedimentos são executados para o sistema ter acesso ao cartucho e ao sistema de arquivos do SD e se algo poderia ser melhorado.
      Concluído o trabalho de recomposição do código do menu em Assembly 68K usando uma ferramenta de minha autoria o Neto Assembler Editor, comecei a analisar o código alterando alguns procedimentos que acessam endereços desconhecidos por quem programa para o Mega Drive tradicional o que impedia que este arquivo funcionasse em emuladores e no hardware real. A importância de rodar em emuladores é que você pode depurar o código sem precisar usar o hardware o tempo todo.
      Assim que comecei a entender como funcionavam alguns acessos do aparelho resolvi desenvolver um software próprio que pudesse controlar o sistema, tendo como versão de testes inicial somente a leitura de cartuchos, possibilitanto pela primeira vez a leitura do Jogo Super Street Fighter II via cartucho, com alguns problemas devido a limitação de hardware que não responde aos comandos do mapeador do cartucho, tendo também uma leve melhoria no desempenho dos jogos em relação ao software original.
      Durante meus teste e acompanhando as redes sociais percebi que não estava trabalhando sozinho e que tinha uma outra pessoa ( "Rafael Müller" ) trabalhando em paralelo para fazer algo em relação ao software do Mega Drive, porém ao contrário de mim, que estava trabalhando em código Assembler, ele estava trabalhando direto no binário (sem tirar méritos, pois já fiz muito isto e dá muito mais trabalho para modificar sem estragar os ponteiros).
      Minha ideia inicial era lançar o "Neto MD-DOS" quando estivesse com a interface concluída, mas devido a repercussão da primeira versão com suporte a cartuchos e também ao trabalho em paralelo do "Rafael Müller" resolvi ir lançando as atualizações em cima do código do Menu da Tec Toy enquanto o "Neto MD-DOS" não fosse finalizado.
      Outro fato é que minha versão do MDI com a interface da Tec Toy não era diretamente um hack em binário e sim código recompilado, o que me deu muita flexibilidade para implementar recursos como suporte a leitura do banco de dados e adição dos recursos de depuração e poder selecionar entre executar ou não a música.
      O Depurador inicialmente foi criado para que eu pudesse enviar comandos ao sistema e verificar o que acontecia. E isto me rendeu muita informação interessante, pois pude notar que o console mudava seu comportamento de acordo com as instruções que eram enviadas em determinados endereços.
      Um endereço em especial me chamou a atenção, pois mudava o comportamento das músicas e curiosamente surge uma atualização do Rafael Müller que corrige o som e resolvi entrar em contato inicialmente perguntando em uma postagem do Facebook se ele havia mexido em tal endereço e sim era isto mesmo. A partir deste momento para não ficar um trabalho redundante, já que praticamente os esforços paralelos estavam resultando na mesma coisa, resolvi entrar em contato com ele para que pudessemos trocar informações e fazer com que tivessemos um resultado melhor.
      Conversando com o "Rafael Müller", também fiquei sabendo que o menu de um aparelho portátil da Tec Toy rodava no Mega Drive 2017, resolvi adquirir uma unidade deste portátil e percebi que ele era tão ruim quanto o Mega Drive quando fora lançado. Rodando uma versão do depurador no portátil descobri que ele era muito similar ao MD 2017 da Tec Toy e confirmava algumas suspeitas minhas que havia postado em alguns fóruns durante a fase de pré lançamento do Mega Drive que a Tec Toy usaria a mesma base dos mal falados ATGames, porém o MDI da Tec Toy travava no portátil. Apesar de usarem praticamente a mesma arquitetura o MD 2017 tem a porta de cartuchos coisa que o portátil não tem e removendo todas as rotinas de acesso a esta porta e com mínimos ajustes no código consegui fazer com que o menu modificado também rodadsse no portátil.
      Finalmente após alguns meses trabalhando em paralelo consegui finalizar meu projeto inicial do "Neto MD-DOS" e pude abandonar a versão baseada no menu da Tec Toy. Tendo a vantagem de ter um código praticamente escrito do zero e tendo o conhecimento dos diversos procedimentos usados ficou mais fácil implementar recursos adicionais assim como adicionar o suporte as diversas versões de aparelhos baseados no processador Red Kid 2500 através de rotinas de validação.
      Agora vamos a algumas informações sobre os endereços usados pelo Red Kid 2500.
 

Alguns endereços conhecidos do Red Kid 2500

Endereço Tamanho Descrição
$00000000 Word      Este endereço é bem curioso, pois fica na área do ROM onde o STACK Pointer é definido. Escrevendo neste endereço, muda o comportamento do Red Kid 2500 que atualmente chamo de modo normal e modo programação, pois você precisa entrar no modo programação para poder configurar as velocidades do processador. Os valores usados para este endereços são:
  - $0004 - Modo normal;
  - $0017 - Modo programação.
$00A1010E Word      Este endereço controla o comportamento dos controles, sendo que os seguintes valores são usados:
  - $00C0 - Ativa a leitura do controle no modo TV;
  - $00CE - Desativa os botões XYZ no modelo portátil;
  - $00DE - Ativa todos os botões do modelo portátil.
$00A130F3
$00A130F5
$00A130F7
$00A130F9
$00A130FB
$00A130FD
$00A130FF
Byte      Este sequência de endereços é utilizado pelo mapeador SEGA e serve para mapear endereços de memória, muito usado em jogos que precisem acessar dados acima da área reservada para os dados do ROM do jogo, apesar de oficialmente somente um jogo exceder o limite do ROM de 32 Megabits (Super Street Fighter II), ests aparelhos baseados no Red Kid 2500 implementam o mapeador quando se é utilizado a SDRAM para executar os jogos. O uso do mapeador não é dificil cada endereço deste representa uma área de 512KB mapeado começando do endereço $080000 á $3FFFFF, a área de $000000 - $07FFFF é fixo e não pode ser mapeado, pois os vetores estão nos primeiros 512KB e o jogo poderia travar ao tentar acessar dados que não estariam mais visiveis e por questões obvias todo código que exiga mapeamento deve ser executado na área fixa para que o jogo possa concluir a rotina sendo executada. Veja como mapear um endereço acima da área de 32Mb. Vamos pegar o exemplo do Super Street Fighter II que mapeia a área de $400000 á $4FFFFF ná área de $300000 á $3FFFFF, sabendo que cada endereço deste mapea 512KB teríamos $400000 / $80000 = 8 e $300000 / $8000 = 6. Observando a lista de endereços e sabendo que a primeira área de 512KB não é mapeado teríamos na sexta posição o valor $00A130FD e tendo 1024KB de dados a ser mapeado devemos escrever o valor $08 em $0A130FD e $09 em $0A130FF, após a execução destes dois comandos os dados referente ao endereço $400000 á $4FFFFF estarão visiveís no endereço $300000 á $3FFFFF.
$00B00012 Word      Este endereço controla a velocidade de clock do processador Z80, sendo o melhor valor encontrado:
  - $0607.
$00B00018 Word      Este endereço controla a frequência do PSG, sendo o melhor valor encontrado:
  - $0077.
$00B0001A Word      Este endereço controla a velocidade de clock do processador M68K, sendo o melhor valor encontrado:
  - $0003 (Basicamente isto resulta em 9 MHz (27 MHZ / 3).
$00B00202 Word      Este endereço esta relacionado ao controlador do barramento do SD, sendo que os seguintes valores são usados:
  - $0000 - Finalizar a requisição do barramendo da Interface do SD Card;
  - $0100 - Inicializar a requisição do barramento da Interface do SD Card.
$00B00248 Word      Este endereço controla o status do barramento do SD Card, alguns testes são executados neste endereço para saber se a interface do SD esta pronta para enivar ou receber dados.
$00B00300 Word      Este endereço é usado para enviar e receber dados para a interface do SD Card.
$00B01000 Word      Este endereço controla o formato da saída de vídeo, sendo os seguintes valores conhecidos:
  - $03A0 - Modo LCD - Sinal de vídeo para uso no LCD interno dos modelos portáteis;
  - $0425 - PAL-M - Sinal de vídeo em 60Hz com sub portadora de cores em PAL-M;
  - $04A0 - NTSC - Sinal de vídeo em 60Hz com sub portadora de cores em NTSC;
  - $04A6 - PAL - Sinal de vídeo em 50Hz com sub portadora de cores em PAL europeu.
$00B01006 Word      Este endereço é usado para afinar a frequência da sub portadora de cores, sendo usado os seguintes valores:
  - $0000 - Para a sub portadora de cores PAL-M e NTSC;
  - $0020 - Para a sub portadora de cores PAL europeu.
$00B0100C Word      Este endereço funciona por conjunto de bits, sendo que cada bit controla como o console vai funcionar, sendo os seguintes Bits conhecidos:
  - BIT 2 - Controla se o jogo é do tipo NTSC ou PAL (Formato de imagem, não ralacionado ao sistema de cores).
    - 0 - NTSC;
    - 1 - PAL.
$00B01016 Word      Este endereço controla a posição da imagem sendo que o primeiro byte controla a posição Y em pixels e o segundo byte a posição X em passos 8 pixels ( 1 tile ) por byte.
$00B01018 Word      Este endereço é usado para ajustar a posição vertical da imagem vertical na TV sendo, usado os seguintes valores:
  - $0015 - Posição vertical para a imagem no modo portátil;
  - $001C - Posição vertical para a imagem no modo NTSC e PAL-M;
  - $0035 - Posição vertical para a imagem no modo PAL.
$00B0101E Word      Este endereço funciona por conjunto de bits, sendo que cada bit controla como o console vai funcionar, sendo os seguintes Bits conhecidos:
  - BIT 0 - Controla o comportamento da VDP, que por padrão vem em 1 causando problemas em alguns jogos como o Contra Hard Corps que não funciona as rolagens em algumas fases:
    - 0 - Ativa a rolagem da VDP para certos jogos;
    - 1 - Desativa a rolagem da VDP para certos jogos.
  - BIT 2 - Define se o console é tipo exportação ou local:
    - 0 - Exportação;
    - 1 - Local.
$00B01028 Longword      Este endereço serve para mapear o endereço do ROM no endereço $00000000, Após defenir o valor neste endereço o sistema passará a enxergar os dados contando a partir do ponto definido como zero. Por exemplo se você usar o cartucho do Sonic & Knuckles com o cartucho do Sonic 2 acoplado e definir este endereço como $00200000 e der o comando de inicialização do jogo será executado o jogo do Sonic 2 como se não existisse o Sonic & Knuckles devido ao remapeamento da área do ROM, o mapeamento executado por este endereço é diferente do mapeador SEGA que remapeia 512KB por comando e não remapeia o endereço $00000000.
$00B01038 Word      Este endereço ajusta a largura da imagem em múltiplos de 8 pixels ( 1 tile ), somente o byte de menor valor ($0B01039) efetivamente responde aos ajustes.
$00B0103C Longword      Este endereço é usado para indicar o tamanho do SDRAM usado pelo último software carregado ( Loader / ROM ). Você pode regravar no endereço já utilizado sem nenhuma restrição, este endereço é somente um auxiliar para que você possa organizar os dados na SDRAM evitando que por exemplo você grave na área que pode estar residindo seu software atualmente em execução.
$00B01054 Word      Este endereço controla a frequência do processador Yamaha, sendo os valores $261B a $2620 os mais usados.

 
 

Algumas particularidades do Red Kid 2500


    O interessante destes aparelhos baseados no Red Kid 2500 que tudo nele é por software, podendo ser ser feito desde o chaveamento até a mudança da transcodificação sem precisar abrir o aparelho. Na tabela abaixo mostro alguns exemplos de como configurar usando os endereços da tabela anterior.
 

Exemplo de como modificar a região do console.

Descrição Procedimento
Região Américas   - $0C0A em $00B0100C;
  - $0002 em $00B0101E.
Região ASIA   - $0C0A em $00B0100C;
  - $0006 em $00B0101E.
Região Europa   - $0C0E em $00B0100C;
  - $0002 em $00B0101E.

 

Exemplo de como modificar o sistema de cores da TV.

Descrição Procedimento
NTSC-M   - $04A0 em $00B01000;
  - $0000 em $00B01006;
  - $001C em $00B01018.
PAL-M   - $0425 em $00B01000;
  - $0000 em $00B01006;
  - $001C em $00B01018.
PAL europeu   - $04A6 em $00B01000;
  - $0020 em $00B01006;
  - $0035 em $00B01018.

 

Créditos:


    - Neto - ( Esrael Loureiro Guimarães Neto );
    - Rafael Muller.