Cabeçalho
De ROMHackingWiki
| Este artigo necessita de uma revisão. Você pode ajudar a ROMHackingWiki revisando-o agora mesmo. |
| 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.



