Cabeçalho

De ROMHackingWiki

Imagem:Revisar.gif Este artigo necessita de uma revisão. Você pode ajudar a ROMHackingWiki revisando-o agora mesmo.
Imagem:makako_mor.gif Este é um artigo intermediário sobre o ROMHacking, leia-o com bastante atenção!

Introdução

Cabeçalhos (do inglês header) são informações que precedem um bloco de dados com o intuito de fornecer informações suplementares sobre o mesmo.

Antigamente, os emuladores precisavam de informações extras sobre a ROM, e daí surgiram os cabeçalhos que conhecemos hoje. Contudo, esse cenário vem mudando, e atualmente um emulador não precisa mais de informações extras para emular corretamente algum jogo.

Cabeçalhos Padrões

Abaixo segue o tamanho em bytes dos cabeçalhos dos sistemas mais conhecidos:

Mega Drive / Genesis  = 200h
*Obs: Para ROM's no formato BIN, o cabeçalho não influencia no cálculo dos ponteiros.
Super Nintendo        = 200h
Master System         = 10h
Nintendo 8bits        = 10h
GameGear              = 10h
GameBoy / Color       =  
   De 0x0000 até 0x3FFF  = +4000h
   De 0x4000 até 0x7FFF  = 0h
   De 0x8000 até 0xBFFF  = -4000h
   De 0xC000 até 0xFFFF  = -8000h  

O GameBoy possui um sistema diferente de header.

Game Boy Advance     = 0h

Como o GBA é um sistema *novo*, não é usado nenhum tipo de cabeçalho em suas ROMs.

Aplicação no Romhacking

Pelo fato de conter informações que não fazem parte originalmente da ROM, o cabeçalho deve ser descartado nos cálculos de offsets da mesma.

Quando o jogo é criado, os programadores ( e o sistema do jogo ) não levam em conta esses bytes a mais do cabeçalho(que são usados somente na emulação nesse caso). Afinal, isso é inserido pelo dumper. Então, os ponteiros apontam para um Offset na ROM SEM o cabeçalho. Porém, os romhackers que lidam com ROMs onde sua presença é essencial precisam fazer os cálculos excluindo a quantidade de bytes deles.

Como ponteiros contêm valores que indicam uma posição na estrutura do jogo, na maioria dos casos o offset dos textos, você deve excluir o tamanho do cabeçalho caso ele exista na plataforma ou naquele jogo específico ao realizar seus cálculos.

Por exemplo:

Suponha uma ROM de SNES que tenha um cabeçalho comum e que seu texto se inicia em 300h. Para procurar o ponteiro referente àquele texto, você deve retirar desse valor 200h que é o tamanho do cabeçalho do sistema. Sobra, então, 100h (300h - 200h). Seu ponteiro para aquele texto possui o valor de 100h.

Ferramentas pessoais