summaryrefslogtreecommitdiff
path: root/asm/decompress.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/decompress.s')
-rw-r--r--asm/decompress.s287
1 files changed, 287 insertions, 0 deletions
diff --git a/asm/decompress.s b/asm/decompress.s
new file mode 100644
index 000000000..32349001f
--- /dev/null
+++ b/asm/decompress.s
@@ -0,0 +1,287 @@
+ .include "constants/gba_constants.s"
+ .include "constants/species_constants.s"
+ .include "asm/macros.s"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_800D238
+sub_800D238: @ 800D238
+ push {lr}
+ bl LZ77UnCompWram
+ pop {r0}
+ bx r0
+ thumb_func_end sub_800D238
+
+ thumb_func_start LZDecompressVram
+LZDecompressVram: @ 800D244
+ push {lr}
+ bl LZ77UnCompVram
+ pop {r0}
+ bx r0
+ thumb_func_end LZDecompressVram
+
+ thumb_func_start LoadCompressedObjectPic
+LoadCompressedObjectPic: @ 800D250
+ push {r4,r5,lr}
+ sub sp, 0x8
+ adds r4, r0, 0
+ ldr r0, [r4]
+ movs r5, 0x80
+ lsls r5, 18
+ 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
+ add sp, 0x8
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end LoadCompressedObjectPic
+
+ thumb_func_start LoadCompressedObjectPicOverrideBuffer
+LoadCompressedObjectPicOverrideBuffer: @ 800D27C
+ 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: @ 800D2A4
+ push {r4,r5,lr}
+ sub sp, 0x8
+ adds r5, r0, 0
+ ldr r0, [r5]
+ movs r4, 0x80
+ lsls r4, 18
+ adds r1, r4, 0
+ bl LZ77UnCompWram
+ str r4, [sp]
+ ldrh r2, [r5, 0x4]
+ ldr r1, _0800D2D4 @ =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
+_0800D2D4: .4byte 0xffff0000
+ thumb_func_end LoadCompressedObjectPalette
+
+ thumb_func_start LoadCompressedObjectPaletteOverrideBuffer
+LoadCompressedObjectPaletteOverrideBuffer: @ 800D2D8
+ 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, _0800D304 @ =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
+_0800D304: .4byte 0xffff0000
+ thumb_func_end LoadCompressedObjectPaletteOverrideBuffer
+
+ thumb_func_start DecompressPicFromTable_2
+DecompressPicFromTable_2: @ 800D308
+ push {lr}
+ adds r2, r0, 0
+ ldr r3, [sp, 0x4]
+ ldr r1, [sp, 0x8]
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r1, r0
+ ble _0800D328
+ ldr r0, _0800D324 @ =gMonFrontPicTable
+ ldr r0, [r0]
+ adds r1, r3, 0
+ bl LZ77UnCompWram
+ b _0800D330
+ .align 2, 0
+_0800D324: .4byte gMonFrontPicTable
+_0800D328:
+ ldr r0, [r2]
+ adds r1, r3, 0
+ bl LZ77UnCompWram
+_0800D330:
+ pop {r0}
+ bx r0
+ thumb_func_end DecompressPicFromTable_2
+
+ thumb_func_start sub_800D334
+sub_800D334: @ 800D334
+ push {r4-r6,lr}
+ sub sp, 0x10
+ adds r4, r0, 0
+ adds r5, r1, 0
+ adds r6, r2, 0
+ ldr r2, [sp, 0x20]
+ ldr r1, _0800D354 @ =gUnknown_081FAF4C
+ ldr r0, [r1]
+ cmp r2, r0
+ beq _0800D34E
+ ldr r0, [r1, 0x8]
+ cmp r2, r0
+ bne _0800D358
+_0800D34E:
+ movs r1, 0
+ b _0800D35A
+ .align 2, 0
+_0800D354: .4byte gUnknown_081FAF4C
+_0800D358:
+ movs r1, 0x1
+_0800D35A:
+ str r2, [sp]
+ ldr r0, [sp, 0x24]
+ str r0, [sp, 0x4]
+ ldr r0, [sp, 0x28]
+ str r0, [sp, 0x8]
+ str r1, [sp, 0xC]
+ adds r0, r4, 0
+ adds r1, r5, 0
+ adds r2, r6, 0
+ bl sub_800D378
+ add sp, 0x10
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_800D334
+
+ thumb_func_start sub_800D378
+sub_800D378: @ 800D378
+ push {r4-r7,lr}
+ adds r1, r0, 0
+ ldr r5, [sp, 0x14]
+ ldr r6, [sp, 0x18]
+ ldr r4, [sp, 0x1C]
+ ldr r0, [sp, 0x20]
+ lsls r0, 24
+ lsrs r7, r0, 24
+ cmp r6, SPECIES_UNOWN
+ bne _0800D3EC
+ 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 _0800D3C0
+ movs r1, SPECIES_UNOWN
+ b _0800D3CA
+_0800D3C0:
+ movs r2, 0xCE
+ lsls r2, 1
+ adds r0, r1, r2
+ lsls r0, 16
+ lsrs r1, r0, 16
+_0800D3CA:
+ cmp r7, 0
+ bne _0800D3DC
+ ldr r0, _0800D3D8 @ =gMonBackPicTable
+ lsls r1, 3
+ adds r1, r0
+ ldr r0, [r1]
+ b _0800D3F8
+ .align 2, 0
+_0800D3D8: .4byte gMonBackPicTable
+_0800D3DC:
+ ldr r0, _0800D3E8 @ =gMonFrontPicTable
+ lsls r1, 3
+ adds r1, r0
+ ldr r0, [r1]
+ b _0800D3F8
+ .align 2, 0
+_0800D3E8: .4byte gMonFrontPicTable
+_0800D3EC:
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r6, r0
+ ble _0800D404
+ ldr r0, _0800D400 @ =gMonFrontPicTable
+ ldr r0, [r0]
+_0800D3F8:
+ adds r1, r5, 0
+ bl LZ77UnCompWram
+ b _0800D40C
+ .align 2, 0
+_0800D400: .4byte gMonFrontPicTable
+_0800D404:
+ ldr r0, [r1]
+ adds r1, r5, 0
+ bl LZ77UnCompWram
+_0800D40C:
+ lsls r0, r6, 16
+ lsrs r0, 16
+ adds r1, r4, 0
+ adds r2, r5, 0
+ adds r3, r7, 0
+ bl DrawSpindaSpots
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_800D378
+
+ thumb_func_start Unused_LZDecompressWramIndirect
+Unused_LZDecompressWramIndirect: @ 800D420
+ push {lr}
+ ldr r0, [r0]
+ bl LZ77UnCompWram
+ pop {r0}
+ bx r0
+ thumb_func_end Unused_LZDecompressWramIndirect
+
+ .align 2, 0 @ Don't pad with nop.