Preciso de exercicios em compressão de roms de qualquer sistema?

Iniciado por MachineMX, Novembro 16, 2016, 18:45:09 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

MachineMX

Preciso de ajuda com exercícios e um pouco teórico com exemplos de compressão LZW, Run Lenght Encoding ou
HuffMan seja qual for o sistema pra fins de estudos e conhecer o básico pra dá início nessa área do romhacking.

denim

Pode tentar com os jogos da série megaman do snes... Todos eles usam o mesmo padrão de compressão, do tipo LZ e bem simples.

DiegoHH

Eu acredito que gba seja a plataforma mais fácil para aprender compressão. Veja bem: algumas rotinas fazem parte da bios e são bem documentadas no gbatek.

Se baixar o código fonte do lazynds, escrito por mim a muito tempo atrás, vai achar a  implementação dessas rotinas (lz, rle e Huffman) em python. Basta porta-las para C.

Abraço!

MachineMX

Eu vou ver onde que fica armazenado o ponteiro tilemap nem que encontre um pequeno gráfico 16x16, qualquer detalhe que não vou deixa passado, encontra gráficos com algum dado de compressão.
Valeu Denim.

Um dos planos que tenho é o Breath of Fire sou do GBA, falando sobre as rotinas da bios, havia achado informação da bios e outros texto relacionado ao porcessador ARM. seu arquivo tá hospedado em qual repositorio, ou site do forum.
Assim que acha eu vou olha e estuda elas.
Valeu DiegoHH.

L-Slayer

Citação de: MachineMX online Novembro 18, 2016, 19:56:37 PM
Eu vou tenta olha aonde fica armazenado e  olha tudo quanto é canto nem que seja um pequeno tilemap da apresentação do jogo qualquer coisa. Valeu denim.

Um dos planos de romhacking que tenho GBA è o BOF2, sobre as rotinas da bios havia achado algum assunto a respeito
mas li o tópico que falava, provavel que seja responsável pelos registros.
Seu arquivo ele tá aqui no site ou no repositorio?, assim que acha eu vou olha, Valeu DiegoHH

MachineMX não sei se você quer mexer no BOF2 para estudo ou fazer uma versão sua. Por que a tradução já foi feita pelo Kampello da NBR.

Link da Tradução

MachineMX

L-Slayer

Eu pretendo para estudos do romhacking, aprender sobre compressão como solução de algumas roms que não consegue espaço em certos lugares e conseguir em caso de fonte gráficas, salta o bit pra x00 sem compressão em vez 0x01 estudando asm, entender o funcionamento do que carrega o tilemap ou dados gráficos, hackear o item shop, armor shop.  :huh:

L-Slayer

Legal, se eu fosse você eu tentaria entrar em contato com o Kampello atraves do forum da NBR, por que ele destrinchou todo esse jogo, você pode pegar dicas valiosas. Ele anda meio sumido pra falar a verdade, mas acho que a tentativa é válida.

MachineMX

#7
Muito Obrigado L-Slayer

Legal se ele puder me passa algumas dicas eu agradeceria muito e me dá detalhes do jogo, vc tem o contato de email? Eu vou da olhada na Nintendo Br.
:parabens:
Lembro muito dele e assisto o canal do Kamppello no youtube.

Edit:
Eu tentei procura contato com o Kamppello pra gente conversa sobre o Breath of Fire não consegui, mas logo que ele entra aqui no forum eu entro em contato com ele, um abração a Todos

tvtoon

BOF2 de GBA não vai ser um exercício muito bom, não lembro de ter muita coisa (se alguma) comprimida relevante. Sugiro algum Fire Emblem, Golden Sun ou jogos da Nintendo em geral.

Se quiser começar pelo simples, o Master System tem esquemas de compressão oficiais bem documentados, lá no SMSPower, e o NES tem vários jogos famosos usando alguma forma, como os Final Fantasies, Kirby, Megami Tensei (se não me engano)...

MachineMX

Eu posso começa com o Dragon Warrior 2 ele usa uma compressão mais fácil que é Fixed Bit Length Encoding
https://wiki.nesdev.com/w/index.php/Fixed_Bit_Length_Encoding, ele parece ser mais fácil que ouras compressões, mas vc acha que o Master System pode ser melhor pra começa que no Nintendo ?
Eu entro direto no smspower, adoro os arquivos de programação.
Essas duas roms apresenta mais dificuldade tratando em compressão Fire Emblem, Golden Sun ?, achei bem legal estrategia com rpg.

Ondinha

Acho que se for meramente para estudar compressão de dados para algum curso e etc, você pode estudar e criar os CoDec's para qualquer tipo de arquivo e algoritmo para texto/imagem ou outra coisa, é até mais fácil que trabalhar com ROM's, basta estudar a teoria e aplicar.

O único motivo de trabalhar diretamente com ROM, é você, por si próprio, entender a rotina através de depuração e criar o algoritmo do CoDec, ou seja, é mais trabalhoso e complicado. Se você não conseguir cumprir essa etapa, escrever um CoDec pura e simplesmente não impressiona, principalmente os já extensamente documentados.

