[SNES]Bonkers: Código Assembly Relativo à Compressão(BACKUP)

Iniciado por Ondinha, Fevereiro 14, 2017, 20:41:31 PM

tópico anterior - próximo tópico

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

Ondinha

Código de descompressão do jogo Bonkers, comentado, para preservação e quem sabe, utilização. Não sei se tudo aqui está correto, eu ainda tenho algumas dúvidas, pois estou aprendendo.
Código (Assembly de SNES) Selecionar

# O tamanho do dado descomprimido está em 820868?
82af7f sta $0000,y   [820868] A:0f00 X:b37f Y:0868 S:03f4 D:0000 DB:82 nvmxdizC V: 24 H:163 F: 3
       
# $13 tem o valor de 8, inicialmente, indicando quantos bits devem ser utilizados
82d4d3 lda #$08               A:010e X:0800 Y:0003 S:03ec D:04c0 DB:7f nvMxdizC V: 26 H:239 F: 3
82d4d5 sta $13       [0004d3] A:0108 X:0800 Y:0003 S:03ec D:04c0 DB:7f nvMxdizC V: 26 H:243 F: 3

# $12 guarda o endereço inicial
82d4d7 lda [$00],y   [96ed43] A:0108 X:0800 Y:0003 S:03ec D:04c0 DB:7f nvMxdizC V: 26 H:250 F: 3
82d4d9 sta $12       [0004d2] A:01ed X:0800 Y:0003 S:03ec D:04c0 DB:7f NvMxdizC V: 26 H:264 F: 3

82d51d tyx                    A:ffff X:080f Y:0810 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H: 48 F:48
82d51e ldy $0e       [0004ce] A:ffff X:0810 Y:0810 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H: 51 F:48
82d520 dec $13       [0004d3] A:ffff X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H: 61 F:48
82d522 bne $d4dc     [82d4dc] A:ffff X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H: 72 F:48

# $12 >> 1, se for 0 vai para $d4e9, formar o par, se for 1, guarda o  byte em $7F:0810
82d4dc lsr $12       [0004d2] A:ffff X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H: 77 F:48
82d4de bcc $d4e9     [82d4e9] A:ffff X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H: 88 F:48

# Pega o byte da ROM e guarda na RAM ## Gravação do literal ## - 47/48 omitido
82d4e0 lda [$00],y   [96ed47] A:ffff X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H: 92 F:48
82d4e2 sta $0000,x   [7f0810] A:ff38 X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H:106 F:48

# incrementa a indexação do endereço endereço
82d4e5 iny                    A:ff38 X:0810 Y:0007 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H:115 F:48
82d4e6 inx                    A:ff38 X:0810 Y:0008 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H:119 F:48
82d4e7 bra $d520     [82d520] A:ff38 X:0811 Y:0008 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H:122 F:48
# decrementa o 13
82d522 bne $d4dc     [82d4dc] A:ff38 X:0811 Y:0008 S:03ec D:04c0 DB:7f nvMxdizC V: 28 H:149 F:48

$d4e9 ## Formação do Par ##
82d4e9 rep #$20               A:ff08 X:0812 Y:0009 S:03ec D:04c0 DB:7f nvMxdizc V: 28 H:238 F:48

# Lê 1 ((byte & 0x0FFF) + 1), provavelmente distância
82d4eb lda [$00],y   [96ed49] A:ff08 X:0812 Y:0009 S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:243 F:48
82d4ed iny                    A:2001 X:0812 Y:0009 S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:259 F:48
82d4ee and #$0fff             A:2001 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:262 F:48
82d4f1 inc                    A:0001 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:268 F:48

# Guarda em $0c
82d4f2 sta $0c       [0004cc] A:0002 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:272 F:48
# Transfere a posição atual para A e subtrai do carry bit
82d4f4 txa                    A:0002 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:281 F:48
82d4f5 sec                    A:0812 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizc V: 28 H:285 F:48
82d4f6 sbc $0c       [0004cc] A:0812 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:288 F:48
82d4f8 sta $0c       [0004cc] A:0810 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:298 F:48

# Lê outro (((byte & 0x00F0) >> 4) + 1), provavelmente tamanho
82d4fa lda [$00],y   [96ed4a] A:0810 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:307 F:48
82d4fc iny                    A:0820 X:0812 Y:000a S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:323 F:48
82d4fd and #$00f0             A:0820 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:326 F:48
82d500 bne $d50e     [82d50e] A:0020 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:331 F:48

82d50e lsr a                  A:0020 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizC V: 28 H:337 F:48
82d50f lsr a                  A:0010 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizc V: 29 H:  0 F:48
82d510 lsr a                  A:0008 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizc V: 29 H:  4 F:48
82d511 lsr a                  A:0004 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizc V: 29 H:  7 F:48
82d512 inc                    A:0002 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizc V: 29 H: 11 F:48

# Guarda em $0E
82d513 sep #$20               A:0003 X:0812 Y:000b S:03ec D:04c0 DB:7f nvmxdizc V: 29 H: 14 F:48
82d515 sty $0e       [0004ce] A:0003 X:0812 Y:000b S:03ec D:04c0 DB:7f nvMxdizc V: 29 H: 20 F:48
82d517 txy                    A:0003 X:0812 Y:000b S:03ec D:04c0 DB:7f nvMxdizc V: 29 H: 29 F:48
82d518 ldx $0c       [0004cc] A:0003 X:0812 Y:0812 S:03ec D:04c0 DB:7f nvMxdizc V: 29 H: 33 F:48
82d51a jsr $05b0     [8205b0] A:0003 X:0810 Y:0812 S:03ec D:04c0 DB:7f nvMxdizc V: 29 H: 42 F:48

# Faz a cópia dos bytes descomprimidos ao fim
8205b0 mvn $7f,$7f            A:0003 X:0810 Y:0812 S:03ea D:04c0 DB:7f nvMxdizc V: 29 H: 54 F:48
8205b0 mvn $7f,$7f            A:0002 X:0811 Y:0813 S:03ea D:04c0 DB:7f nvMxdizc V: 29 H: 67 F:48
8205b0 mvn $7f,$7f            A:0001 X:0812 Y:0814 S:03ea D:04c0 DB:7f nvMxdizc V: 29 H: 80 F:48
8205b0 mvn $7f,$7f            A:0000 X:0813 Y:0815 S:03ea D:04c0 DB:7f nvMxdizc V: 29 H: 93 F:48
8205b3 rts                    A:ffff X:0814 Y:0816 S:03ea D:04c0 DB:7f nvMxdizc V: 29 H:106 F:48

FBR@VO

É disso que estou falando...
Partiu futricar nessa rotina!!
:toligado:

Ondinha

Só lembrar que tem coisa errada aí nos comentários beleza, já tá confirmado que o tamanho do dado descomprimidos/comprimido não é aquele, depois vou consertando.

FBR@VO