summaryrefslogtreecommitdiff
path: root/arm9/lib/src/MI_uncompress.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-31 14:25:20 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-31 14:25:20 -0400
commit5787ba96ba2bcb0860422c3e66c179e63368acac (patch)
tree38ff48e4d286804b19f920af382351d4d11a13d0 /arm9/lib/src/MI_uncompress.c
parent00cbfe2e138c842d9c0bce4e1848d3eaa88a39b8 (diff)
parentbf25a361cd0d013beb86a936b516957b66cfa011 (diff)
Merge branch 'master' of github.com:pret/pokediamond into pikalax_work
Diffstat (limited to 'arm9/lib/src/MI_uncompress.c')
-rw-r--r--arm9/lib/src/MI_uncompress.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/arm9/lib/src/MI_uncompress.c b/arm9/lib/src/MI_uncompress.c
new file mode 100644
index 00000000..c6ad7e4e
--- /dev/null
+++ b/arm9/lib/src/MI_uncompress.c
@@ -0,0 +1,59 @@
+#include "function_target.h"
+#include "MI_uncompress.h"
+
+ARM_FUNC asm void MI_UncompressLZ8(register const void *srcp, register void *destp)
+{
+ stmfd sp!, {r4-r6, lr}
+
+ ldr r5, [r0], #4
+ mov r2, r5, lsr #8
+
+_020CE534:
+ cmp r2, #0
+ ble _020CE5B4
+
+ ldrb lr, [r0], #1
+ mov r4, #8
+
+_020CE544:
+ subs r4, r4, #1
+ blt _020CE534
+
+ tst lr, #0x80
+ bne _020CE568
+
+ ldrb r6, [r0], #1
+ swpb r6, r6, [r1]
+ add r1, r1, #1
+ sub r2, r2, #1
+ b _020CE5A4
+
+_020CE568:
+ ldrb r5, [r0, #0]
+ mov r6, #3
+ add r3, r6, r5, asr #4
+ ldrb r6, [r0], #1
+ and r5, r6, #0xf
+ mov r12, r5, lsl #8
+ ldrb r6, [r0], #1
+ orr r5, r6, r12
+ add r12, r5, #1
+ sub r2, r2, r3
+
+_020CE590:
+ ldrb r5, [r1, -r12]
+ swpb r5, r5, [r1]
+ add r1, r1, #1
+ subs r3, r3, #1
+ bgt _020CE590
+
+_020CE5A4:
+ cmp r2, #0
+ movgt lr, lr, lsl #1
+ bgt _020CE544
+ b _020CE534
+
+_020CE5B4:
+ ldmfd sp!, {r4-r6, lr}
+ bx lr
+}