pokefirered/asm/decompress.s
2018-10-11 23:29:11 -04:00

888 lines
14 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start LZDecompressWram
LZDecompressWram: @ 800EBB4
push {lr}
bl LZ77UnCompWram
pop {r0}
bx r0
thumb_func_end LZDecompressWram
thumb_func_start LZDecompressVram
LZDecompressVram: @ 800EBC0
push {lr}
bl LZ77UnCompVram
pop {r0}
bx r0
thumb_func_end LZDecompressVram
thumb_func_start LoadCompressedObjectPic
LoadCompressedObjectPic: @ 800EBCC
push {r4,r5,lr}
sub sp, 0x8
adds r4, r0, 0
ldr r0, [r4]
ldr r5, _0800EBFC @ =gDecompressionBuffer
adds r1, r5, 0
bl LZ77UnCompWram
str r5, [sp]
ldrh r1, [r4, 0x6]
lsls r1, 16
ldrh r0, [r4, 0x4]
orrs r0, r1
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpriteSheet
lsls r0, 16
lsrs r0, 16
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0800EBFC: .4byte gDecompressionBuffer
thumb_func_end LoadCompressedObjectPic
thumb_func_start LoadCompressedObjectPicOverrideBuffer
LoadCompressedObjectPicOverrideBuffer: @ 800EC00
push {r4,r5,lr}
sub sp, 0x8
adds r4, r0, 0
adds r5, r1, 0
ldr r0, [r4]
bl LZ77UnCompWram
str r5, [sp]
ldrh r1, [r4, 0x6]
lsls r1, 16
ldrh r0, [r4, 0x4]
orrs r0, r1
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpriteSheet
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end LoadCompressedObjectPicOverrideBuffer
thumb_func_start LoadCompressedObjectPalette
LoadCompressedObjectPalette: @ 800EC28
push {r4,r5,lr}
sub sp, 0x8
adds r5, r0, 0
ldr r0, [r5]
ldr r4, _0800EC54 @ =gDecompressionBuffer
adds r1, r4, 0
bl LZ77UnCompWram
str r4, [sp]
ldrh r2, [r5, 0x4]
ldr r1, _0800EC58 @ =0xffff0000
ldr r0, [sp, 0x4]
ands r0, r1
orrs r0, r2
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpritePalette
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800EC54: .4byte gDecompressionBuffer
_0800EC58: .4byte 0xffff0000
thumb_func_end LoadCompressedObjectPalette
thumb_func_start LoadCompressedObjectPaletteOverrideBuffer
LoadCompressedObjectPaletteOverrideBuffer: @ 800EC5C
push {r4,r5,lr}
sub sp, 0x8
adds r5, r0, 0
adds r4, r1, 0
ldr r0, [r5]
bl LZ77UnCompWram
str r4, [sp]
ldrh r2, [r5, 0x4]
ldr r1, _0800EC88 @ =0xffff0000
ldr r0, [sp, 0x4]
ands r0, r1
orrs r0, r2
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpritePalette
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800EC88: .4byte 0xffff0000
thumb_func_end LoadCompressedObjectPaletteOverrideBuffer
thumb_func_start DecompressPicFromTable
DecompressPicFromTable: @ 800EC8C
push {r4,r5,lr}
adds r3, r0, 0
adds r4, r1, 0
adds r5, r2, 0
movs r0, 0xCE
lsls r0, 1
cmp r5, r0
ble _0800ECAC
ldr r0, _0800ECA8 @ =gUnknown_82350AC
ldr r0, [r0]
bl LZ77UnCompWram
b _0800ECB4
.align 2, 0
_0800ECA8: .4byte gUnknown_82350AC
_0800ECAC:
ldr r0, [r3]
adds r1, r4, 0
bl LZ77UnCompWram
_0800ECB4:
adds r0, r4, 0
adds r1, r5, 0
bl sub_800EDAC
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end DecompressPicFromTable
thumb_func_start sub_800ECC4
sub_800ECC4: @ 800ECC4
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
lsls r0, r2, 3
ldr r1, _0800ECEC @ =gUnknown_82350AC
adds r0, r1
movs r1, 0
cmp r4, r0
bne _0800ECDA
movs r1, 0x1
_0800ECDA:
str r1, [sp]
adds r0, r4, 0
adds r1, r5, 0
bl sub_800ECF0
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800ECEC: .4byte gUnknown_82350AC
thumb_func_end sub_800ECC4
thumb_func_start sub_800ECF0
sub_800ECF0: @ 800ECF0
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r6, r0, 0
adds r4, r1, 0
adds r7, r2, 0
adds r5, r3, 0
ldr r0, [sp, 0x18]
lsls r0, 24
lsrs r0, 24
mov r8, r0
cmp r7, 0xC9
bne _0800ED6C
movs r0, 0xC0
lsls r0, 18
ands r0, r5
lsrs r0, 18
movs r1, 0xC0
lsls r1, 10
ands r1, r5
lsrs r1, 12
orrs r0, r1
movs r1, 0xC0
lsls r1, 2
ands r1, r5
lsrs r1, 6
orrs r0, r1
movs r1, 0x3
ands r1, r5
orrs r0, r1
movs r1, 0x1C
bl __umodsi3
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0
bne _0800ED3E
movs r1, 0xC9
b _0800ED48
_0800ED3E:
movs r2, 0xCE
lsls r2, 1
adds r0, r1, r2
lsls r0, 16
lsrs r1, r0, 16
_0800ED48:
mov r0, r8
cmp r0, 0
bne _0800ED5C
ldr r0, _0800ED58 @ =gUnknown_823654C
lsls r1, 3
adds r1, r0
ldr r0, [r1]
b _0800ED78
.align 2, 0
_0800ED58: .4byte gUnknown_823654C
_0800ED5C:
ldr r0, _0800ED68 @ =gUnknown_82350AC
lsls r1, 3
adds r1, r0
ldr r0, [r1]
b _0800ED78
.align 2, 0
_0800ED68: .4byte gUnknown_82350AC
_0800ED6C:
movs r0, 0xCE
lsls r0, 1
cmp r7, r0
ble _0800ED84
ldr r0, _0800ED80 @ =gUnknown_82350AC
ldr r0, [r0]
_0800ED78:
adds r1, r4, 0
bl LZ77UnCompWram
b _0800ED8C
.align 2, 0
_0800ED80: .4byte gUnknown_82350AC
_0800ED84:
ldr r0, [r6]
adds r1, r4, 0
bl LZ77UnCompWram
_0800ED8C:
adds r0, r4, 0
adds r1, r7, 0
bl sub_800EDAC
lsls r0, r7, 16
lsrs r0, 16
adds r1, r5, 0
adds r2, r4, 0
mov r3, r8
bl DrawSpindaSpots
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800ECF0
thumb_func_start sub_800EDAC
sub_800EDAC: @ 800EDAC
push {lr}
adds r3, r0, 0
movs r0, 0xCD
lsls r0, 1
cmp r1, r0
bne _0800EDC6
movs r1, 0x80
lsls r1, 4
adds r0, r3, r1
ldr r2, _0800EDCC @ =0x04000200
adds r1, r3, 0
bl CpuSet
_0800EDC6:
pop {r0}
bx r0
.align 2, 0
_0800EDCC: .4byte 0x04000200
thumb_func_end sub_800EDAC
thumb_func_start sub_800EDD0
sub_800EDD0: @ 800EDD0
push {lr}
ldr r0, [r0]
bl LZ77UnCompWram
pop {r0}
bx r0
thumb_func_end sub_800EDD0
thumb_func_start sub_800EDDC
sub_800EDDC: @ 800EDDC
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x24
mov r9, r0
str r1, [sp]
str r2, [sp, 0x4]
adds r5, r3, 0
movs r0, 0x1
mov r1, r9
ands r0, r1
cmp r0, 0
bne _0800EDFC
b _0800EF94
_0800EDFC:
asrs r0, r1, 1
adds r0, 0x4
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x8]
movs r0, 0
ldr r2, [sp]
cmp r0, r2
blt _0800EE10
b _0800F024
_0800EE10:
movs r4, 0x8
subs r1, r4, r1
str r1, [sp, 0x10]
_0800EE16:
movs r7, 0
adds r0, 0x1
str r0, [sp, 0x14]
ldr r0, [sp, 0x10]
cmp r7, r0
bge _0800EE92
ldr r1, [sp, 0x8]
lsls r1, 8
str r1, [sp, 0x18]
movs r2, 0
mov r10, r2
mov r0, r9
movs r4, 0x8
subs r0, r4, r0
str r0, [sp, 0xC]
_0800EE34:
movs r3, 0
asrs r0, r7, 1
adds r1, r7, 0
movs r2, 0x1
ands r1, r2
str r1, [sp, 0x20]
lsls r0, 8
mov r8, r0
mov r12, r5
_0800EE46:
lsls r1, r3, 5
ldr r4, [sp, 0x18]
adds r0, r5, r4
adds r0, r1
mov r1, r8
adds r2, r0, r1
mov r1, r12
add r1, r8
movs r6, 0xF
_0800EE58:
ldr r4, [sp, 0x20]
cmp r4, 0
bne _0800EE68
strb r4, [r1]
add r4, sp, 0x20
ldrb r4, [r4]
strb r4, [r2, 0x10]
b _0800EE76
_0800EE68:
mov r0, r10
strb r0, [r1, 0x10]
movs r4, 0x80
lsls r4, 1
adds r4, r2, r4
str r4, [sp, 0x1C]
strb r0, [r4]
_0800EE76:
adds r2, 0x1
adds r1, 0x1
subs r6, 0x1
cmp r6, 0
bge _0800EE58
movs r0, 0x20
add r12, r0
adds r3, 0x1
cmp r3, 0x7
ble _0800EE46
adds r7, 0x1
ldr r1, [sp, 0xC]
cmp r7, r1
blt _0800EE34
_0800EE92:
movs r7, 0
movs r2, 0
_0800EE96:
movs r6, 0
adds r4, r7, 0x1
mov r8, r4
lsls r4, r7, 5
_0800EE9E:
adds r0, r6, 0x1
mov r10, r0
lsls r1, r6, 8
adds r0, r1, 0
adds r0, 0xC0
adds r0, r5, r0
adds r0, r4
adds r1, r5, r1
adds r1, r4
movs r3, 0x1F
_0800EEB2:
strb r2, [r1]
strb r2, [r0]
adds r0, 0x1
adds r1, 0x1
subs r3, 0x1
cmp r3, 0
bge _0800EEB2
mov r6, r10
cmp r6, 0x7
ble _0800EE9E
mov r7, r8
cmp r7, 0x1
ble _0800EE96
mov r1, r9
cmp r1, 0x5
bne _0800EED8
movs r2, 0x90
lsls r2, 1
adds r5, r2
_0800EED8:
movs r7, 0
cmp r7, r9
bge _0800EF6E
_0800EEDE:
movs r3, 0
adds r7, 0x1
mov r8, r7
cmp r3, r9
bge _0800EF4E
_0800EEE8:
adds r3, 0x1
mov r10, r3
ldr r4, [sp, 0x4]
adds r4, 0x20
adds r7, r5, 0
adds r7, 0x20
movs r0, 0x12
adds r0, r5
mov r12, r0
ldr r2, [sp, 0x4]
adds r3, r5, 0
movs r6, 0x3
_0800EF00:
ldrb r0, [r2]
mov r1, r12
strb r0, [r1]
ldrb r0, [r2, 0x1]
strb r0, [r1, 0x1]
ldrb r0, [r2, 0x2]
strb r0, [r1, 0x1E]
ldrb r0, [r2, 0x3]
strb r0, [r1, 0x1F]
movs r0, 0x81
lsls r0, 1
adds r1, r3, r0
ldrb r0, [r2, 0x10]
strb r0, [r1]
ldr r0, _0800EF58 @ =0x00000103
adds r1, r3, r0
ldrb r0, [r2, 0x11]
strb r0, [r1]
movs r0, 0x90
lsls r0, 1
adds r1, r3, r0
ldrb r0, [r2, 0x12]
strb r0, [r1]
ldr r0, _0800EF5C @ =0x00000121
adds r1, r3, r0
ldrb r0, [r2, 0x13]
strb r0, [r1]
movs r1, 0x4
add r12, r1
adds r2, 0x4
adds r3, 0x4
subs r6, 0x1
cmp r6, 0
bge _0800EF00
str r4, [sp, 0x4]
adds r5, r7, 0
mov r3, r10
cmp r3, r9
blt _0800EEE8
_0800EF4E:
mov r2, r9
cmp r2, 0x7
bne _0800EF60
adds r5, 0x20
b _0800EF68
.align 2, 0
_0800EF58: .4byte 0x00000103
_0800EF5C: .4byte 0x00000121
_0800EF60:
mov r4, r9
cmp r4, 0x5
bne _0800EF68
adds r5, 0x60
_0800EF68:
mov r7, r8
cmp r7, r9
blt _0800EEDE
_0800EF6E:
mov r0, r9
cmp r0, 0x7
bne _0800EF7C
movs r1, 0x80
lsls r1, 1
adds r5, r1
b _0800EF88
_0800EF7C:
mov r2, r9
cmp r2, 0x5
bne _0800EF88
movs r4, 0xF0
lsls r4, 1
adds r5, r4
_0800EF88:
ldr r0, [sp, 0x14]
ldr r1, [sp]
cmp r0, r1
bge _0800EF92
b _0800EE16
_0800EF92:
b _0800F024
_0800EF94:
movs r6, 0
ldr r2, [sp]
cmp r6, r2
bge _0800F024
_0800EF9C:
adds r6, 0x1
mov r10, r6
mov r4, r9
cmp r4, 0x6
bne _0800EFB4
movs r0, 0
movs r3, 0xFF
_0800EFAA:
strb r0, [r5]
adds r5, 0x1
subs r3, 0x1
cmp r3, 0
bge _0800EFAA
_0800EFB4:
movs r7, 0
cmp r7, r9
bge _0800F008
_0800EFBA:
adds r7, 0x1
mov r8, r7
mov r1, r9
lsls r0, r1, 5
cmp r1, 0x6
bne _0800EFD4
movs r1, 0
movs r3, 0x1F
_0800EFCA:
strb r1, [r5]
adds r5, 0x1
subs r3, 0x1
cmp r3, 0
bge _0800EFCA
_0800EFD4:
adds r1, r0, 0
cmp r1, 0
ble _0800EFEE
adds r3, r1, 0
_0800EFDC:
ldr r2, [sp, 0x4]
ldrb r0, [r2]
strb r0, [r5]
adds r2, 0x1
str r2, [sp, 0x4]
adds r5, 0x1
subs r3, 0x1
cmp r3, 0
bne _0800EFDC
_0800EFEE:
mov r4, r9
cmp r4, 0x6
bne _0800F002
movs r0, 0
movs r3, 0x1F
_0800EFF8:
strb r0, [r5]
adds r5, 0x1
subs r3, 0x1
cmp r3, 0
bge _0800EFF8
_0800F002:
mov r7, r8
cmp r7, r9
blt _0800EFBA
_0800F008:
mov r0, r9
cmp r0, 0x6
bne _0800F01C
movs r0, 0
movs r3, 0xFF
_0800F012:
strb r0, [r5]
adds r5, 0x1
subs r3, 0x1
cmp r3, 0
bge _0800F012
_0800F01C:
mov r6, r10
ldr r1, [sp]
cmp r6, r1
blt _0800EF9C
_0800F024:
add sp, 0x24
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800EDDC
thumb_func_start sub_800F034
sub_800F034: @ 800F034
push {r4,r5,lr}
sub sp, 0x8
adds r4, r0, 0
ldr r0, [r4]
ldr r0, [r0]
lsrs r0, 8
bl AllocZeroed
adds r5, r0, 0
cmp r5, 0
beq _0800F06E
ldr r0, [r4]
adds r1, r5, 0
bl LZ77UnCompWram
str r5, [sp]
ldrh r1, [r4, 0x6]
lsls r1, 16
ldrh r0, [r4, 0x4]
orrs r0, r1
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpriteSheet
adds r0, r5, 0
bl Free
movs r0, 0
b _0800F070
_0800F06E:
movs r0, 0x1
_0800F070:
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_800F034
thumb_func_start sub_800F078
sub_800F078: @ 800F078
push {r4,r5,lr}
sub sp, 0x8
adds r4, r0, 0
ldr r0, [r4]
ldr r0, [r0]
lsrs r0, 8
bl AllocZeroed
adds r5, r0, 0
cmp r5, 0
beq _0800F0B8
ldr r0, [r4]
adds r1, r5, 0
bl LZ77UnCompWram
str r5, [sp]
ldrh r2, [r4, 0x4]
ldr r1, _0800F0B4 @ =0xffff0000
ldr r0, [sp, 0x4]
ands r0, r1
orrs r0, r2
str r0, [sp, 0x4]
mov r0, sp
bl LoadSpritePalette
adds r0, r5, 0
bl Free
movs r0, 0
b _0800F0BA
.align 2, 0
_0800F0B4: .4byte 0xffff0000
_0800F0B8:
movs r0, 0x1
_0800F0BA:
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_800F078
thumb_func_start sub_800F0C4
sub_800F0C4: @ 800F0C4
sub sp, 0x4
mov r3, sp
ldrb r2, [r0, 0x1]
mov r1, sp
strb r2, [r1]
ldrb r1, [r0, 0x2]
strb r1, [r3, 0x1]
ldrb r0, [r0, 0x3]
strb r0, [r3, 0x2]
movs r0, 0
strb r0, [r3, 0x3]
ldr r0, [sp]
add sp, 0x4
bx lr
thumb_func_end sub_800F0C4
thumb_func_start DecompressPicFromTable_DontHandleDeoxys
DecompressPicFromTable_DontHandleDeoxys: @ 800F0E0
push {lr}
adds r3, r0, 0
movs r0, 0xCE
lsls r0, 1
cmp r2, r0
ble _0800F0FC
ldr r0, _0800F0F8 @ =gUnknown_82350AC
ldr r0, [r0]
bl LZ77UnCompWram
b _0800F102
.align 2, 0
_0800F0F8: .4byte gUnknown_82350AC
_0800F0FC:
ldr r0, [r3]
bl LZ77UnCompWram
_0800F102:
pop {r0}
bx r0
thumb_func_end DecompressPicFromTable_DontHandleDeoxys
thumb_func_start HandleLoadSpecialPokePic_DontHandleDeoxys
HandleLoadSpecialPokePic_DontHandleDeoxys: @ 800F108
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
lsls r0, r2, 3
ldr r1, _0800F130 @ =gUnknown_82350AC
adds r0, r1
movs r1, 0
cmp r4, r0
bne _0800F11E
movs r1, 0x1
_0800F11E:
str r1, [sp]
adds r0, r4, 0
adds r1, r5, 0
bl LoadSpecialPokePic_DontHandleDeoxys
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800F130: .4byte gUnknown_82350AC
thumb_func_end HandleLoadSpecialPokePic_DontHandleDeoxys
thumb_func_start LoadSpecialPokePic_DontHandleDeoxys
LoadSpecialPokePic_DontHandleDeoxys: @ 800F134
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r6, r0, 0
adds r5, r1, 0
adds r7, r2, 0
adds r4, r3, 0
ldr r0, [sp, 0x18]
lsls r0, 24
lsrs r0, 24
mov r8, r0
cmp r7, 0xC9
bne _0800F1B0
movs r0, 0xC0
lsls r0, 18
ands r0, r4
lsrs r0, 18
movs r1, 0xC0
lsls r1, 10
ands r1, r4
lsrs r1, 12
orrs r0, r1
movs r1, 0xC0
lsls r1, 2
ands r1, r4
lsrs r1, 6
orrs r0, r1
movs r1, 0x3
ands r1, r4
orrs r0, r1
movs r1, 0x1C
bl __umodsi3
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0
bne _0800F182
movs r1, 0xC9
b _0800F18C
_0800F182:
movs r2, 0xCE
lsls r2, 1
adds r0, r1, r2
lsls r0, 16
lsrs r1, r0, 16
_0800F18C:
mov r0, r8
cmp r0, 0
bne _0800F1A0
ldr r0, _0800F19C @ =gUnknown_823654C
lsls r1, 3
adds r1, r0
ldr r0, [r1]
b _0800F1BC
.align 2, 0
_0800F19C: .4byte gUnknown_823654C
_0800F1A0:
ldr r0, _0800F1AC @ =gUnknown_82350AC
lsls r1, 3
adds r1, r0
ldr r0, [r1]
b _0800F1BC
.align 2, 0
_0800F1AC: .4byte gUnknown_82350AC
_0800F1B0:
movs r0, 0xCE
lsls r0, 1
cmp r7, r0
ble _0800F1C8
ldr r0, _0800F1C4 @ =gUnknown_82350AC
ldr r0, [r0]
_0800F1BC:
adds r1, r5, 0
bl LZ77UnCompWram
b _0800F1D0
.align 2, 0
_0800F1C4: .4byte gUnknown_82350AC
_0800F1C8:
ldr r0, [r6]
adds r1, r5, 0
bl LZ77UnCompWram
_0800F1D0:
lsls r0, r7, 16
lsrs r0, 16
adds r1, r4, 0
adds r2, r5, 0
mov r3, r8
bl DrawSpindaSpots
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end LoadSpecialPokePic_DontHandleDeoxys
.align 2, 0 @ Don't pad with nop.