mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-01 15:26:01 +00:00
99 lines
No EOL
4.7 KiB
ArmAsm
99 lines
No EOL
4.7 KiB
ArmAsm
glabel Yaz0_DecompressImpl
|
|
/* 0028B0 80001CB0 27BDFFC0 */ addiu $sp, $sp, -0x40
|
|
/* 0028B4 80001CB4 AFBF002C */ sw $ra, 0x2c($sp)
|
|
/* 0028B8 80001CB8 AFB40028 */ sw $s4, 0x28($sp)
|
|
/* 0028BC 80001CBC AFB30024 */ sw $s3, 0x24($sp)
|
|
/* 0028C0 80001CC0 AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0028C4 80001CC4 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0028C8 80001CC8 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0028CC 80001CCC 8C8E0004 */ lw $t6, 4($a0)
|
|
/* 0028D0 80001CD0 3C128001 */ lui $s2, %hi(sYaz0MaxPtr) # $s2, 0x8001
|
|
/* 0028D4 80001CD4 3C138001 */ lui $s3, %hi(sYaz0CurSize) # $s3, 0x8001
|
|
/* 0028D8 80001CD8 00A08025 */ move $s0, $a1
|
|
/* 0028DC 80001CDC 00003025 */ move $a2, $zero
|
|
/* 0028E0 80001CE0 24910010 */ addiu $s1, $a0, 0x10
|
|
/* 0028E4 80001CE4 267344E8 */ addiu $s3, %lo(sYaz0CurSize) # addiu $s3, $s3, 0x44e8
|
|
/* 0028E8 80001CE8 265244EC */ addiu $s2, %lo(sYaz0MaxPtr) # addiu $s2, $s2, 0x44ec
|
|
/* 0028EC 80001CEC 8FA70030 */ lw $a3, 0x30($sp)
|
|
/* 0028F0 80001CF0 01C5A021 */ addu $s4, $t6, $a1
|
|
.L80001CF4:
|
|
/* 0028F4 80001CF4 54C0000F */ bnezl $a2, .L80001D34
|
|
/* 0028F8 80001CF8 30F90080 */ andi $t9, $a3, 0x80
|
|
/* 0028FC 80001CFC 8E4F0000 */ lw $t7, ($s2)
|
|
/* 002900 80001D00 01F1082B */ sltu $at, $t7, $s1
|
|
/* 002904 80001D04 50200008 */ beql $at, $zero, .L80001D28
|
|
/* 002908 80001D08 92270000 */ lbu $a3, ($s1)
|
|
/* 00290C 80001D0C 8E780000 */ lw $t8, ($s3)
|
|
/* 002910 80001D10 53000005 */ beql $t8, $zero, .L80001D28
|
|
/* 002914 80001D14 92270000 */ lbu $a3, ($s1)
|
|
/* 002918 80001D18 0C0006F2 */ jal Yaz0_NextDMA
|
|
/* 00291C 80001D1C 02202025 */ move $a0, $s1
|
|
/* 002920 80001D20 00408825 */ move $s1, $v0
|
|
/* 002924 80001D24 92270000 */ lbu $a3, ($s1)
|
|
.L80001D28:
|
|
/* 002928 80001D28 26310001 */ addiu $s1, $s1, 1
|
|
/* 00292C 80001D2C 24060008 */ li $a2, 8
|
|
/* 002930 80001D30 30F90080 */ andi $t9, $a3, 0x80
|
|
.L80001D34:
|
|
/* 002934 80001D34 13200006 */ beqz $t9, .L80001D50
|
|
/* 002938 80001D38 00073840 */ sll $a3, $a3, 1
|
|
/* 00293C 80001D3C 92280000 */ lbu $t0, ($s1)
|
|
/* 002940 80001D40 26100001 */ addiu $s0, $s0, 1
|
|
/* 002944 80001D44 26310001 */ addiu $s1, $s1, 1
|
|
/* 002948 80001D48 10000027 */ b .L80001DE8
|
|
/* 00294C 80001D4C A208FFFF */ sb $t0, -1($s0)
|
|
.L80001D50:
|
|
/* 002950 80001D50 92230000 */ lbu $v1, ($s1)
|
|
/* 002954 80001D54 92290001 */ lbu $t1, 1($s1)
|
|
/* 002958 80001D58 26310002 */ addiu $s1, $s1, 2
|
|
/* 00295C 80001D5C 306A000F */ andi $t2, $v1, 0xf
|
|
/* 002960 80001D60 000A5A00 */ sll $t3, $t2, 8
|
|
/* 002964 80001D64 00032903 */ sra $a1, $v1, 4
|
|
/* 002968 80001D68 012B2025 */ or $a0, $t1, $t3
|
|
/* 00296C 80001D6C 14A00005 */ bnez $a1, .L80001D84
|
|
/* 002970 80001D70 02041023 */ subu $v0, $s0, $a0
|
|
/* 002974 80001D74 92230000 */ lbu $v1, ($s1)
|
|
/* 002978 80001D78 26310001 */ addiu $s1, $s1, 1
|
|
/* 00297C 80001D7C 10000002 */ b .L80001D88
|
|
/* 002980 80001D80 24630012 */ addiu $v1, $v1, 0x12
|
|
.L80001D84:
|
|
/* 002984 80001D84 24A30002 */ addiu $v1, $a1, 2
|
|
.L80001D88:
|
|
/* 002988 80001D88 30650003 */ andi $a1, $v1, 3
|
|
/* 00298C 80001D8C 00052823 */ negu $a1, $a1
|
|
/* 002990 80001D90 10A00009 */ beqz $a1, .L80001DB8
|
|
/* 002994 80001D94 00A32021 */ addu $a0, $a1, $v1
|
|
.L80001D98:
|
|
/* 002998 80001D98 904CFFFF */ lbu $t4, -1($v0)
|
|
/* 00299C 80001D9C 2463FFFF */ addiu $v1, $v1, -1
|
|
/* 0029A0 80001DA0 26100001 */ addiu $s0, $s0, 1
|
|
/* 0029A4 80001DA4 24420001 */ addiu $v0, $v0, 1
|
|
/* 0029A8 80001DA8 1483FFFB */ bne $a0, $v1, .L80001D98
|
|
/* 0029AC 80001DAC A20CFFFF */ sb $t4, -1($s0)
|
|
/* 0029B0 80001DB0 1060000D */ beqz $v1, .L80001DE8
|
|
/* 0029B4 80001DB4 00000000 */ nop
|
|
.L80001DB8:
|
|
/* 0029B8 80001DB8 904DFFFF */ lbu $t5, -1($v0)
|
|
/* 0029BC 80001DBC 2463FFFC */ addiu $v1, $v1, -4
|
|
/* 0029C0 80001DC0 26100004 */ addiu $s0, $s0, 4
|
|
/* 0029C4 80001DC4 A20DFFFC */ sb $t5, -4($s0)
|
|
/* 0029C8 80001DC8 904E0000 */ lbu $t6, ($v0)
|
|
/* 0029CC 80001DCC 24420004 */ addiu $v0, $v0, 4
|
|
/* 0029D0 80001DD0 A20EFFFD */ sb $t6, -3($s0)
|
|
/* 0029D4 80001DD4 904FFFFD */ lbu $t7, -3($v0)
|
|
/* 0029D8 80001DD8 A20FFFFE */ sb $t7, -2($s0)
|
|
/* 0029DC 80001DDC 9058FFFE */ lbu $t8, -2($v0)
|
|
/* 0029E0 80001DE0 1460FFF5 */ bnez $v1, .L80001DB8
|
|
/* 0029E4 80001DE4 A218FFFF */ sb $t8, -1($s0)
|
|
.L80001DE8:
|
|
/* 0029E8 80001DE8 1614FFC2 */ bne $s0, $s4, .L80001CF4
|
|
/* 0029EC 80001DEC 24C6FFFF */ addiu $a2, $a2, -1
|
|
/* 0029F0 80001DF0 8FBF002C */ lw $ra, 0x2c($sp)
|
|
/* 0029F4 80001DF4 AFA70030 */ sw $a3, 0x30($sp)
|
|
/* 0029F8 80001DF8 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0029FC 80001DFC 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 002A00 80001E00 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 002A04 80001E04 8FB30024 */ lw $s3, 0x24($sp)
|
|
/* 002A08 80001E08 8FB40028 */ lw $s4, 0x28($sp)
|
|
/* 002A0C 80001E0C 03E00008 */ jr $ra
|
|
/* 002A10 80001E10 27BD0040 */ addiu $sp, $sp, 0x40 |