Problemas e Soluções: Tapper e 2600RGB + Framemeister


Citei recentemente aqui no Skooter Blog que instalei um kit 2600RGB em um Atari 2600. Agora jogo Atari 2600 com uma imagem muito nítida e cores fantásticas.

Eu ainda vou falar de toda essa empreitada aqui no Skooter Blog, tem uma série de artigos no forno. Mas a fila é grande, então vai demorar um pouco.

E este artigo só está saindo antes por aqui por ser da série Problemas e Soluções, que tem prioridade porque se não escrevo rápido esqueço a solução. 🙂

Antes mesmo de comprar o 2600RGB, já estava ciente de que pelo menos um jogo tinha problemas com ele: Warlords. Mas no mesmo forum onde o problema foi relatado (AtariAge), o membro SpiceWare já apresentou um hack como solução, resolvendo o problema, ao menos para todos que tem o Harmony Cartridge.

O Atari 2600 é um sistema único no sentido de que os próprios jogos é que cuidam de tarefas como temporização e sincronização. Por conta disto, alguns programadores tentaram fazer coisas diferentes, ou simplesmente erraram na programação mesmo, e isso gerou alguns jogos com problemas de temporização/sincronização.

TVs CRT normalmente são bastante tolerantes com sinais fora de especificação, então jogamos muitos desses jogos por anos sem qualquer problema. Mas o Framemeister é mais exigente. Sinais fora do padrão fazem com que ele se perca, principalmente quando ele trabalha com sinal RGB.

Logo que terminei a instalação do 2600RGB testei vários de meus jogos favoritos. A grande maioria funcionou perfeitamente. Coloquei vídeos de alguns deles no meu canal no Youtube. Porém, encontrei problema em dois jogos:

  • Video Pinball
  • Tapper

O Video Pinball em sua versão NTSC não funciona de forma alguma. Apenas as versões PAL funcionam. Não tenho solução ainda.

Quanto ao Tapper, ele aparece com os gráficos um tanto bugados, como se um sinal entrelaçado tivesse sido desentrelaçado incorretamente. Confira como ficam ambos os jogos no vídeo abaixo:

Resolvi então procurar informações a respeito de possíveis problemas de sincronização/temporização desses jogos e acabei encontrando um thread no AtariAge falando de problemas com o Tapper. Aparentemente o programador tentou fazer um display entrelaçado, mas com temporizações incorretas. Na maioria das TVs CRT não há problema, o jogo funciona normalmente apesar das temporizações incorretas e, de fato, mostra uma imagem entrelaçada. Outras TVs mais antigas reclamam do sinal fora de padrão. Com 2600RGB + Framemeister por vídeo composto ou S-Video também não tem problema. Mas usando a saída RGB do 2600RGB conectada ao Framemeister, o problema aparece.

Pois bem, em outro thread, ainda no AtariAge, o membro Omegamatrix criou uma versão PAL60 do Tapper, e nela já corrigiu o problema de temporização. Ainda em outro thread da AtariAge, o membro alex_79 fez uma nova correção de temporização na ROM do Omegamatrix.

Ambas as versões PAL60 funcionam normalmente com a saída RGB de 2600RGB + Framemeister. Porém eu não preciso realmente de versões PAL60. O que eu queria mesmo era uma versão original NTSC apenas com a correção das temporizações.

Eu não entendo nada de código Assembly, mas mesmo assim resolvi dar uma olhada nos códigos disponibilizados pelo Omegamatrix e pelo alex_79 em suas correções, na tentativa de entender o que eles alteraram para tentar fazer o mesmo na versão original NTSC.

Ao abrir o código encontrei uma grata surpresa, ambos deixaram no código um par de variáveis que permite ativar/desativar o código que eles modificaram, que estão envolvidos dentro de estruturas if/else com o código original e o modificado. As variáveis estão nas linhas 72 e 73:

NTSC = 0
SCANLINE_FIX = 1

Agora as coisas ficaram mais fáceis. Deduzi que para gerar uma versão NTSC original com as correções de temporização era só alterar a variável NTSC para 1:

NTSC = 1
SCANLINE_FIX = 1

Faltava ainda descobrir como compilar esses códigos. Com ajuda do Google, encontrei rapidamente o assembler dasm e também os binários para Windows. Na primeira tentativa de montagem, o binário gerado tinha 2 bytes a mais do que deveria e não funcionou no emulador Stella. Fiz mais uma rápida pesquisa e achei um guia de programação, também na AtariAge, explicando que eu precisava usar a flag -f3.

Agora sim, para gerar os binários NTSC com as correções de temporização eu usei os seguintes comandos:

E:\ROMs\Atari 2600\XRGB Mini> d:\tools\dasm\dasm "Tapper (fixed).asm" -f3 -o"Tapper (fixed).bin"
E:\ROMs\Atari 2600\XRGB Mini> d:\tools\dasm\dasm "Tapper (fixed2).asm" -f3 -o"Tapper (fixed2).bin"

Sucesso! 🙂

Ambas as versões binárias funcionaram perfeitamente no meu Atari 2600 com mod 2600RGB e saída RGB conectada ao Framemeister. Não notei diferença entre eles.

O vídeo abaixo é da versão com as correções do Omegamatrix:

Agora sim, posso jogar Tapper, um de meus jogos favoritos, com a melhor imagem possível em um Atari 2600 e sem glitches. 🙂

Ainda falta consertar o Video Pinball, mas no caso dele não encontrei nenhuma correção pronta que possa me ajudar. Resta estudar o código Assembly ou esperar pelo auxílio da comunidade.

Apenas para complementar, os binários do Atari 2600 podem ser desmontados com o Distella (e remontados com o dasm), o que facilita um pouco o trabalho de modificar essas ROMs. Do contrário teríamos que trabalhar diretamente com o código binário em editores hexadecimais.

Para finalizar, deixo aqui os dois binários do Tapper com as correções:

0 0 votos
Article Rating
(Visitado 14 vezes, 1 visitas hoje)

Link permanente para este artigo: https://www.skooterblog.com/2017/07/26/problemas-e-solucoes-tapper-e-2600rgb-framemeister/

Inscrever
Notificar sobre
guest

0 Comentários
Inline Feedbacks
Ver todos os comentários
0
Gostaríamos de saber o que você pensa, deixe seu comentáriox