diff --git a/asm/main_0207BC3C.s b/asm/main_0207BC3C.s index 805841af..8a493481 100644 --- a/asm/main_0207BC3C.s +++ b/asm/main_0207BC3C.s @@ -344,122 +344,3 @@ AtomicExchange: ; 0x0207C648 bx lr arm_func_end AtomicExchange - arm_func_start sub_0207C650 -sub_0207C650: ; 0x0207C650 - stmdb sp!, {r4, r5, r6, r7, lr} - ldr r5, [r0], #4 - mov r2, r5, lsr #8 - mov r7, #0 - tst r5, #0xf - bne _0207C66C - b _0207C670 -_0207C66C: - mov r7, #1 -_0207C670: - cmp r2, #0 - ble _0207C748 - ldrb lr, [r0], #1 - mov r4, #8 -_0207C680: - subs r4, r4, #1 - blt _0207C670 - tst lr, #0x80 - bne _0207C6A4 - ldrb r6, [r0], #1 - .word 0xE1416096 - add r1, r1, #1 - sub r2, r2, #1 - b _0207C730 -_0207C6A4: - ldrb r5, [r0] - cmp r7, #0 - beq _0207C6B4 - b _0207C6B8 -_0207C6B4: - mov r6, #3 -_0207C6B8: - beq _0207C6FC - tst r5, #0xe0 - bne _0207C6C8 - b _0207C6CC -_0207C6C8: - mov r6, #1 -_0207C6CC: - bne _0207C6FC - add r0, r0, #1 - and r6, r5, #0xf - mov r6, r6, lsl #4 - tst r5, #0x10 - beq _0207C6F4 - mov r6, r6, lsl #8 - ldrb r5, [r0], #1 - add r6, r6, r5, lsl #4 - add r6, r6, #0x100 -_0207C6F4: - add r6, r6, #0x11 - ldrb r5, [r0] -_0207C6FC: - add r3, r6, r5, asr #4 - add r0, r0, #1 - and r5, r5, #0xf - mov ip, r5, lsl #8 - ldrb r6, [r0], #1 - orr r5, r6, ip - add ip, r5, #1 - sub r2, r2, r3 -_0207C71C: - ldrb r5, [r1, -ip] - .word 0xE1415095 - add r1, r1, #1 - subs r3, r3, #1 - bgt _0207C71C -_0207C730: - cmp r2, #0 - bgt _0207C73C - b _0207C740 -_0207C73C: - mov lr, lr, lsl #1 -_0207C740: - bgt _0207C680 - b _0207C670 -_0207C748: - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - arm_func_end sub_0207C650 - - arm_func_start sub_0207C750 -sub_0207C750: ; 0x0207C750 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r1 - mov r6, r0 - mov r7, r3 - mvn r1, #0 - mov r4, r2 - bl sub_0207C1E0 - mov r0, r6 - mov r1, r5 - mov r2, r7 - mov r3, #0x1000000 - bl MIi_CheckDma0SourceAddress - cmp r7, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - add r0, r6, r6, lsl #1 - add r0, r0, #2 - mov r0, r0, lsl #2 - add r0, r0, #0xb0 - add r1, r0, #0x4000000 -_0207C79C: - ldr r0, [r1] - tst r0, #0x80000000 - bne _0207C79C - ldr r3, _0207C7C0 ; =0xAF000001 - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl InitDmaTransfer_Standard - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0207C7C0: .word 0xAF000001 - arm_func_end sub_0207C750 - - diff --git a/lib/NitroSDK/asm/mi_dma_card.s b/lib/NitroSDK/asm/mi_dma_card.s new file mode 100644 index 00000000..1c1a344f --- /dev/null +++ b/lib/NitroSDK/asm/mi_dma_card.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + + .text + + .public sub_0207C1E0 + .public MIi_CheckDma0SourceAddress + .public InitDmaTransfer_Standard + + arm_func_start sub_0207C750 ; MTi_CardDmaCopy32 +sub_0207C750: ; 0x0207C750 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r1 + mov r6, r0 + mov r7, r3 + mvn r1, #0 + mov r4, r2 + bl sub_0207C1E0 + mov r0, r6 + mov r1, r5 + mov r2, r7 + mov r3, #0x1000000 + bl MIi_CheckDma0SourceAddress + cmp r7, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + add r0, r6, r6, lsl #1 + add r0, r0, #2 + mov r0, r0, lsl #2 + add r0, r0, #0xb0 + add r1, r0, #0x4000000 +_0207C79C: + ldr r0, [r1] + tst r0, #0x80000000 + bne _0207C79C + ldr r3, _0207C7C0 ; =0xAF000001 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl InitDmaTransfer_Standard + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0207C7C0: .word 0xAF000001 + arm_func_end sub_0207C750 + diff --git a/lib/NitroSDK/asm/mi_uncompress.s b/lib/NitroSDK/asm/mi_uncompress.s new file mode 100644 index 00000000..32825790 --- /dev/null +++ b/lib/NitroSDK/asm/mi_uncompress.s @@ -0,0 +1,88 @@ + .include "asm/macros.inc" + .include "main_0207BC3C.inc" + + .text + + arm_func_start sub_0207C650 ; MI_UncompressLZ8 +sub_0207C650: ; 0x0207C650 + stmdb sp!, {r4, r5, r6, r7, lr} + ldr r5, [r0], #4 + mov r2, r5, lsr #8 + mov r7, #0 + tst r5, #0xf + bne _0207C66C + b _0207C670 +_0207C66C: + mov r7, #1 +_0207C670: + cmp r2, #0 + ble _0207C748 + ldrb lr, [r0], #1 + mov r4, #8 +_0207C680: + subs r4, r4, #1 + blt _0207C670 + tst lr, #0x80 + bne _0207C6A4 + ldrb r6, [r0], #1 + .word 0xE1416096 + add r1, r1, #1 + sub r2, r2, #1 + b _0207C730 +_0207C6A4: + ldrb r5, [r0] + cmp r7, #0 + beq _0207C6B4 + b _0207C6B8 +_0207C6B4: + mov r6, #3 +_0207C6B8: + beq _0207C6FC + tst r5, #0xe0 + bne _0207C6C8 + b _0207C6CC +_0207C6C8: + mov r6, #1 +_0207C6CC: + bne _0207C6FC + add r0, r0, #1 + and r6, r5, #0xf + mov r6, r6, lsl #4 + tst r5, #0x10 + beq _0207C6F4 + mov r6, r6, lsl #8 + ldrb r5, [r0], #1 + add r6, r6, r5, lsl #4 + add r6, r6, #0x100 +_0207C6F4: + add r6, r6, #0x11 + ldrb r5, [r0] +_0207C6FC: + add r3, r6, r5, asr #4 + add r0, r0, #1 + and r5, r5, #0xf + mov ip, r5, lsl #8 + ldrb r6, [r0], #1 + orr r5, r6, ip + add ip, r5, #1 + sub r2, r2, r3 +_0207C71C: + ldrb r5, [r1, -ip] + .word 0xE1415095 + add r1, r1, #1 + subs r3, r3, #1 + bgt _0207C71C +_0207C730: + cmp r2, #0 + bgt _0207C73C + b _0207C740 +_0207C73C: + mov lr, lr, lsl #1 +_0207C740: + bgt _0207C680 + b _0207C670 +_0207C748: + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + arm_func_end sub_0207C650 + diff --git a/main.lsf b/main.lsf index 666979de..917675eb 100644 --- a/main.lsf +++ b/main.lsf @@ -254,6 +254,8 @@ Static main Object lib/NitroSDK/asm/mi_wram.o Object lib/NitroSDK/asm/mi_dma.o Object asm/main_0207BC3C.o + Object lib/NitroSDK/asm/mi_uncompress.o + Object lib/NitroSDK/asm/mi_dma_card.o Object lib/NitroSDK/asm/mi_init.o Object lib/asm/nitro.o Object src/main_0207E81C.o diff --git a/src/main_0207E81C.c b/src/main_0207E81C.c index e5b6aace..beca14a0 100644 --- a/src/main_0207E81C.c +++ b/src/main_0207E81C.c @@ -1,6 +1,6 @@ #include "main_0207E81C.h" -u8 sub_0207E81C(s32 *param_0) +u8 sub_0207E81C(s32 *param_0) // FSi_OpenFileDirectCommand { param_0[9] = param_0[12]; param_0[11] = param_0[12]; @@ -10,7 +10,7 @@ u8 sub_0207E81C(s32 *param_0) return 0; } -u8 sub_0207E844() +u8 sub_0207E844() // FSi_CloseFileCommand { return 0; }