Street Fighter Alpha 2 de Super Nintendo ganha versão sem o chip S-DD1 e com pausa pré-luta bem menor
Projeto transforma Street Fighter Alpha 2 do Super Nintendo em uma ROM sem S-DD1 e reduz a pausa antes das lutas com otimizações de som.
Um desenvolvedor chamado gufranco publicou no GitHub um conjunto de ferramentas que transforma o Street Fighter Alpha 2 (e o Street Fighter Zero 2, versão japonesa) em uma ROM comum de 96 Mbit, sem o chip de descompressão S-DD1, que roda em qualquer flash cartridge com espaço para ela. O projeto também derruba a pausa antes de cada luta de cerca de 2,9 segundos para cerca de 0,78 segundo na versão americana.
Um aviso antes de continuar: o repositório não distribui nenhum dado do jogo. Quem quiser montar a ROM precisa fornecer o dump do próprio cartucho, e o projeto pede que ninguém anexe nem linke ROMs nas discussões.
Por que o jogo precisava de um chip
O cartucho original guarda boa parte dos gráficos comprimidos. O S-DD1 descomprime esses dados na hora, durante uma transferência por DMA, conforme o jogo pede. Sem o chip, os gráficos simplesmente não aparecem.
A solução do projeto foi descomprimir tudo antes, num processo de build, e jogar o resultado numa imagem maior. Depois, o código mexe em sete pontos de cada região (EUA e Japão) onde o jogo ativava o chip, fazendo com que eles leiam os bytes já prontos. O que sai disso é uma ROM de 12.582.912 bytes, sem coprocessador para emular e sem hardware especial de mapeamento.
Os gráficos descomprimidos somam cerca de 5 MB, o que já estoura os 4 MB do cartucho original. E 12 MB também não cabem de forma direta no espaço de endereçamento do console. O jeito encontrado foi dividir cada banco de 64 KB em duas metades, guardadas em planos separados do arquivo, com os bancos $C0 em diante funcionando como uma janela para o segundo plano. O README chama isso de LoROM com janela e diz que a regra vem da conversão sem chip de Star Ocean, feita por neviksti, que o autor recuperou por inspeção.
A pausa antes da luta nunca foi culpa do chip
Esse é o ponto menos conhecido do projeto. A demora entre a escolha dos lutadores e o início do combate, que incomoda quem joga em flash cart, vem do driver de som. O jogo envia as amostras de áudio para o chip de som um byte por vez, a cerca de 55 ciclos por byte, e uma rajada antes da luta chega a 47.915 bytes.
O autor reescreveu o laço receptor para carregar três bytes por handshake, ao custo de 49 ciclos por trio, ou aproximadamente 16,3 ciclos por byte. As maiores esperas medidas ficaram assim:
- EUA: de 2,90 s para 0,78 s
- Japão: de 2,60 s para 0,72 s
O novo envio vale para as rajadas que usam o formato de bloco compatível, o que cobre 93% do tráfego do driver. O caminho que passa pelo boot ROM do chip de som continua com um byte por handshake. Há ainda um segundo ganho: o projeto pula o envio de uma lista de amostras quando o jogo pede a mesma que já está carregada, economizando 840.766 bytes na versão americana e 303.340 na japonesa num passeio por todo o elenco.
Na imagem sem chip, entra mais uma otimização. Antes de cada luta o jogo gasta 27 quadros calculando uma tabela de 24.704 bytes que nunca muda, e a versão nova já traz a tabela pronta, movida com uma única DMA. O cartucho de 4 MB corrigido não recebe esse ganho, porque o maior trecho vazio em qualquer uma das ROMs originais tem 3.210 bytes e a tabela não cabe em lugar nenhum.
Shin Akuma e onze correções de brinde
O pacote também aplica o desbloqueio do Shin Akuma, que são apenas dois bytes. O personagem está no cartucho desde 1996, escondido atrás de um código que ficou sem documentação até ser divulgado em janeiro de 2021, segundo o projeto.
Além disso, entram onze correções que ocupam 218 bytes na versão americana e 60 na japonesa. Entre elas:
- restauração do nome Sodom, que a versão americana tinha trocado por Katana, nas quatro telas em que ele aparece;
- ordem das poses de vitória do Akuma como no arcade;
- um estouro na tabela de objetos quando um nono quadro de sombra é pedido;
- três registros de sprite na cena em que o Sagat segura o pai do Dan;
- remoção de 45 chamadas vazias.
Cada correção é localizada por assinatura de bytes, e não por endereço fixo, então a mesma tabela serve para as duas regiões. Se a ROM não bater, o patch se recusa a escrever, e aplicar duas vezes não faz diferença.
Onde já foi testado
Segundo o autor, a versão americana de 96 Mbit roda no Game Doctor SF7 (128 Mbit DRAM) e no FXPAK Pro, e a de 4 MB corrigida também roda no FXPAK Pro, que emula o S-DD1 no FPGA. A versão japonesa só passou por emulador, e o projeto diz com todas as letras que ninguém colocou ela num console ainda.
Os testes automatizados somam 2.817 streams americanos e 2.855 japoneses, todos com zero bytes errados, além de 20 imagens rodadas por 12.000 quadros cada e 50.652 envios de amostra conferidos passando pelos 18 lutadores.
Existe uma ressalva honesta: a tabela japonesa não tem como ser provada completa. Ela cobre as 1.661 requisições gravadas em hardware real, mas um stream que ninguém pede nunca aparece. Se alguma tela vier errada, o projeto pede que o jogador abra uma issue informando a imagem e a região, de preferência com a captura do quadro.
Imagens sem chip costumam manter o cabeçalho original, que ainda declara um chip que não existe mais, e isso faz o emulador ativar uma emulação desnecessária e usar o esquema errado. O projeto reescreve os campos de chipset e tamanho nos seis lugares em que o cabeçalho aparece. O mapa necessário foi incorporado ao snes9x pelo pull request 1082, então versões atuais carregam as imagens sem ajuste. O autor suspeita que ares, Mesen2, bsnes e Mednafen tenham a mesma lacuna, mas ainda não mandou nada para eles.
Nos créditos aparecem Andreas Naive (engenharia reversa da compressão do S-DD1), o canal Modern Vintage Gamer (cujo vídeo deu origem ao projeto e apontou que a pausa vinha do som), gizaha (trabalho original sobre a pausa), DarkAkuma, a equipe do snes9x e a comunidade Zeldix.
Quem quiser acompanhar ou testar pode procurar o repositório snes-street-fighter-alpha-2-nochip no GitHub, do usuário gufranco.
Aproveite que está aqui e siga o Arkade no:
- Plataformas
- PlayStation, Nintendo, PC, Retrô
- Lançamento
- 27 de fevereiro de 1996
- Desenvolvedora
- Capcom
- Publicadora
- Capcom
- Gênero
- Luta