Agora, se sua motivação é usar isso em ROM Hacking, é válido estudar a teoria e prática como proposto acima e mais o assembly da plataforma que deseja trabalhar, além de entender como utilizar os emuladores com bons depuradores, aí você vai estar com o arsenal completo do ROM Hacker.

tvtoon

Citação de: MachineMX online Dezembro 26, 2016, 12:03:42 PM
Eu posso começa com o Dragon Warrior 2 ele usa uma compressão mais fácil que é Fixed Bit Length Encoding
https://wiki.nesdev.com/w/index.php/Fixed_Bit_Length_Encoding, ele me parece ser mais fácil que outras formatos de compressões, mas vc acha que o Master System pode ser melhor pra começa que no Nintendo ?
O caso é que Master System, assim como GBA, possui formatos oficiais e não "oficiosos", mas em se tratando de facilidade, tanto faz.
Os Dragon Warrior também são ótimos.

MachineMX

#12
Valeu Macaco Ancião,  valeu pelas dica, O codec para texto e imagem pode ser uma boa opção, mais minha paixão é o RomHacking, tenho um pouco conhecimento como entrada e saída dos imagem e som, entendo como um Rom inicia ou entra um estado de espera, conheço sobre as condições de salto, instruções de deslocamento que é mostrado no link acima, há pouco tempo aprendi sobre a pilha escrevendo arquivos com o SMW.
Tenho interesse em desenvolve ferramentas pra extrair e comprimir de volta o gráfico. Editores de Texto como diálogos na rom.

Valeu tvtoon pelas dicas, vou olhar melhor isso, e sem pressa os arquivos em detalhes em proramação do 6502, mais ainda assim começando com otimização de código, conheço alguns truques como dribla rotina com dados gráficos, e conheço muito bem diferencia as instrucões de salto, mais ouvi dizer que o master system é mais fácil por ser mais limitado que o Nintendo, pode ser uma opção.

Ondinha

#13
Beleza, pelo teu texto, achei que era para algum curso e tal.

Bom para iniciar pode ser GBA, é de longe o mais simples de todos, pois a maioria esmagadora dos jogos tem compressão baseada na API do BIOS, que são 3: RLE, LZ77 e Huffman, está bem documentado aqui: http://problemkaputt.de/gbatek.htm#biosfunctions em Bios Decompression Functions.

Para encontrar no jogo, também não é nada complicado, basta usar um emulador que faça log das chamadas do BIOS, elas são feitas com a instrução SWI, então fica fácil, por exemplo, no VisualBoyAdvance, você vai em "Tools > Log" e marca SWI e você vai ter algo assim:



Explicando. Mandei logar as instruções SWI, assim quando eu pressionei o botão para aparecer "New Game" ele detectou uma chamada SWI 0x13 que indica descompressão Huffman do BIOS no endereço 0x081eed50, conforme está selecionado na imagem.

Logo, a rotina está explicadinha ali no documento, só criar o descompressor e depois o compressor, inserindo no endereço correto (sem extrapolar o tamanho ou alterando o ponteiro da imagem), veja que a imagem está em 0x081eed50, mas isso é um endereço do mapeamento de memória do GBA, onde a ROM começa em 0x08000000, logo, você precisa subtrair esse valor para achar o endereço no PC, o que é simples: 0x001eed50, lá está o dado comprimido.

Para testar com LZ77 que é uma compressão mais simples, jogos como Advance Wars, já RLE não lembro de nenhum.

Pense que há jogos que são comprimidos com rotinas próprias, logo essa dica do log de SWI não funciona, não tenho certeza, mas creio que Golden Sun é um desses jogos que não fazem uso de rotinas da API do BIOS.

Por isso, GBA é mais fácil, pois não é, a priori, necessário nenhum grande conhecimento de Assembly de ARM para começar a fazer coisas "avançadas" com os jogos.

Aqui tem um código-fonte em Python 2 que eu escrevi para rotinas LZ77, já vem configurado para descomprimir vários gráficos de Advance Wars: http://www.romhacking.net/utilities/430/

MachineMX

#14
Valeu Ondinha.
:torico:

Belíssimo Tutorial de captura gráfica, não tinha a menor ideia que o emulador Visual Advanced apresentava essa função de captura de dados dos três formatos mencionados RLE,LZ77 e Huffman, isso facilita e muito vida de programador RomHacker muito interessante, não é como muita gente faz no snes, esperando um frame antes e não dá detalhes de qual formato é o da saída gráfica.

Mais esse VisualAdvanced parece ser mais fácil, falando sobre o endereço do mapeamento da memória ROM em geral é 0x81 é o que aparece na janela,o endereço do PC acima 0x01eed50 onde fica o dado gráfico.
Muito Obrigado pelo exemplo LZ77
:chegamais:

Finalmente achei um emulador sem problema, havia pegado alguns defeituosos.

upload photos

Vou ler o documento completo logo que alguma dúvida surgi volta aqui. Um abração ao Todos, que postaram e contribuiram com a sua ajuda valeu.