[Documentação] Compressão Grandia Ps1

Iniciado por denim, Novembro 27, 2017, 16:17:44 PM

tópico anterior - próximo tópico

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

denim

 As imagens do início do jogo estão comprimidas com o algoritmo de Huffmann. Para quem se interessar, segue abaixo a rotina de descompressão, com as seguintes observações:


  • t3 recebe a posição do buffer de descompressão
  • $2054(t7) é a posição de memória do byte atual da stream comprimida
  • a0 possui o endereço da raiz da árvore de huffmann ($10d90)
  • O arquivo "TITLE.EXE" possui o programa de descompressão, bem como a stream de dados.

00045480 addu    t6,a3,0
00045484 addiu   t2,0,$80
00045488 addu    t5,0,0
0004548C addu    t4,t5,0
00045490 addu    t1,t5,0
00045494 addu    t0,t5,0
00045498 lui     v0,$5
0004549C lw      t3,-$2050(v0)
000454A0 addu    t8,t2,0
000454A4 lui     t7,$5
000454A8 andi    a3,$FF
000454AC addu    v0,a1,0
000454B0 bgez    v0,$454C0
000454B4 sra     v1,v0,$3
000454B8 addiu   v0,$7
000454BC sra     v1,v0,$3
000454C0 bne     t2,t8,$454E0
000454C4 and     v0,t5,t2
000454C8 lw      v0,-$2054(t7)
000454CC nop
000454D0 lbu     t5,$0(v0)
000454D4 addiu   v0,$1
000454D8 sw      v0,-$2054(t7)
000454DC and     v0,t5,t2
000454E0 beq     v0,0,$454F8
000454E4 sll     v0,v1,$3
000454E8 addu    v0,a0
000454EC lh      v0,$6(v0)
000454F0 j       $45500
000454F4 nop
000454F8 addu    v0,a0
000454FC lh      v0,$4(v0)
00045500 nop
00045504 bgez    v0,$45510
00045508 nop
0004550C addiu   v0,$7
00045510 srl     t2,$1
00045514 bne     t2,0,$45520
00045518 sra     v1,v0,$3
0004551C addiu   t2,0,$80
00045520 sltiu   v0,v1,$101
00045524 beq     v0,0,$454C0
00045528 addiu   v0,0,$100
0004552C beq     v1,v0,$455D0
00045530 addiu   v0,0,$1
00045534 beq     a2,v0,$45554
00045538 slti    v0,a2,$2
0004553C bne     v0,0,$45564
00045540 addiu   v0,0,$2
00045544 beq     a2,v0,$4555C
00045548 addu    v0,v1,t1
0004554C j       $45568
00045550 addu    t1,v1,0
00045554 j       $45568
00045558 xor     t1,v1
0004555C j       $45568
00045560 andi    t1,v0,$FF
00045564 addu    t1,v1,0
00045568 beq     t4,0,$455C4
0004556C lbu     v0,$4C434
00045574 nop
00045578 beq     v0,0,$455AC
0004557C nop
00045580 beq     t0,0,$45590
00045584 nop
00045588 addu    t0,a3
0004558C andi    t0,$FF
00045590 beq     t1,0,$455A0
00045594 addu    v0,t1,a3
00045598 sll     v0,$8
0004559C addu    t0,v0
000455A0 sh      t0,$0(t3)
000455A4 j       $455C8
000455A8 addiu   t3,$2
000455AC sll     v0,t1,$8
000455B0 addu    v0,t0,v0
000455B4 addu    v0,t6,v0
000455B8 sh      v0,$0(t3)
000455BC j       $455C8
000455C0 addiu   t3,$2
000455C4 addu    t0,t1,0
000455C8 j       $454AC
000455CC xori    t4,$1
000455D0 beq     t4,0,$45608
000455D4 lbu     v0,$4C434
000455DC nop
000455E0 beq     v0,0,$45600
000455E4 addu    v0,t6,t0
000455E8 beq     t0,0,$455F8
000455EC andi    v0,t6,$FF
000455F0 addu    t0,v0
000455F4 andi    t0,$FF
000455F8 j       $45604
000455FC sh      t0,$0(t3)
00045600 sh      v0,$0(t3)
00045604 addiu   t3,$2
00045608 lui     v0,$5
0004560C jr      ra

Gutembergh

Quem se interessar pela edição gráfica do grandia, eu já tô com ele 100% traduzido. Tava só fazendo a revisão do texto mesmo... Então, se alguém quiser, já sabe. ^^
Um dia chegaremos lá!