Este é um tutorial para ajudá-lo a se familiarizar com os editores hexadecimais, compreendendo os principais elementos de sua interface e algumas terminologias. A maioria dos exemplos foram retirados do editor embutido no emulador FCEUX. Porém, os princípios são os mesmos para todos os editores, mudando apenas a interface.

Offset

O offset é o termo utilizado para se referir a um endereço de memória no editor. Está em destaque na barra superior (em outros, em uma barra inferior).

Todo offset aponta para um byte. O endereço de cada byte é representado por um offset.

Repare que na imagem abaixo, selecionamos o byte localizado no offset 0x2086. Este “0x” é apenas uma nomenclatura de hexadecimal, sendo que em outros editores poderia aparecer como $2086.

A primeira linha dos dados representa o último dígito do offset. Repare que, ainda estando no offset 0x2086, a coluna do $06 está em destaque (pois o último dígito deste offset é $06).

Já a coluna da extrema esquerda representa os demais dígitos do offset (dezena, centena, milhar, todos…). Repare que todas terminam em 0. Assim, temos uma espécie de sistema de coordenadas.

Você pode saltar direto para um offset indo em File -> Go to Address. O atalho neste editor é Ctrl + A, mas em outros editores, como HxD, é Ctrl + L.

Bits e Bytes

Um editor hexadecimal serve para visualizar e editar bits. Hexadecimal é apenas o sistema numérico melhor utilizado para representá-los de forma amigável.

Um byte equivale a oito bits. Um byte pode ser representado por um número em hexadecimal de dois dígitos, indo de $00 a $FF.

Sendo assim, cada número que você pode visualizar e editar no painel abaixo, equivale a um byte:

Ou seja, quando você altera um valor, não está correto dizer coisas como “Alterei o hexadecimal”. Você alterou o valor de um byte. Hexadecimal é apenas o sistema numérico que estamos usando para representá-lo.

Inclusive, alguns editores permitem visualizar diretamente os bits (cada bit é um sinal de 0 ou 1). Abaixo, um print do editor Hex Fiend:

Cada 0 ou 1 é um bit. Cada uma destas colunas com 8 bits cada corresponde a um byte.

Repare como é mais confuso trabalhar assim. É melhor visualizar em hexadecimal e, caso queira manipular diretamente os bits, a própria calculadora do Windows pode ajudá-lo nesta conversão.

Modo texto

A coluna da esquerda do editor representa o modo texto. O modo texto consiste em um caractere de texto associado a um byte. O caractere que corresponde a cada byte varia de jogo para jogo, por isso, para visualizar corretamente, você precisa criar uma tabela.

No exemplo acima, há uma tabela especificando que o valor de byte $16 corresponde à letra “M”, o valor de byte $0A corresponde à letra A, e assim por diante. Por isso, você consegue visualizar algumas palavras do jogo do MARIO na coluna do modo texto.

Caso não haja uma tabela carregada, os editores usam, por padrão, a tabela ASCII. Nem todos os editores tem suporte ao uso de uma tabela personalizada.

Neste editor, a tabela pode ser carregada acessando File -> Load TBL File:

Lembre-se que o conteúdo da coluna de texto é meramente uma representação em carácter de texto do byte equivalente da outra coluna. Ou seja, nem tudo ali de fato é um texto do jogo. Na verdade, o editor hexadecimal exibirá na coluna de texto tudo que tiver um carácter equivalente associado na tabela. O editor não tem condições de saber se aquilo é de fato um texto do jogo ou não. E, obviamente, nem todo byte se refere a um texto. Temos ali todos os gráficos, todas as linhas de programação e todo o áudio.

Visualizações

É importante que você garanta sempre estar visualizando os dados corretos. Uma coisa é visualizar os dados da ROM, que normalmente é o que desejamos editar para realizar uma alteração permanente no jogo.

Mas, em editores hexadecimais embutidos nos próprios emuladores, é muito comum a possibilidade de visualizar os dados da memória RAM. E sabemos que estes dados são voláteis e se perderão assim que o jogo for reiniciado. Além de sofrerem atualizações em tempo real na medida que o jogo é executado. Também é possível visualizar os dados do chip de vídeo. Todos estarão nesta mesma visualização em hexadecimal, mas são dados diferentes.

No emulador FCEUX, as visualizações são as seguintes:

CPU: Dados relacionados ao processamento central da emulação. Isso inclui o código de máquina atualmente sendo executado, o estado dos registros da CPU, a pilha de execução, e outras informações cruciais para o funcionamento do jogo.

PPU: Dados relacionados à renderização gráfica do jogo. Isso inclui padrões de tiles (pequenos blocos gráficos que compõem imagens maiores), paletas de cores, e o status de sprites (objetos móveis na tela, como personagens e inimigos).

OAM: Ao visualizar o OAM, você está vendo uma parte específica da memória utilizada para armazenar informações sobre sprites, como sua posição na tela, qual tile eles estão usando, entre outras propriedades.

ROM: Aqui, você está acessando o conteúdo original e inalterável do jogo. Isso inclui todo o código de programação, dados gráficos, músicas, efeitos sonoros, e outros recursos que são parte integrante do jogo.


Voltar aos tutoriais