Esta é a primeira parte do artigo que demonstra como criar e usar arquivos XPC.
Os arquivos XPC, são criados por uma ferramenta (XPC Editor) para serem utilizados juntamente com o Execrom, criando assim patchs para resolver problemas de execução com determinadas ROMs, ou até mesmo para implantar Cheat Codes que serão carregados e aplicados à um jogo em ROM para o MSX. O EXECROM foi uma criação original do Adriano Cunha para MSX, mas que depois recebeu alguns implementos e melhorias por parte do usuário SD-SNATCHER.
Introdução
O conteúdo desta página deve ser encarado apenas como uma breve introdução ao assunto, feita em carater de pressa, não passando de um mero rascunho do que deveria ser um artigo completo sobre a ferramenta.
Esta primeira parte está focada apenas num objetivo, como criar patchs de cheats para jogos .ROM de até 32k para serem executados no Execrom.
A primeira coisa a lembrar: Geralmente as dicas vistas em revistas são para versões em K7, ou disco de jogos, onde os blocos são divididos em 16K cada um com uma pequena rotina de carga, e também uma pequena rotina para dar o "boot" no jogo. Sendo assim, os cheats geralmente carregam um bloco numa área da RAM não usada pelo BASIC/BIOS, o mais comum é usar #9000, aplicam o patch, transferem os dados para #4000, carregam o segundo bloco se existir, aplicam mais algum patch se necessário e transferem estes novos dados para #8000, em seguida executam o boot.
Isso deve ser levado em consideração quando da criação de um patch, pois no caso do Execrom, estamos lidando diretamente com a ROM. Outra coisa a considerar é que o EditXPC vê as páginas e os endereços a partir do início da ROM e não o endereço de execução, então uma ROM de 3k vai ter duas páginas, uma de #0000 a #3FFF, e outra de #4000 a #7FFF, embora na execução elas fiquem em #4000 e #8000 respectivamente.
Prática
Um pouco de noção em como usar endereços HEXA, além de uma ideia de como funciona o endereçamento do MSX é útil, uma pequena dose de Assembly também pode ser importante, pois apesar das dicas, podemos nos deparar com u m sistema de carga/boot mais bizarro, e aí só analisando o código para saber como deslocar os endereços.
Vamos detalhar abaixo um dos primeiros patchs que fiz para dar invencibilidade no Gyrodine.
Folheando a revista CPU, no número 02, página 34 (DICAS), me deparei com o seguinte cheat:
GYRODINE Imunidade Total
10 BLOAD "CAS:"
20 POKE -25648,0
30 DEFUSR=PEEK(&HFCC0)*256+PEEK(&HFCBF)
50 A=USR(0)
60 BLOAD "CAS:",R
Antes de mais nada devo salientar que nada disso é padronizado, podem existir outros DUMPs da ROM deste jogo, com a divisão, carga e boot diferente do que a dica especa, sendo assim, você pode aplicar o PATCH e não funcionar em algum DUMP ou até mesmo versão diferente do mesmo jogo. Este é um problema que já enfrentamos até mesmo na época que estes jogos e revistas eram lançados no Brasil. Se você sabe procurar/corrigir estas coisas, ótimo, se não, procure uma outra combinação de ROM, jogo e dica.
O programa em sí é muito simples, ele carrega o primeiro bloco, ele fica em #9000 na versão que usei, muda o conteúdo do endereço #9BD0 (-25648) para 00, descobre o endereço de entrada, vindo do header, executa a transferência para #4000.Carrega e executa o segundo bloco, que automaticamente transfere e cria o BOOT do jogo.
Aqui você pode analisar o código e ver que o programa de carga está no final do primeiro bloco do jogo, na grande maioria das vezes é isso que acontece, então se não conhecer nada de Assembly, chute desta maneira que a chance de funcionar é grande.
Disto extraímos a informação de que o patch na realidade fica no endereço 08D0 do jogo em sí (subtrair #9000 do endereço do programa de cheat). Como se trata do primeiro bloco, ficamos cientes que o patch vai estar na página 0 do ROM (e do ExecROM/EditXPC).
Os patchs para Execrom estão num formato chamado .XPC, e o Adriano criou uma ferramenta para auxiliar a criação de arquivos neste formato, chamada EditXPC.bas. É um programa em BASIC, com uma interface espartana e limpa, que eu particularmente gosto, mas que pode assustar quem nunca mexeu em interfaces similares (assembladores, debugadores, monitores).
Vamos iniciar a criação do patch do gyrodine então. Carregue e execute o "editxpc.bas" pelo basic.
Logo de cara, você deve usar a opção "3", para criar um novo patchfile, esta opção lhe informará que irá apagar algum patch que por ventura esteja na memória, confirme e o programa retorna para o menu principal.
Em seguida vamos usar a opção "4", para editar o patchfile. Lembre-se que estamos numa fase inicial do tutorial, criando patchs para programas de 16Kb ou 32Kb, então não estranhe algumas opções, pois as mesmas são avançadas e não serão vistas neste momento. Alguns patchs também precisam de iformações adicionais, que não estarão sendo vistas agora, mas que pretendo complementar assim que possível.
Para começar vamos dar um nome para o patch, se você carregou um .ROM pelo Execrom que tenha um .XPC, percebeu que o Execrom vai perguntar se deseja ativar determinada função do .XPC, isso porque aquela opção foi marcada como opcional. Para isso então devemos criar um nome para este patch e marcar se o mesmo é opcional ou obrigatório.
Usando a função "M" damos o nome (neste exemplo "Imunidade Total"), vamos informar também a versão do patch, na opção "V" (informe "1.0") e em seguida use a opção "O" para alternar entre Optional e Essential.
Todo o ambiente já está preparado para a criação dos bytes a serem alterados pelo patch, neste exemplo, o byte é #00 mesmo, então, como pode perceber pela figura, já está em #00, porém se fosse um outro valor, como por exemplo #C9, basta alterar o byte com a opção "T", informe os bytes e pressiona <ESC> ao final.
Isso finaliza a criação do patch.
A ferramenta, apesar de espartana, permite criar patchs complexos, e também permite criar pathcs para propósitos diferentes no mesmo arquivo. Por exemplo, anteriormente criamos o patch "Imunidade Total", poderíamos criar, no mesmo .XPC, um outro patch agregado, por exemplo "Munição Infinita", o Execrom vai perguntando, em sua carga, as opções em sequência e se deseja aplicar ou não a mesma.
Para salvar o patchfiles, damos <ESC> na tela de edição, e no menu principal usamos a opção "2" (save patchfile), que vai solicitar um nome (irá pedir para sobrepor o arquivo antigo, caso exista). O nome deve ser informado sem a extensão .XPC, se o nome for o mesmo da .ROM, o ExecROM irá carregar automaticamente quando os dois arquivos estiverem no mesmo local, porém, nada impede de usar outro nome, e passar como parâmetro na execução do ExecROM. Em nosso exemplo, informamos "GYRODINE" mesmo.
A opção "1" (Load patchfile), permite carregar um .XPC para edição e inclusão de novas funcionalidades, basta confirmar que o XPC corrente vai ser apagado, informar o nome do arquivo (sem a extensão) e editar normalmente com a opção "4" (Edit patchfile).
Terminado o patch, basta testar com o Execrom.
Dicas
Normalmente as dicas de revista levam em conta o formato no qual o jogo foi distribuído aqui no Brasil na época, na maior parte dos casos, você pode assumir que o endereço do cheat deve ser subtraído de #9000, mas isso não é regra, recomendo analisar o bloco, mas se não tem intimidade com isso, arrisque, além de #9000, outros endereços comuns são #8500, #8200, #A000, #8800.
Se você tiver uma ROM já com cheat, a criação do patch é fácil, bastando dar um "diff" dela contra a ROM original e descobrir os endereços que foram alterados.
Vou falar sobre as MEGAROMs em outra oportunidade, mas para quem quiser se aventurar, tente entender como funcionam os diversos modelos de MegaROM e saber que uma MegaROM não é a mesma coisa que uma MegaRAM, os chaveamentos de páginas costumam ser diferentes, uma lida no site do BiFi é de grande ajuda para adaptar os mapeamentos de um MegaROM para a MegaRAM.
Downloads
- execrom.dsk: Última versão liberada pelo Adriano Cunha
- execrom-ng.dsk: Última versão liberada pelo SD-SNATCHER, com alguns patchs e palhetas junto.
- xpctools1.0_win32.zip: Ferramentas para auxilio de criação de XPCs, para Windows.
Links
- Página oficial do EXECROM
- Página do projeto EXECROM / SD-SNATCHER
- Página do BiFi com os mapeamentos das MegaROMs