summaryrefslogtreecommitdiff
path: root/asm/decompress.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/decompress.s')
-rw-r--r--asm/decompress.s350
1 files changed, 350 insertions, 0 deletions
diff --git a/asm/decompress.s b/asm/decompress.s
new file mode 100644
index 000000000..99e449d8f
--- /dev/null
+++ b/asm/decompress.s
@@ -0,0 +1,350 @@
+ .include "constants/gba_constants.inc"
+
+ .include "include/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start unref_sub_800D42C
+unref_sub_800D42C: @ 800D42C
+ 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 _0800D44C
+ b _0800D5E4
+_0800D44C:
+ 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 _0800D460
+ b _0800D674
+_0800D460:
+ movs r4, 0x8
+ subs r1, r4, r1
+ str r1, [sp, 0x10]
+_0800D466:
+ movs r7, 0
+ adds r0, 0x1
+ str r0, [sp, 0x14]
+ ldr r0, [sp, 0x10]
+ cmp r7, r0
+ bge _0800D4E2
+ 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]
+_0800D484:
+ 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
+_0800D496:
+ 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
+_0800D4A8:
+ ldr r4, [sp, 0x20]
+ cmp r4, 0
+ bne _0800D4B8
+ strb r4, [r1]
+ add r4, sp, 0x20
+ ldrb r4, [r4]
+ strb r4, [r2, 0x10]
+ b _0800D4C6
+_0800D4B8:
+ mov r0, r10
+ strb r0, [r1, 0x10]
+ movs r4, 0x80
+ lsls r4, 1
+ adds r4, r2, r4
+ str r4, [sp, 0x1C]
+ strb r0, [r4]
+_0800D4C6:
+ adds r2, 0x1
+ adds r1, 0x1
+ subs r6, 0x1
+ cmp r6, 0
+ bge _0800D4A8
+ movs r0, 0x20
+ add r12, r0
+ adds r3, 0x1
+ cmp r3, 0x7
+ ble _0800D496
+ adds r7, 0x1
+ ldr r1, [sp, 0xC]
+ cmp r7, r1
+ blt _0800D484
+_0800D4E2:
+ movs r7, 0
+ movs r2, 0
+_0800D4E6:
+ movs r6, 0
+ adds r4, r7, 0x1
+ mov r8, r4
+ lsls r4, r7, 5
+_0800D4EE:
+ 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
+_0800D502:
+ strb r2, [r1]
+ strb r2, [r0]
+ adds r0, 0x1
+ adds r1, 0x1
+ subs r3, 0x1
+ cmp r3, 0
+ bge _0800D502
+ mov r6, r10
+ cmp r6, 0x7
+ ble _0800D4EE
+ mov r7, r8
+ cmp r7, 0x1
+ ble _0800D4E6
+ mov r1, r9
+ cmp r1, 0x5
+ bne _0800D528
+ movs r2, 0x90
+ lsls r2, 1
+ adds r5, r2
+_0800D528:
+ movs r7, 0
+ cmp r7, r9
+ bge _0800D5BE
+_0800D52E:
+ movs r3, 0
+ adds r7, 0x1
+ mov r8, r7
+ cmp r3, r9
+ bge _0800D59E
+_0800D538:
+ 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
+_0800D550:
+ 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, _0800D5A8 @ =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, _0800D5AC @ =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 _0800D550
+ str r4, [sp, 0x4]
+ adds r5, r7, 0
+ mov r3, r10
+ cmp r3, r9
+ blt _0800D538
+_0800D59E:
+ mov r2, r9
+ cmp r2, 0x7
+ bne _0800D5B0
+ adds r5, 0x20
+ b _0800D5B8
+ .align 2, 0
+_0800D5A8: .4byte 0x00000103
+_0800D5AC: .4byte 0x00000121
+_0800D5B0:
+ mov r4, r9
+ cmp r4, 0x5
+ bne _0800D5B8
+ adds r5, 0x60
+_0800D5B8:
+ mov r7, r8
+ cmp r7, r9
+ blt _0800D52E
+_0800D5BE:
+ mov r0, r9
+ cmp r0, 0x7
+ bne _0800D5CC
+ movs r1, 0x80
+ lsls r1, 1
+ adds r5, r1
+ b _0800D5D8
+_0800D5CC:
+ mov r2, r9
+ cmp r2, 0x5
+ bne _0800D5D8
+ movs r4, 0xF0
+ lsls r4, 1
+ adds r5, r4
+_0800D5D8:
+ ldr r0, [sp, 0x14]
+ ldr r1, [sp]
+ cmp r0, r1
+ bge _0800D5E2
+ b _0800D466
+_0800D5E2:
+ b _0800D674
+_0800D5E4:
+ movs r6, 0
+ ldr r2, [sp]
+ cmp r6, r2
+ bge _0800D674
+_0800D5EC:
+ adds r6, 0x1
+ mov r10, r6
+ mov r4, r9
+ cmp r4, 0x6
+ bne _0800D604
+ movs r0, 0
+ movs r3, 0xFF
+_0800D5FA:
+ strb r0, [r5]
+ adds r5, 0x1
+ subs r3, 0x1
+ cmp r3, 0
+ bge _0800D5FA
+_0800D604:
+ movs r7, 0
+ cmp r7, r9
+ bge _0800D658
+_0800D60A:
+ adds r7, 0x1
+ mov r8, r7
+ mov r1, r9
+ lsls r0, r1, 5
+ cmp r1, 0x6
+ bne _0800D624
+ movs r1, 0
+ movs r3, 0x1F
+_0800D61A:
+ strb r1, [r5]
+ adds r5, 0x1
+ subs r3, 0x1
+ cmp r3, 0
+ bge _0800D61A
+_0800D624:
+ adds r1, r0, 0
+ cmp r1, 0
+ ble _0800D63E
+ adds r3, r1, 0
+_0800D62C:
+ 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 _0800D62C
+_0800D63E:
+ mov r4, r9
+ cmp r4, 0x6
+ bne _0800D652
+ movs r0, 0
+ movs r3, 0x1F
+_0800D648:
+ strb r0, [r5]
+ adds r5, 0x1
+ subs r3, 0x1
+ cmp r3, 0
+ bge _0800D648
+_0800D652:
+ mov r7, r8
+ cmp r7, r9
+ blt _0800D60A
+_0800D658:
+ mov r0, r9
+ cmp r0, 0x6
+ bne _0800D66C
+ movs r0, 0
+ movs r3, 0xFF
+_0800D662:
+ strb r0, [r5]
+ adds r5, 0x1
+ subs r3, 0x1
+ cmp r3, 0
+ bge _0800D662
+_0800D66C:
+ mov r6, r10
+ ldr r1, [sp]
+ cmp r6, r1
+ blt _0800D5EC
+_0800D674:
+ 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 unref_sub_800D42C
+
+ .align 2, 0