diff options
author | red031000 <rubenru09@aol.com> | 2020-08-31 15:21:01 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-08-31 15:21:01 +0100 |
commit | 79a290495b0b1fe4df5f8f55d9b3f008410ae83d (patch) | |
tree | 77981ab8fcb987ee8558616659f235101b5e427f | |
parent | e30abae941b5f61a9d943ffdc6dae7f0ea087118 (diff) |
arm9 MI_uncompress
-rw-r--r-- | arm9/asm/MI_uncompress.s | 50 | ||||
-rw-r--r-- | arm9/lib/include/MI_uncompress.h | 7 | ||||
-rw-r--r-- | arm9/lib/src/MI_uncompress.c | 59 |
3 files changed, 63 insertions, 53 deletions
diff --git a/arm9/asm/MI_uncompress.s b/arm9/asm/MI_uncompress.s deleted file mode 100644 index 5f736e14..00000000 --- a/arm9/asm/MI_uncompress.s +++ /dev/null @@ -1,50 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MI_UncompressLZ8 -MI_UncompressLZ8: ; 0x020CE528 - stmdb sp!, {r4-r6,lr} - ldr r5, [r0], #0x4 - mov r2, r5, lsr #0x8 -_020CE534: - cmp r2, #0x0 - ble _020CE5B4 - ldrb lr, [r0], #0x1 - mov r4, #0x8 -_020CE544: - subs r4, r4, #0x1 - blt _020CE534 - tst lr, #0x80 - bne _020CE568 - ldrb r6, [r0], #0x1 - .word 0xE1416096 - add r1, r1, #0x1 - sub r2, r2, #0x1 - b _020CE5A4 -_020CE568: - ldrb r5, [r0, #0x0] - mov r6, #0x3 - add r3, r6, r5, asr #0x4 - ldrb r6, [r0], #0x1 - and r5, r6, #0xf - mov r12, r5, lsl #0x8 - ldrb r6, [r0], #0x1 - orr r5, r6, r12 - add r12, r5, #0x1 - sub r2, r2, r3 -_020CE590: - ldrb r5, [r1, -r12] - .word 0xE1415095 - add r1, r1, #0x1 - subs r3, r3, #0x1 - bgt _020CE590 -_020CE5A4: - cmp r2, #0x0 - movgt lr, lr, lsl #0x1 - bgt _020CE544 - b _020CE534 -_020CE5B4: - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/lib/include/MI_uncompress.h b/arm9/lib/include/MI_uncompress.h index 55f28e27..defafa8c 100644 --- a/arm9/lib/include/MI_uncompress.h +++ b/arm9/lib/include/MI_uncompress.h @@ -1,6 +1,7 @@ -#ifndef NITRO_MI_UNCOMPRESS_H_ -#define NITRO_MI_UNCOMPRESS_H_ +#ifndef POKEDIAMOND_MI_UNCOMPRESS_H +#define POKEDIAMOND_MI_UNCOMPRESS_H void MIi_UncompressBackward(void * bottom); +void MI_UncompressLZ8(register const void *srcp, register void *destp); -#endif //NITRO_MI_UNCOMPRESS_H_ +#endif //POKEDIAMOND_MI_UNCOMPRESS_H 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 +} |