diff --git a/lib/NitroSDK/asm/fs_command.s b/lib/NitroSDK/asm/fs_command.s new file mode 100644 index 00000000..58034f9d --- /dev/null +++ b/lib/NitroSDK/asm/fs_command.s @@ -0,0 +1,148 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start FSi_ReleaseCommand +FSi_ReleaseCommand: ; 0x0207DCC0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r4, r1 + bl EnableIrqFlag + ldr r1, [r5] + mov r6, r0 + ldr r0, [r5, #4] + cmp r1, #0 + strne r0, [r1, #4] + cmp r0, #0 + strne r1, [r0] + mov r0, #0 + str r0, [r5] + str r0, [r5, #4] + ldr r1, [r5, #0xc] + add r0, r5, #0x18 + bic r1, r1, #0x4f + str r1, [r5, #0xc] + str r4, [r5, #0x14] + bl OS_WakeupThread + mov r0, r6 + bl SetIrqFlag + ldmia sp!, {r4, r5, r6, pc} + arm_func_end FSi_ReleaseCommand + + arm_func_start FSi_TranslateCommand +FSi_TranslateCommand: ; 0x0207DD1C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + ldr r0, [r8, #0xc] + ldr r5, [r8, #8] + mov r7, r1 + mov r1, #1 + tst r0, #4 + mov r6, r1, lsl r7 + moveq r1, #0 + ldr r0, [r5, #0x1c] + cmp r1, #0 + orrne r0, r0, #0x200 + orreq r0, r0, #0x100 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x58] + tst r0, r6 + beq _0207DDC4 + ldr r2, [r5, #0x54] + mov r0, r8 + mov r1, r7 + blx r2 + mov r4, r0 + cmp r4, #8 + addls pc, pc, r4, lsl #2 + b _0207DDC8 +_0207DD80: ; jump table + b _0207DDA4 ; case 0 + b _0207DDA4 ; case 1 + b _0207DDC8 ; case 2 + b _0207DDC8 ; case 3 + b _0207DDA4 ; case 4 + b _0207DDC8 ; case 5 + b _0207DDC8 ; case 6 + b _0207DDC8 ; case 7 + b _0207DDAC ; case 8 +_0207DDA4: + str r4, [r8, #0x14] + b _0207DDC8 +_0207DDAC: + ldr r1, [r5, #0x58] + mvn r0, r6 + and r0, r1, r0 + str r0, [r5, #0x58] + mov r4, #7 + b _0207DDC8 +_0207DDC4: + mov r4, #7 +_0207DDC8: + cmp r4, #7 + bne _0207DDE4 + ldr r1, _0207DEA8 ; =_020AEBF8 + mov r0, r8 + ldr r1, [r1, r7, lsl #2] + blx r1 + mov r4, r0 +_0207DDE4: + cmp r4, #6 + bne _0207DE5C + ldr r0, [r8, #0xc] + tst r0, #4 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + beq _0207DEA0 + bl EnableIrqFlag + ldr r1, [r5, #0x1c] + mov r7, r0 + tst r1, #0x200 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + beq _0207DE4C + mov r4, #0 + mov r6, #1 +_0207DE2C: + add r0, r5, #0xc + bl OS_SleepThread + ldr r0, [r5, #0x1c] + tst r0, #0x200 + movne r0, r6 + moveq r0, r4 + cmp r0, #0 + bne _0207DE2C +_0207DE4C: + mov r0, r7 + ldr r4, [r8, #0x14] + bl SetIrqFlag + b _0207DEA0 +_0207DE5C: + ldr r0, [r8, #0xc] + tst r0, #4 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + bne _0207DE90 + ldr r1, [r5, #0x1c] + mov r0, r8 + bic r2, r1, #0x100 + mov r1, r4 + str r2, [r5, #0x1c] + bl FSi_ReleaseCommand + b _0207DEA0 +_0207DE90: + ldr r0, [r5, #0x1c] + bic r0, r0, #0x200 + str r0, [r5, #0x1c] + str r4, [r8, #0x14] +_0207DEA0: + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0207DEA8: .word _020AEBF8 + arm_func_end FSi_TranslateCommand + diff --git a/lib/NitroSDK/asm/fs_command_default.s b/lib/NitroSDK/asm/fs_command_default.s new file mode 100644 index 00000000..dfc31d5c --- /dev/null +++ b/lib/NitroSDK/asm/fs_command_default.s @@ -0,0 +1,696 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start FSi_StrNiCmp +FSi_StrNiCmp: ; 0x0207DEAC + stmdb sp!, {r3, lr} + cmp r2, #0 + mov lr, #0 + bls _0207DEF4 +_0207DEBC: + ldrb ip, [r0, lr] + ldrb r3, [r1, lr] + sub ip, ip, #0x41 + cmp ip, #0x19 + sub r3, r3, #0x41 + addls ip, ip, #0x20 + cmp r3, #0x19 + addls r3, r3, #0x20 + cmp ip, r3 + subne r0, ip, r3 + ldmneia sp!, {r3, pc} + add lr, lr, #1 + cmp lr, r2 + blo _0207DEBC +_0207DEF4: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end FSi_StrNiCmp + + arm_func_start FSi_ReadTable +FSi_ReadTable: ; 0x0207DEFC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r7, r0 + ldr r4, [r7] + mov r6, r2 + ldr r2, [r4, #0x1c] + mov r0, r4 + orr r2, r2, #0x200 + str r2, [r4, #0x1c] + ldr r2, [r7, #4] + ldr r5, [r4, #0x50] + mov r3, r6 + blx r5 + cmp r0, #0 + cmpne r0, #1 + beq _0207DF44 + cmp r0, #6 + beq _0207DF54 + b _0207DFAC +_0207DF44: + ldr r1, [r4, #0x1c] + bic r1, r1, #0x200 + str r1, [r4, #0x1c] + b _0207DFAC +_0207DF54: + bl EnableIrqFlag + ldr r1, [r4, #0x1c] + mov r5, r0 + tst r1, #0x200 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + beq _0207DF9C + mov r8, #0 + mov sb, #1 +_0207DF7C: + add r0, r4, #0xc + bl OS_SleepThread + ldr r0, [r4, #0x1c] + tst r0, #0x200 + movne r0, sb + moveq r0, r8 + cmp r0, #0 + bne _0207DF7C +_0207DF9C: + mov r0, r5 + bl SetIrqFlag + ldr r0, [r4, #0x24] + ldr r0, [r0, #0x14] +_0207DFAC: + ldr r1, [r7, #4] + add r1, r1, r6 + str r1, [r7, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end FSi_ReadTable + + arm_func_start FSi_SeekDirDirect +FSi_SeekDirDirect: ; 0x0207DFBC + ldr r3, [r0, #0xc] + mov r2, #0 + orr r3, r3, #4 + str r3, [r0, #0xc] + ldr r3, [r0, #8] + ldr ip, _0207DFEC ; =FSi_TranslateCommand + str r3, [r0, #0x30] + str r2, [r0, #0x38] + strh r2, [r0, #0x36] + strh r1, [r0, #0x34] + mov r1, #2 + bx ip + .align 2, 0 +_0207DFEC: .word FSi_TranslateCommand + arm_func_end FSi_SeekDirDirect + + arm_func_start FSi_ReadFileCommand +FSi_ReadFileCommand: ; 0x0207DFF0 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0x2c] + ldr r3, [r0, #0x38] + ldr lr, [r0, #8] + ldr r1, [r0, #0x30] + add ip, r2, r3 + str ip, [r0, #0x2c] + ldr ip, [lr, #0x48] + mov r0, lr + blx ip + ldmia sp!, {r3, pc} + arm_func_end FSi_ReadFileCommand + + arm_func_start FSi_WriteFileCommand +FSi_WriteFileCommand: ; 0x0207E01C + stmdb sp!, {r3, lr} + ldr r2, [r0, #0x2c] + ldr r3, [r0, #0x38] + ldr lr, [r0, #8] + ldr r1, [r0, #0x30] + add ip, r2, r3 + str ip, [r0, #0x2c] + ldr ip, [lr, #0x4c] + mov r0, lr + blx ip + ldmia sp!, {r3, pc} + arm_func_end FSi_WriteFileCommand + + arm_func_start FSi_SeekDirCommand +FSi_SeekDirCommand: ; 0x0207E048 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r4, [r6, #8] + add r5, r6, #0x30 + str r4, [sp] + ldrh r1, [r5, #4] + ldr r2, [r4, #0x34] + add r0, sp, #0 + add r3, r2, r1, lsl #3 + add r1, sp, #8 + mov r2, #8 + str r3, [sp, #4] + bl FSi_ReadTable + movs r3, r0 + bne _0207E0D0 + add ip, r6, #0x20 + ldmia r5, {r0, r1, r2} + stmia ip, {r0, r1, r2} + ldrh r0, [r5, #6] + cmp r0, #0 + ldreq r0, [r5, #8] + cmpeq r0, #0 + bne _0207E0C0 + ldrh r0, [sp, #0xc] + strh r0, [r6, #0x26] + ldr r1, [r4, #0x34] + ldr r0, [sp, #8] + add r0, r1, r0 + str r0, [r6, #0x28] +_0207E0C0: + ldrh r1, [sp, #0xe] + ldr r0, _0207E0DC ; =0x00000FFF + and r0, r1, r0 + str r0, [r6, #0x2c] +_0207E0D0: + mov r0, r3 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0207E0DC: .word 0x00000FFF + arm_func_end FSi_SeekDirCommand + + arm_func_start FSi_ReadDirCommand +FSi_ReadDirCommand: ; 0x0207E0E0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + ldr r4, [r5, #0x30] + ldr r1, [r5, #8] + add r0, sp, #4 + str r1, [sp, #4] + ldr r3, [r5, #0x28] + add r1, sp, #0 + mov r2, #1 + str r3, [sp, #8] + bl FSi_ReadTable + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, pc} + ldrb r1, [sp] + and r2, r1, #0x7f + mov r1, r1, asr #7 + str r2, [r4, #0x10] + and r1, r1, #1 + str r1, [r4, #0xc] + ldr r2, [r4, #0x10] + cmp r2, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r5, #0x34] + cmp r1, #0 + bne _0207E180 + add r0, sp, #4 + add r1, r4, #0x14 + bl FSi_ReadTable + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, pc} + ldr r1, [r4, #0x10] + mov r2, #0 + add r1, r4, r1 + strb r2, [r1, #0x14] + b _0207E18C +_0207E180: + ldr r1, [sp, #8] + add r1, r1, r2 + str r1, [sp, #8] +_0207E18C: + ldr r1, [r4, #0xc] + cmp r1, #0 + beq _0207E1DC + add r0, sp, #4 + add r1, sp, #2 + mov r2, #2 + bl FSi_ReadTable + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, pc} + ldr r2, [r5, #8] + ldr r1, _0207E208 ; =0x00000FFF + str r2, [r4] + ldrh r3, [sp, #2] + mov r2, #0 + and r1, r3, r1 + strh r1, [r4, #4] + strh r2, [r4, #6] + str r2, [r4, #8] + b _0207E1F8 +_0207E1DC: + ldr r1, [r5, #8] + str r1, [r4] + ldrh r1, [r5, #0x26] + str r1, [r4, #4] + ldrh r1, [r5, #0x26] + add r1, r1, #1 + strh r1, [r5, #0x26] +_0207E1F8: + ldr r1, [sp, #8] + str r1, [r5, #0x28] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0207E208: .word 0x00000FFF + arm_func_end FSi_ReadDirCommand + + arm_func_start FSi_FindPathCommand +FSi_FindPathCommand: ; 0x0207E20C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x94 + mov sb, r0 + ldr r5, [sb, #0x3c] + mov r1, #2 + ldr r6, [sb, #0x40] + bl FSi_TranslateCommand + ldrb r3, [r5] + cmp r3, #0 + beq _0207E3C4 +_0207E234: + mov r8, #0 + mov r0, #1 + mov r1, r8 + b _0207E248 +_0207E244: + add r8, r8, #1 +_0207E248: + ldrb r7, [r5, r8] + mov r2, r1 + cmp r7, #0 + cmpne r7, #0x2f + cmpne r7, #0x5c + movne r2, r0 + cmp r2, #0 + bne _0207E244 + cmp r7, #0 + cmpeq r6, #0 + movne r7, #1 + cmp r8, #0 + addeq sp, sp, #0x94 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + cmp r3, #0x2e + bne _0207E2DC + cmp r8, #1 + addeq r5, r5, #1 + beq _0207E3A8 + ldrb r0, [r5, #1] + cmp r8, #2 + moveq r1, #1 + movne r1, #0 + cmp r0, #0x2e + moveq r0, #1 + movne r0, #0 + tst r1, r0 + beq _0207E2DC + ldrh r0, [sb, #0x24] + cmp r0, #0 + beq _0207E2D4 + ldr r1, [sb, #0x2c] + mov r0, sb + bl FSi_SeekDirDirect +_0207E2D4: + add r5, r5, #2 + b _0207E3A8 +_0207E2DC: + cmp r8, #0x7f + addgt sp, sp, #0x94 + movgt r0, #1 + ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + add r1, sp, #0 + mov r0, #0 + str r1, [sb, #0x30] + str r0, [sb, #0x34] + add sl, sp, #0x14 + mov r4, #3 +_0207E304: + mov r0, sb + mov r1, r4 + bl FSi_TranslateCommand + cmp r0, #0 + addne sp, sp, #0x94 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, [sp, #0xc] + cmp r7, r0 + ldreq r0, [sp, #0x10] + cmpeq r8, r0 + bne _0207E304 + mov r0, r5 + mov r1, sl + mov r2, r8 + bl FSi_StrNiCmp + cmp r0, #0 + bne _0207E304 + cmp r7, #0 + beq _0207E378 + add r0, sp, #0 + add r3, sb, #0x30 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, sb + mov r1, #2 + add r5, r5, r8 + bl FSi_TranslateCommand + b _0207E3A8 +_0207E378: + cmp r6, #0 + addne sp, sp, #0x94 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + ldr r3, [sb, #0x44] + ldr r2, [sp] + ldr r1, [sp, #4] + add sp, sp, #0x94 + str r2, [r3] + mov r0, #0 + str r1, [r3, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} +_0207E3A8: + ldrb r0, [r5] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldrb r3, [r5, r0]! + cmp r3, #0 + bne _0207E234 +_0207E3C4: + cmp r6, #0 + addeq sp, sp, #0x94 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + ldr r3, [sb, #0x44] + add r0, sb, #0x20 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #0 + add sp, sp, #0x94 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end FSi_FindPathCommand + + arm_func_start FSi_GetPathCommand +FSi_GetPathCommand: ; 0x0207E3F0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xe0 + mov sl, r0 + ldr r1, [sl, #8] + add r0, sp, #4 + str r1, [sp] + bl FileInit + ldr r0, [sl, #8] + str r0, [sp, #0xc] + ldr r0, [sl, #0xc] + tst r0, #0x20 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + ldrneh sb, [sl, #0x24] + movne r6, #0x10000 + bne _0207E4D4 + ldrh r0, [sl, #0x38] + ldr r6, [sl, #0x20] + cmp r0, #0 + ldrneh sb, [sl, #0x3a] + bne _0207E4D4 + mov r7, #0 + mov r8, r7 + mov sb, #0x10000 + add r5, sp, #4 + mov r4, #3 + add fp, sp, #0x4c +_0207E460: + mov r0, r5 + mov r1, r7 + bl FSi_SeekDirDirect + mov r2, #1 + cmp r7, #0 + mov r0, r5 + mov r1, #3 + ldreq r8, [sp, #0x30] + str fp, [sp, #0x34] + str r2, [sp, #0x38] + bl FSi_TranslateCommand + cmp r0, #0 + bne _0207E4C0 +_0207E494: + ldr r0, [sp, #0x58] + cmp r0, #0 + ldreq r0, [sp, #0x50] + cmpeq r0, r6 + ldreqh sb, [sp, #0x28] + beq _0207E4C0 + mov r0, r5 + mov r1, r4 + bl FSi_TranslateCommand + cmp r0, #0 + beq _0207E494 +_0207E4C0: + cmp sb, #0x10000 + bne _0207E4D4 + add r7, r7, #1 + cmp r7, r8 + blo _0207E460 +_0207E4D4: + cmp sb, #0x10000 + bne _0207E4F0 + mov r0, #0 + strh r0, [sl, #0x38] + add sp, sp, #0xe0 + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207E4F0: + ldrh r0, [sl, #0x38] + cmp r0, #0 + bne _0207E5D4 + ldr r0, [sp] + mov r1, #0 + ldr r0, [r0] + cmp r0, #0xff + addls r8, r1, #1 + bls _0207E520 + cmp r0, #0xff00 + addls r8, r1, #2 + addhi r8, r1, #3 +_0207E520: + cmp r6, #0x10000 + ldrne r0, [sp, #0x5c] + add r8, r8, #2 + addne r8, r8, r0 + mov r7, sb + cmp sb, #0 + beq _0207E5C8 + add r0, sp, #4 + mov r1, sb + bl FSi_SeekDirDirect + add r5, sp, #4 + mov r4, #3 + add fp, sp, #0x4c +_0207E554: + ldr r1, [sp, #0x30] + mov r0, r5 + bl FSi_SeekDirDirect + mov r1, #1 + str r1, [sp, #0x38] + mov r0, r5 + mov r1, #3 + str fp, [sp, #0x34] + bl FSi_TranslateCommand + cmp r0, #0 + bne _0207E5BC +_0207E580: + ldr r0, [sp, #0x58] + cmp r0, #0 + beq _0207E5A8 + ldrh r0, [sp, #0x50] + cmp r0, r7 + bne _0207E5A8 + ldr r0, [sp, #0x5c] + add r0, r0, #1 + add r8, r8, r0 + b _0207E5BC +_0207E5A8: + mov r0, r5 + mov r1, r4 + bl FSi_TranslateCommand + cmp r0, #0 + beq _0207E580 +_0207E5BC: + ldrh r7, [sp, #0x28] + cmp r7, #0 + bne _0207E554 +_0207E5C8: + add r0, r8, #1 + strh r0, [sl, #0x38] + strh sb, [sl, #0x3a] +_0207E5D4: + ldr r5, [sl, #0x30] + cmp r5, #0 + addeq sp, sp, #0xe0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrh r4, [sl, #0x38] + ldr r0, [sl, #0x34] + cmp r0, r4 + addlo sp, sp, #0xe0 + movlo r0, #1 + ldmloia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp] + mov r7, #0 + ldr r0, [r0] + cmp r0, #0xff + movls r8, #1 + bls _0207E624 + cmp r0, #0xff00 + movls r8, #2 + movhi r8, #3 +_0207E624: + ldr r0, [sp] + mov r1, r5 + mov r2, r8 + bl MI_CpuCopy8 + add r1, r7, r8 + ldr r0, _0207E798 ; =_020B2BB0 + add r1, r5, r1 + mov r2, #2 + bl MI_CpuCopy8 + add r0, sp, #4 + mov r1, sb + bl FSi_SeekDirDirect + cmp r6, #0x10000 + beq _0207E6D4 + add r3, sp, #0x4c + mov r2, #0 + add r0, sp, #4 + mov r1, #3 + str r3, [sp, #0x34] + str r2, [sp, #0x38] + bl FSi_TranslateCommand + cmp r0, #0 + bne _0207E6B0 + add r8, sp, #4 + mov r7, #3 +_0207E688: + ldr r0, [sp, #0x58] + cmp r0, #0 + ldreq r0, [sp, #0x50] + cmpeq r0, r6 + beq _0207E6B0 + mov r0, r8 + mov r1, r7 + bl FSi_TranslateCommand + cmp r0, #0 + beq _0207E688 +_0207E6B0: + ldr r0, [sp, #0x5c] + add r1, r5, r4 + add r6, r0, #1 + add r0, sp, #0x60 + mov r2, r6 + sub r1, r1, r6 + bl MI_CpuCopy8 + sub r4, r4, r6 + b _0207E6E4 +_0207E6D4: + add r0, r5, r4 + mov r1, #0 + strb r1, [r0, #-1] + sub r4, r4, #1 +_0207E6E4: + cmp sb, #0 + beq _0207E78C + add sl, sp, #4 + mov r6, #3 + add r8, sp, #0x4c + mov r7, #0 + mov fp, #0x2f +_0207E700: + ldr r1, [sp, #0x30] + mov r0, sl + bl FSi_SeekDirDirect + add r1, r5, r4 + str r8, [sp, #0x34] + str r7, [sp, #0x38] + strb fp, [r1, #-1] + mov r0, sl + mov r1, #3 + sub r4, r4, #1 + bl FSi_TranslateCommand + cmp r0, #0 + bne _0207E780 +_0207E734: + ldr r0, [sp, #0x58] + cmp r0, #0 + beq _0207E76C + ldrh r0, [sp, #0x50] + cmp r0, sb + bne _0207E76C + ldr sb, [sp, #0x5c] + add r1, r5, r4 + add r0, sp, #0x60 + mov r2, sb + sub r1, r1, sb + bl MI_CpuCopy8 + sub r4, r4, sb + b _0207E780 +_0207E76C: + mov r0, sl + mov r1, r6 + bl FSi_TranslateCommand + cmp r0, #0 + beq _0207E734 +_0207E780: + ldrh sb, [sp, #0x28] + cmp sb, #0 + bne _0207E700 +_0207E78C: + mov r0, #0 + add sp, sp, #0xe0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0207E798: .word _020B2BB0 + arm_func_end FSi_GetPathCommand + + arm_func_start FSi_OpenFileFastCommand +FSi_OpenFileFastCommand: ; 0x0207E79C + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + mov r5, r0 + ldr r1, [r5, #8] + ldr r4, [r5, #0x34] + ldr r0, [r1, #0x30] + mov r2, r4, lsl #3 + cmp r0, r4, lsl #3 + addls sp, sp, #0x10 + movls r0, #1 + ldmlsia sp!, {r3, r4, r5, pc} + str r1, [sp] + ldr r1, [r1, #0x2c] + add r0, sp, #0 + add r3, r1, r2 + add r1, sp, #8 + mov r2, #8 + str r3, [sp, #4] + bl FSi_ReadTable + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r3, r4, r5, pc} + ldr r1, [sp, #8] + mov r0, r5 + str r1, [r5, #0x30] + ldr r2, [sp, #0xc] + mov r1, #7 + str r2, [r5, #0x34] + str r4, [r5, #0x38] + bl FSi_TranslateCommand + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end FSi_OpenFileFastCommand diff --git a/lib/asm/include/nitro.inc b/lib/NitroSDK/asm/include/nitro.inc similarity index 69% rename from lib/asm/include/nitro.inc rename to lib/NitroSDK/asm/include/nitro.inc index 86df7efd..2651ed00 100644 --- a/lib/asm/include/nitro.inc +++ b/lib/NitroSDK/asm/include/nitro.inc @@ -19,6 +19,7 @@ .public DC_StoreRange .public EnableIrqFlag .public FileInit +.public FSi_TranslateCommand .public InitDmaTransfer_Standard .public MI_CpuCopy8 .public MI_SetWramBank @@ -38,6 +39,21 @@ .public OS_UnlockMutex .public OS_WakeupThread .public OSi_EnterDmaCallback +.public PXI_InitFifo +.public PXI_IsCallbackReady +.public PXI_SendWordByFifo +.public PXI_SetFifoRecvCallback .public SetIrqFlag +.public SND_CommandInit +.public Snd_AlarmInit +.public Snd_AllocCommand +.public Snd_PushCommand +.public Sndi_CallAlarmHandler +.public Sndi_GetFinishedCommandTag +.public Sndi_IncAlarmId +.public Sndi_InitSharedWork +.public Sndi_LockMutex +.public Sndi_SetAlarmHandler +.public Sndi_UnlockMutex .public sub_01FF9B3C .public WaitForever2 diff --git a/lib/NitroSDK/asm/pxi_fifo.s b/lib/NitroSDK/asm/pxi_fifo.s new file mode 100644 index 00000000..301f2fce --- /dev/null +++ b/lib/NitroSDK/asm/pxi_fifo.s @@ -0,0 +1,242 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start PXI_InitFifo +PXI_InitFifo: ; 0x0207D9B0 + stmdb sp!, {r3, r4, r5, lr} + bl EnableIrqFlag + ldr r1, _0207DA94 ; =_022BB564 + mov r4, r0 + ldrh r0, [r1] + cmp r0, #0 + bne _0207DA88 + mov r2, #1 + strh r2, [r1] + mov r2, #0 + ldr r0, _0207DA98 ; =0x027FFC00 + mov r1, r2 + str r2, [r0, #0x388] + ldr r0, _0207DA9C ; =_022BB568 +_0207D9E8: + str r1, [r0, r2, lsl #2] + add r2, r2, #1 + cmp r2, #0x20 + blt _0207D9E8 + ldr r2, _0207DAA0 ; =0x0000C408 + ldr r1, _0207DAA4 ; =0x04000184 + mov r0, #0x40000 + strh r2, [r1] + bl OS_ResetRequestIrqMask + ldr r1, _0207DAA8 ; =PXIi_HandlerRecvFifoNotEmpty + mov r0, #0x40000 + bl OS_SetIrqFunction + mov r0, #0x40000 + bl OS_EnableIrqMask + mov r5, #0 + ldr r3, _0207DAAC ; =0x04000180 + mov r1, r5 + mov r2, #0x3e8 +_0207DA30: + ldrh r0, [r3] + ands lr, r0, #0xf + mov r0, lr, lsl #8 + strh r0, [r3] + bne _0207DA4C + cmp r5, #4 + bgt _0207DA88 +_0207DA4C: + ldrh r0, [r3] + mov ip, r2 + and r0, r0, #0xf + cmp r0, lr + bne _0207DA80 +_0207DA60: + cmp ip, #0 + movle r5, r1 + ble _0207DA80 + ldrh r0, [r3] + sub ip, ip, #1 + and r0, r0, #0xf + cmp r0, lr + beq _0207DA60 +_0207DA80: + add r5, r5, #1 + b _0207DA30 +_0207DA88: + mov r0, r4 + bl SetIrqFlag + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0207DA94: .word _022BB564 +_0207DA98: .word 0x027FFC00 +_0207DA9C: .word _022BB568 +_0207DAA0: .word 0x0000C408 +_0207DAA4: .word 0x04000184 +_0207DAA8: .word PXIi_HandlerRecvFifoNotEmpty +_0207DAAC: .word 0x04000180 + arm_func_end PXI_InitFifo + + arm_func_start PXI_SetFifoRecvCallback +PXI_SetFifoRecvCallback: ; 0x0207DAB0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl EnableIrqFlag + ldr r1, _0207DAF4 ; =_022BB568 + ldr r3, _0207DAF8 ; =0x027FFC00 + str r5, [r1, r4, lsl #2] + cmp r5, #0 + ldrne r2, [r3, #0x388] + mov r1, #1 + orrne r1, r2, r1, lsl r4 + mvneq r1, r1, lsl r4 + ldreq r2, [r3, #0x388] + andeq r1, r2, r1 + str r1, [r3, #0x388] + bl SetIrqFlag + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0207DAF4: .word _022BB568 +_0207DAF8: .word 0x027FFC00 + arm_func_end PXI_SetFifoRecvCallback + + arm_func_start PXI_IsCallbackReady +PXI_IsCallbackReady: ; 0x0207DAFC + ldr r2, _0207DB1C ; =0x027FFC00 + mov r3, #1 + add r1, r2, r1, lsl #2 + ldr r1, [r1, #0x388] + tst r1, r3, lsl r0 + moveq r3, #0 + mov r0, r3 + bx lr + .align 2, 0 +_0207DB1C: .word 0x027FFC00 + arm_func_end PXI_IsCallbackReady + + arm_func_start PXI_SendWordByFifo +PXI_SendWordByFifo: ; 0x0207DB20 + stmdb sp!, {r3, lr} + ldr ip, [sp] + ldr r3, _0207DBA4 ; =0x04000184 + bic ip, ip, #0x1f + and r0, r0, #0x1f + orr ip, ip, r0 + ldrh r0, [r3] + bic ip, ip, #0x20 + mov r2, r2, lsl #0x1f + orr r2, ip, r2, lsr #26 + and r2, r2, #0x3f + orr r1, r2, r1, lsl #6 + str r1, [sp] + tst r0, #0x4000 + beq _0207DB70 + ldrh r1, [r3] + mvn r0, #0 + orr r1, r1, #0xc000 + strh r1, [r3] + ldmia sp!, {r3, pc} +_0207DB70: + bl EnableIrqFlag + ldr r2, _0207DBA4 ; =0x04000184 + ldrh r1, [r2] + tst r1, #2 + beq _0207DB90 + bl SetIrqFlag + mvn r0, #1 + ldmia sp!, {r3, pc} +_0207DB90: + ldr r1, [sp] + str r1, [r2, #4] + bl SetIrqFlag + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207DBA4: .word 0x04000184 + arm_func_end PXI_SendWordByFifo + + arm_func_start PXIi_HandlerRecvFifoNotEmpty +PXIi_HandlerRecvFifoNotEmpty: ; 0x0207DBA8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mvn r8, #3 + ldr r6, [sp] + ldr sb, _0207DCB8 ; =0x04000184 + ldr r4, _0207DCBC ; =_022BB568 + add sl, r8, #1 + mov r7, #0x4100000 + mov r5, #0 +_0207DBCC: + ldrh r0, [sb] + tst r0, #0x4000 + beq _0207DBEC + ldrh r0, [sb] + add r1, r8, #1 + orr r0, r0, #0xc000 + strh r0, [sb] + b _0207DC18 +_0207DBEC: + bl EnableIrqFlag + ldrh r1, [sb] + tst r1, #0x100 + beq _0207DC08 + bl SetIrqFlag + mov r1, r8 + b _0207DC18 +_0207DC08: + ldr r6, [r7] + str r6, [sp] + bl SetIrqFlag + mov r1, r5 +_0207DC18: + cmp r1, r8 + addeq sp, sp, #4 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + cmp r1, sl + beq _0207DBCC + mov r0, r6, lsl #0x1b + movs r0, r0, lsr #0x1b + beq _0207DBCC + ldr r3, [r4, r0, lsl #2] + cmp r3, #0 + beq _0207DC58 + mov r2, r6, lsl #0x1a + mov r1, r6, lsr #6 + mov r2, r2, lsr #0x1f + blx r3 + b _0207DBCC +_0207DC58: + mov r0, r6, lsl #0x1a + movs r0, r0, lsr #0x1f + bne _0207DBCC + ldrh r0, [sb] + orr r6, r6, #0x20 + str r6, [sp] + tst r0, #0x4000 + beq _0207DC88 + ldrh r0, [sb] + orr r0, r0, #0xc000 + strh r0, [sb] + b _0207DBCC +_0207DC88: + bl EnableIrqFlag + ldrh r1, [sb] + tst r1, #2 + beq _0207DCA0 + bl SetIrqFlag + b _0207DBCC +_0207DCA0: + mov r1, r6 + str r1, [sb, #4] + bl SetIrqFlag + b _0207DBCC +_0207DCB0: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0207DCB8: .word 0x04000184 +_0207DCBC: .word _022BB568 + arm_func_end PXIi_HandlerRecvFifoNotEmpty + diff --git a/lib/NitroSDK/asm/pxi_init.s b/lib/NitroSDK/asm/pxi_init.s new file mode 100644 index 00000000..5b62f04c --- /dev/null +++ b/lib/NitroSDK/asm/pxi_init.s @@ -0,0 +1,13 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start PXI_Init +PXI_Init: ; 0x0207D9A4 + ldr ip, _0207D9AC ; =PXI_InitFifo + bx ip + .align 2, 0 +_0207D9AC: .word PXI_InitFifo + arm_func_end PXI_Init + diff --git a/lib/NitroSDK/asm/snd_alarm.s b/lib/NitroSDK/asm/snd_alarm.s new file mode 100644 index 00000000..0d615b3b --- /dev/null +++ b/lib/NitroSDK/asm/snd_alarm.s @@ -0,0 +1,75 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start Snd_AlarmInit +Snd_AlarmInit: ; 0x0207D380 + mov r1, #0 + ldr r2, _0207D3AC ; =_022BB500 + mov r0, r1 +_0207D38C: + str r0, [r2] + str r0, [r2, #4] + add r1, r1, #1 + strb r0, [r2, #8] + cmp r1, #8 + add r2, r2, #0xc + blt _0207D38C + bx lr + .align 2, 0 +_0207D3AC: .word _022BB500 + arm_func_end Snd_AlarmInit + + arm_func_start Sndi_IncAlarmId +Sndi_IncAlarmId: ; 0x0207D3B0 + ldr r2, _0207D3CC ; =_022BB500 + mov r1, #0xc + mla r1, r0, r1, r2 + ldrb r0, [r1, #8] + add r0, r0, #1 + strb r0, [r1, #8] + bx lr + .align 2, 0 +_0207D3CC: .word _022BB500 + arm_func_end Sndi_IncAlarmId + + arm_func_start Sndi_SetAlarmHandler +Sndi_SetAlarmHandler: ; 0x0207D3D0 + mov r3, #0xc + mul r3, r0, r3 + ldr r0, _0207D3FC ; =_022BB500 + str r1, [r0, r3] + add r1, r0, r3 + str r2, [r1, #4] + ldrb r0, [r1, #8] + add r0, r0, #1 + strb r0, [r1, #8] + and r0, r0, #0xff + bx lr + .align 2, 0 +_0207D3FC: .word _022BB500 + arm_func_end Sndi_SetAlarmHandler + + arm_func_start Sndi_CallAlarmHandler +Sndi_CallAlarmHandler: ; 0x0207D400 + stmdb sp!, {r3, lr} + ldr r3, _0207D440 ; =_022BB500 + and r2, r0, #0xff + mov r1, #0xc + mla r3, r2, r1, r3 + mov r1, r0, asr #8 + ldrb r0, [r3, #8] + and r1, r1, #0xff + cmp r1, r0 + ldmneia sp!, {r3, pc} + ldr r1, [r3] + cmp r1, #0 + ldmeqia sp!, {r3, pc} + ldr r0, [r3, #4] + blx r1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207D440: .word _022BB500 + arm_func_end Sndi_CallAlarmHandler + diff --git a/lib/NitroSDK/asm/snd_bank.s b/lib/NitroSDK/asm/snd_bank.s new file mode 100644 index 00000000..66153334 --- /dev/null +++ b/lib/NitroSDK/asm/snd_bank.s @@ -0,0 +1,316 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start Snd_AssignWaveArc +Snd_AssignWaveArc: ; 0x0207D5B0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl Sndi_LockMutex + add r3, r6, r5, lsl #3 + ldr r2, [r3, #0x18] + cmp r2, #0 + beq _0207D640 + cmp r4, r2 + bne _0207D5E4 + bl Sndi_UnlockMutex + ldmia sp!, {r4, r5, r6, pc} +_0207D5E4: + add r1, r6, #0x18 + ldr r0, [r2, #0x18] + add ip, r1, r5, lsl #3 + cmp ip, r0 + bne _0207D610 + ldr r0, [r3, #0x1c] + mov r1, #0x3c + str r0, [r2, #0x18] + ldr r0, [r3, #0x18] + bl DC_StoreRange + b _0207D640 +_0207D610: + cmp r0, #0 + beq _0207D62C +_0207D618: + ldr r1, [r0, #4] + cmp ip, r1 + movne r0, r1 + cmpne r1, #0 + bne _0207D618 +_0207D62C: + add r1, r6, r5, lsl #3 + ldr r2, [r1, #0x1c] + mov r1, #8 + str r2, [r0, #4] + bl DC_StoreRange +_0207D640: + add r0, r6, #0x18 + ldr r1, [r4, #0x18] + add r0, r0, r5, lsl #3 + str r0, [r4, #0x18] + add r0, r6, r5, lsl #3 + str r1, [r0, #0x1c] + str r4, [r0, #0x18] + bl Sndi_UnlockMutex + mov r0, r6 + mov r1, #0x3c + bl DC_StoreRange + mov r0, r4 + mov r1, #0x3c + bl DC_StoreRange + ldmia sp!, {r4, r5, r6, pc} + arm_func_end Snd_AssignWaveArc + + arm_func_start Snd_DestroyBank +Snd_DestroyBank: ; 0x0207D67C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + bl Sndi_LockMutex + add r5, r7, #0x18 + mov r6, #0 + mov r8, #8 + mov r4, #0x3c +_0207D698: + add r1, r7, r6, lsl #3 + ldr r0, [r1, #0x18] + cmp r0, #0 + beq _0207D6FC + ldr r3, [r0, #0x18] + cmp r5, r3 + bne _0207D6C8 + ldr r2, [r1, #0x1c] + mov r1, r4 + str r2, [r0, #0x18] + bl DC_StoreRange + b _0207D6FC +_0207D6C8: + cmp r3, #0 + beq _0207D6E4 +_0207D6D0: + ldr r0, [r3, #4] + cmp r5, r0 + movne r3, r0 + cmpne r0, #0 + bne _0207D6D0 +_0207D6E4: + add r0, r7, r6, lsl #3 + ldr r2, [r0, #0x1c] + mov r0, r3 + mov r1, r8 + str r2, [r3, #4] + bl DC_StoreRange +_0207D6FC: + add r6, r6, #1 + cmp r6, #4 + add r5, r5, #8 + blt _0207D698 + bl Sndi_UnlockMutex + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end Snd_DestroyBank + + arm_func_start Snd_DestroyWaveArc +Snd_DestroyWaveArc: ; 0x0207D714 + stmdb sp!, {r4, r5, r6, lr} + mov r4, r0 + bl Sndi_LockMutex + ldr r0, [r4, #0x18] + cmp r0, #0 + beq _0207D754 + mov r5, #0 + mov r4, #8 +_0207D734: + ldr r6, [r0, #4] + mov r1, r4 + str r5, [r0] + str r5, [r0, #4] + bl DC_StoreRange + mov r0, r6 + cmp r6, #0 + bne _0207D734 +_0207D754: + bl Sndi_UnlockMutex + ldmia sp!, {r4, r5, r6, pc} + arm_func_end Snd_DestroyWaveArc + + arm_func_start Snd_GetFirstInstDataPos +Snd_GetFirstInstDataPos: ; 0x0207D75C + sub sp, sp, #8 + mov r1, #0 + str r1, [r0] + str r1, [sp] + str r1, [sp, #4] + str r1, [r0, #4] + add sp, sp, #8 + bx lr + arm_func_end Snd_GetFirstInstDataPos + + arm_func_start Snd_GetNextInstData +Snd_GetNextInstData: ; 0x0207D77C + stmdb sp!, {r3, r4, r5, lr} + ldr r4, [r2] + ldr r3, [r0, #0x38] + cmp r4, r3 + bhs _0207D924 + mov ip, #0 +_0207D794: + add r3, r0, r4, lsl #2 + ldr r4, [r3, #0x3c] + and r3, r4, #0xff + strb r4, [r1] + cmp r3, #0x10 + mov r4, r4, lsr #8 + bgt _0207D7DC + cmp r3, #0x10 + bge _0207D828 + cmp r3, #5 + addls pc, pc, r3, lsl #2 + b _0207D908 +_0207D7C4: ; jump table + b _0207D908 ; case 0 + b _0207D7E8 ; case 1 + b _0207D7E8 ; case 2 + b _0207D7E8 ; case 3 + b _0207D7E8 ; case 4 + b _0207D7E8 ; case 5 +_0207D7DC: + cmp r3, #0x11 + beq _0207D89C + b _0207D908 +_0207D7E8: + add r5, r0, r4 + ldrh r4, [r0, r4] + ldrh r3, [r5, #2] + mov r0, #1 + strh r4, [r1, #2] + strh r3, [r1, #4] + ldrh r4, [r5, #4] + ldrh r3, [r5, #6] + strh r4, [r1, #6] + strh r3, [r1, #8] + ldrh r3, [r5, #8] + strh r3, [r1, #0xa] + ldr r1, [r2] + add r1, r1, #1 + str r1, [r2] + ldmia sp!, {r3, r4, r5, pc} +_0207D828: + add r5, r0, r4 + b _0207D87C +_0207D830: + mov r0, #0xc + mla ip, lr, r0, r5 + ldrh r4, [ip, #2] + ldrh r3, [ip, #4] + mov r0, #1 + strh r4, [r1] + strh r3, [r1, #2] + ldrh r4, [ip, #6] + ldrh r3, [ip, #8] + strh r4, [r1, #4] + strh r3, [r1, #6] + ldrh r4, [ip, #0xa] + ldrh r3, [ip, #0xc] + strh r4, [r1, #8] + strh r3, [r1, #0xa] + ldr r1, [r2, #4] + add r1, r1, #1 + str r1, [r2, #4] + ldmia sp!, {r3, r4, r5, pc} +_0207D87C: + ldrb r4, [r5, #1] + ldrb r3, [r5] + ldr lr, [r2, #4] + sub r3, r4, r3 + add r3, r3, #1 + cmp lr, r3 + blo _0207D830 + b _0207D908 +_0207D89C: + add r4, r0, r4 + b _0207D8FC +_0207D8A4: + ldrb lr, [r4, r3] + cmp lr, #0 + beq _0207D908 + mov r0, #0xc + mla lr, r3, r0, r4 + ldrh ip, [lr, #8] + ldrh r3, [lr, #0xa] + mov r0, #1 + strh ip, [r1] + strh r3, [r1, #2] + ldrh ip, [lr, #0xc] + ldrh r3, [lr, #0xe] + strh ip, [r1, #4] + strh r3, [r1, #6] + ldrh ip, [lr, #0x10] + ldrh r3, [lr, #0x12] + strh ip, [r1, #8] + strh r3, [r1, #0xa] + ldr r1, [r2, #4] + add r1, r1, #1 + str r1, [r2, #4] + ldmia sp!, {r3, r4, r5, pc} +_0207D8FC: + ldr r3, [r2, #4] + cmp r3, #8 + blo _0207D8A4 +_0207D908: + ldr r3, [r2] + add r3, r3, #1 + stmia r2, {r3, ip} + ldr r4, [r2] + ldr r3, [r0, #0x38] + cmp r4, r3 + blo _0207D794 +_0207D924: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end Snd_GetNextInstData + + arm_func_start Snd_GetWaveDataCount +Snd_GetWaveDataCount: ; 0x0207D92C + ldr r0, [r0, #0x38] + bx lr + arm_func_end Snd_GetWaveDataCount + + arm_func_start Snd_SetWaveDataAddress +Snd_SetWaveDataAddress: ; 0x0207D934 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl Sndi_LockMutex + add r0, r6, #0x3c + add r2, r6, r5, lsl #2 + add r0, r0, r5, lsl #2 + mov r1, #4 + str r4, [r2, #0x3c] + bl DC_StoreRange + bl Sndi_UnlockMutex + ldmia sp!, {r4, r5, r6, pc} + arm_func_end Snd_SetWaveDataAddress + + arm_func_start Snd_GetWaveDataAddress +Snd_GetWaveDataAddress: ; 0x0207D968 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl Sndi_LockMutex + add r0, r5, r4, lsl #2 + ldr r4, [r0, #0x3c] + cmp r4, #0 + beq _0207D994 + cmp r4, #0x2000000 + addlo r4, r5, r4 + b _0207D998 +_0207D994: + mov r4, #0 +_0207D998: + bl Sndi_UnlockMutex + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end Snd_GetWaveDataAddress + diff --git a/lib/NitroSDK/asm/snd_command.s b/lib/NitroSDK/asm/snd_command.s new file mode 100644 index 00000000..df8fed33 --- /dev/null +++ b/lib/NitroSDK/asm/snd_command.s @@ -0,0 +1,563 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start SND_CommandInit +SND_CommandInit: ; 0x0207CC70 + stmdb sp!, {r4, lr} + bl InitPxi + ldr lr, _0207CD2C ; =_022B9D00 + ldr r0, _0207CD30 ; =_022B9A20 + mov r4, #0 + str lr, [r0] + mov r0, #0x18 + mov r1, r0 + b _0207CCA8 +_0207CC94: + add r3, r4, #1 + mul r2, r4, r1 + mla ip, r3, r0, lr + mov r4, r3 + str ip, [lr, r2] +_0207CCA8: + cmp r4, #0xff + blt _0207CC94 + ldr r0, _0207CD34 ; =_022BAA20 + mov r3, #0 + str r3, [r0, #0xac8] + ldr r1, _0207CD38 ; =_022BB4E8 + ldr r2, _0207CD30 ; =_022B9A20 + mov r0, #1 + str r1, [r2, #0x10] + str r3, [r2, #8] + str r3, [r2, #0xc] + str r3, [r2, #0x1c] + str r3, [r2, #0x14] + str r3, [r2, #0x18] + str r0, [r2, #0x20] + ldr r0, _0207CD3C ; =_022B9A80 + ldr r1, _0207CD40 ; =_022BB560 + str r3, [r2, #4] + str r0, [r1] + bl Sndi_InitSharedWork + mov r0, #1 + bl Snd_AllocCommand + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r2, #0x1d + ldr r1, _0207CD40 ; =_022BB560 + str r2, [r0, #4] + ldr r1, [r1] + str r1, [r0, #8] + bl Snd_PushCommand + mov r0, #1 + bl Snd_FlushCommand + ldmia sp!, {r4, pc} + .align 2, 0 +_0207CD2C: .word _022B9D00 +_0207CD30: .word _022B9A20 +_0207CD34: .word _022BAA20 +_0207CD38: .word _022BB4E8 +_0207CD3C: .word _022B9A80 +_0207CD40: .word _022BB560 + arm_func_end SND_CommandInit + + arm_func_start Snd_RecvCommandReply +Snd_RecvCommandReply: ; 0x0207CD44 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + bl EnableIrqFlag + mov r4, r0 + tst r5, #1 + beq _0207CDA0 + bl Sndi_GetFinishedCommandTag + ldr r5, _0207CE4C ; =_022B9A20 + ldr r1, [r5, #4] + cmp r1, r0 + bne _0207CDC4 + mov r6, #0x64 +_0207CD74: + mov r0, r4 + bl SetIrqFlag + mov r0, r6 + bl OS_SpinWait + bl EnableIrqFlag + mov r4, r0 + bl Sndi_GetFinishedCommandTag + ldr r1, [r5, #4] + cmp r1, r0 + beq _0207CD74 + b _0207CDC4 +_0207CDA0: + bl Sndi_GetFinishedCommandTag + ldr r1, _0207CE4C ; =_022B9A20 + ldr r1, [r1, #4] + cmp r1, r0 + bne _0207CDC4 + mov r0, r4 + bl SetIrqFlag + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_0207CDC4: + ldr r0, _0207CE4C ; =_022B9A20 + ldr r2, _0207CE50 ; =_022B9A44 + ldr r3, [r0, #0x14] + add r1, r3, #1 + ldr r5, [r2, r3, lsl #2] + str r1, [r0, #0x14] + cmp r1, #8 + movgt r1, #0 + strgt r1, [r0, #0x14] + ldr r0, [r5] + mov r2, r5 + cmp r0, #0 + beq _0207CE08 +_0207CDF8: + ldr r2, [r2] + ldr r0, [r2] + cmp r0, #0 + bne _0207CDF8 +_0207CE08: + ldr r0, _0207CE4C ; =_022B9A20 + ldr r1, [r0, #0x10] + cmp r1, #0 + strne r5, [r1] + streq r5, [r0] + ldr r1, _0207CE4C ; =_022B9A20 + mov r0, r4 + str r2, [r1, #0x10] + ldr r2, [r1, #0x1c] + sub r2, r2, #1 + str r2, [r1, #0x1c] + ldr r2, [r1, #4] + add r2, r2, #1 + str r2, [r1, #4] + bl SetIrqFlag + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0207CE4C: .word _022B9A20 +_0207CE50: .word _022B9A44 + arm_func_end Snd_RecvCommandReply + + arm_func_start Snd_AllocCommand +Snd_AllocCommand: ; 0x0207CE54 + stmdb sp!, {r4, lr} + mov r4, r0 + bl IsCommandAvailable + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl AllocCommand + cmp r0, #0 + ldmneia sp!, {r4, pc} + tst r4, #1 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl Snd_CountWaitingCommand + cmp r0, #0 + ble _0207CEB4 + mov r4, #0 +_0207CE94: + mov r0, r4 + bl Snd_RecvCommandReply + cmp r0, #0 + bne _0207CE94 + bl AllocCommand + cmp r0, #0 + beq _0207CEBC + ldmia sp!, {r4, pc} +_0207CEB4: + mov r0, #1 + bl Snd_FlushCommand +_0207CEBC: + bl RequestCommandProc + mov r4, #1 +_0207CEC4: + mov r0, r4 + bl Snd_RecvCommandReply + bl AllocCommand + cmp r0, #0 + beq _0207CEC4 + ldmia sp!, {r4, pc} + arm_func_end Snd_AllocCommand + + arm_func_start Snd_PushCommand +Snd_PushCommand: ; 0x0207CEDC + stmdb sp!, {r4, lr} + mov r4, r0 + bl EnableIrqFlag + ldr r1, _0207CF10 ; =_022B9A20 + ldr r2, [r1, #0xc] + cmp r2, #0 + streq r4, [r1, #8] + strne r4, [r2] + str r4, [r1, #0xc] + mov r1, #0 + str r1, [r4] + bl SetIrqFlag + ldmia sp!, {r4, pc} + .align 2, 0 +_0207CF10: .word _022B9A20 + arm_func_end Snd_PushCommand + + arm_func_start Snd_FlushCommand +Snd_FlushCommand: ; 0x0207CF14 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + bl EnableIrqFlag + ldr r4, _0207D0C4 ; =_022B9A20 + mov sb, r0 + ldr r1, [r4, #8] + cmp r1, #0 + bne _0207CF40 + bl SetIrqFlag + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207CF40: + ldr r1, [r4, #0x1c] + cmp r1, #8 + blt _0207CF98 + tst sl, #1 + bne _0207CF60 + bl SetIrqFlag + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207CF60: + mov r5, #1 +_0207CF64: + mov r0, r5 + bl Snd_RecvCommandReply + ldr r0, [r4, #0x1c] + cmp r0, #8 + bge _0207CF64 + ldr r0, _0207D0C4 ; =_022B9A20 + ldr r0, [r0, #8] + cmp r0, #0 + bne _0207CF98 + mov r0, sb + bl SetIrqFlag + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207CF98: + ldr r0, _0207D0C8 ; =_022B9D00 + mov r1, #0x1800 + bl DC_FlushRange + ldr r1, _0207D0C4 ; =_022B9A20 + mov r0, #7 + ldr r1, [r1, #8] + mov r2, #0 + bl PXI_SendWordByFifo + cmp r0, #0 + bge _0207D058 + tst sl, #1 + bne _0207CFD8 + mov r0, sb + bl SetIrqFlag + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207CFD8: + mov fp, #0 + mov r5, #7 + mov r8, fp + ldr r7, _0207D0C8 ; =_022B9D00 + mov r6, #0x1800 + ldr r4, _0207D0C4 ; =_022B9A20 + b _0207D034 +_0207CFF4: + mov r0, sb + bl SetIrqFlag + mov r0, r8 + bl Snd_RecvCommandReply + bl EnableIrqFlag + mov sb, r0 + mov r0, r7 + mov r1, r6 + bl DC_FlushRange + ldr r0, [r4, #8] + cmp r0, #0 + bne _0207D034 + mov r0, sb + bl SetIrqFlag + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0207D034: + ldr r0, [r4, #0x1c] + cmp r0, #8 + bge _0207CFF4 + ldr r1, [r4, #8] + mov r0, r5 + mov r2, fp + bl PXI_SendWordByFifo + cmp r0, #0 + blt _0207CFF4 +_0207D058: + ldr r0, _0207D0C4 ; =_022B9A20 + ldr r2, _0207D0CC ; =_022B9A44 + ldr r3, [r0, #0x18] + ldr r4, [r0, #8] + add r1, r3, #1 + str r4, [r2, r3, lsl #2] + str r1, [r0, #0x18] + cmp r1, #8 + movgt r1, #0 + strgt r1, [r0, #0x18] + ldr r1, _0207D0C4 ; =_022B9A20 + mov r0, #0 + str r0, [r1, #8] + str r0, [r1, #0xc] + ldr r2, [r1, #0x1c] + mov r0, sb + add r2, r2, #1 + str r2, [r1, #0x1c] + ldr r2, [r1, #0x20] + add r2, r2, #1 + str r2, [r1, #0x20] + bl SetIrqFlag + tst sl, #2 + beq _0207D0BC + bl RequestCommandProc +_0207D0BC: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0207D0C4: .word _022B9A20 +_0207D0C8: .word _022B9D00 +_0207D0CC: .word _022B9A44 + arm_func_end Snd_FlushCommand + + arm_func_start Snd_WaitForCommandProc +Snd_WaitForCommandProc: ; 0x0207D0D0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl Snd_IsFinishedCommandTag + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r4, #0 +_0207D0E8: + mov r0, r4 + bl Snd_RecvCommandReply + cmp r0, #0 + bne _0207D0E8 + mov r0, r5 + bl Snd_IsFinishedCommandTag + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + bl RequestCommandProc + mov r0, r5 + bl Snd_IsFinishedCommandTag + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r4, #1 +_0207D120: + mov r0, r4 + bl Snd_RecvCommandReply + mov r0, r5 + bl Snd_IsFinishedCommandTag + cmp r0, #0 + beq _0207D120 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end Snd_WaitForCommandProc + + arm_func_start Snd_GetCurrentCommandTag +Snd_GetCurrentCommandTag: ; 0x0207D13C + stmdb sp!, {r4, lr} + bl EnableIrqFlag + ldr r1, _0207D164 ; =_022B9A20 + ldr r2, [r1, #8] + cmp r2, #0 + ldreq r4, [r1, #4] + ldrne r4, [r1, #0x20] + bl SetIrqFlag + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D164: .word _022B9A20 + arm_func_end Snd_GetCurrentCommandTag + + arm_func_start Snd_IsFinishedCommandTag +Snd_IsFinishedCommandTag: ; 0x0207D168 + stmdb sp!, {r4, lr} + mov r4, r0 + bl EnableIrqFlag + ldr r1, _0207D1B4 ; =_022B9A20 + ldr r1, [r1, #4] + cmp r4, r1 + bls _0207D198 + sub r1, r4, r1 + cmp r1, #0x80000000 + movlo r4, #0 + movhs r4, #1 + b _0207D1A8 +_0207D198: + sub r1, r1, r4 + cmp r1, #0x80000000 + movlo r4, #1 + movhs r4, #0 +_0207D1A8: + bl SetIrqFlag + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D1B4: .word _022B9A20 + arm_func_end Snd_IsFinishedCommandTag + + arm_func_start Snd_CountFreeCommand +Snd_CountFreeCommand: ; 0x0207D1B8 + stmdb sp!, {r4, lr} + bl EnableIrqFlag + ldr r1, _0207D1F0 ; =_022B9A20 + mov r4, #0 + ldr r1, [r1] + cmp r1, #0 + beq _0207D1E4 +_0207D1D4: + ldr r1, [r1] + add r4, r4, #1 + cmp r1, #0 + bne _0207D1D4 +_0207D1E4: + bl SetIrqFlag + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D1F0: .word _022B9A20 + arm_func_end Snd_CountFreeCommand + + arm_func_start Snd_CountReservedCommand +Snd_CountReservedCommand: ; 0x0207D1F4 + stmdb sp!, {r4, lr} + bl EnableIrqFlag + ldr r1, _0207D22C ; =_022B9A20 + mov r4, #0 + ldr r1, [r1, #8] + cmp r1, #0 + beq _0207D220 +_0207D210: + ldr r1, [r1] + add r4, r4, #1 + cmp r1, #0 + bne _0207D210 +_0207D220: + bl SetIrqFlag + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D22C: .word _022B9A20 + arm_func_end Snd_CountReservedCommand + + arm_func_start Snd_CountWaitingCommand +Snd_CountWaitingCommand: ; 0x0207D230 + stmdb sp!, {r4, lr} + bl Snd_CountFreeCommand + mov r4, r0 + bl Snd_CountReservedCommand + rsb r1, r4, #0x100 + sub r0, r1, r0 + ldmia sp!, {r4, pc} + arm_func_end Snd_CountWaitingCommand + + arm_func_start PxiFifoCallback +PxiFifoCallback: ; 0x0207D24C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl EnableIrqFlag + mov r4, r0 + mov r0, r5 + bl Sndi_CallAlarmHandler + mov r0, r4 + bl SetIrqFlag + ldmia sp!, {r3, r4, r5, pc} + arm_func_end PxiFifoCallback + + arm_func_start InitPxi +InitPxi: ; 0x0207D270 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _0207D2CC ; =PxiFifoCallback + mov r0, #7 + bl PXI_SetFifoRecvCallback + bl IsCommandAvailable + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, #7 + mov r1, #1 + bl PXI_IsCallbackReady + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r6, #0x64 + mov r5, #7 + mov r4, #1 +_0207D2AC: + mov r0, r6 + bl OS_SpinWait + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0 + beq _0207D2AC + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0207D2CC: .word PxiFifoCallback + arm_func_end InitPxi + + arm_func_start RequestCommandProc +RequestCommandProc: ; 0x0207D2D0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, #7 + mov r4, #0 +_0207D2DC: + mov r0, r5 + mov r1, r4 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _0207D2DC + ldmia sp!, {r3, r4, r5, pc} + arm_func_end RequestCommandProc + + arm_func_start AllocCommand +AllocCommand: ; 0x0207D2F8 + stmdb sp!, {r4, lr} + bl EnableIrqFlag + ldr r1, _0207D33C ; =_022B9A20 + ldr r4, [r1] + cmp r4, #0 + bne _0207D31C + bl SetIrqFlag + mov r0, #0 + ldmia sp!, {r4, pc} +_0207D31C: + ldr r2, [r4] + str r2, [r1] + cmp r2, #0 + moveq r2, #0 + streq r2, [r1, #0x10] + bl SetIrqFlag + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D33C: .word _022B9A20 + arm_func_end AllocCommand + + arm_func_start IsCommandAvailable +IsCommandAvailable: ; 0x0207D340 + stmdb sp!, {r4, lr} + bl OS_IsRunOnEmulator + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + bl EnableIrqFlag + ldr r1, _0207D37C ; =0x04FFF200 + mov r2, #0x10 + str r2, [r1] + ldr r4, [r1] + bl SetIrqFlag + cmp r4, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0207D37C: .word 0x04FFF200 + arm_func_end IsCommandAvailable + diff --git a/lib/NitroSDK/asm/snd_interface.s b/lib/NitroSDK/asm/snd_interface.s new file mode 100644 index 00000000..e79ab68c --- /dev/null +++ b/lib/NitroSDK/asm/snd_interface.s @@ -0,0 +1,380 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start Snd_StopSeq +Snd_StopSeq: ; 0x0207C7DC + stmdb sp!, {r3, lr} + mov r2, #0 + mov r1, r0 + mov r3, r2 + mov r0, #1 + str r2, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_StopSeq + + arm_func_start Snd_PrepareSeq +Snd_PrepareSeq: ; 0x0207C7FC + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, r2 + str r3, [sp] + mov r1, r0 + mov r2, lr + mov r3, ip + mov r0, #2 + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_PrepareSeq + + arm_func_start Snd_StartPreparedSeq +Snd_StartPreparedSeq: ; 0x0207C824 + stmdb sp!, {r3, lr} + mov r2, #0 + mov r1, r0 + mov r3, r2 + mov r0, #3 + str r2, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_StartPreparedSeq + + arm_func_start Snd_SetPlayerTempoRatio +Snd_SetPlayerTempoRatio: ; 0x0207C844 + ldr ip, _0207C858 ; =Sndi_SetPlayerParam + mov r2, r1 + mov r1, #6 + mov r3, #2 + bx ip + .align 2, 0 +_0207C858: .word Sndi_SetPlayerParam + arm_func_end Snd_SetPlayerTempoRatio + + arm_func_start Snd_SetPlayerVolume +Snd_SetPlayerVolume: ; 0x0207C85C + ldr ip, _0207C870 ; =Sndi_SetPlayerParam + mov r2, r1 + mov r1, #4 + mov r3, #1 + bx ip + .align 2, 0 +_0207C870: .word Sndi_SetPlayerParam + arm_func_end Snd_SetPlayerVolume + + arm_func_start Snd_SetTrackPan +Snd_SetTrackPan: ; 0x0207C874 + stmdb sp!, {r3, lr} + mov r3, r2 + mov ip, #2 + mov r2, #0xc + str ip, [sp] + bl Sndi_SetTrackParam + ldmia sp!, {r3, pc} + arm_func_end Snd_SetTrackPan + + arm_func_start Snd_SetTrackAllocatableChannel +Snd_SetTrackAllocatableChannel: ; 0x0207C890 + stmdb sp!, {r3, lr} + mov lr, r1 + mov r3, r2 + mov ip, #0 + mov r1, r0 + mov r2, lr + mov r0, #9 + str ip, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetTrackAllocatableChannel + + arm_func_start Snd_StartTimer +Snd_StartTimer: ; 0x0207C8B8 + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, r2 + str r3, [sp] + mov r1, r0 + mov r2, lr + mov r3, ip + mov r0, #0xc + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_StartTimer + + arm_func_start Snd_StopTimer +Snd_StopTimer: ; 0x0207C8E0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r7, r2 + mov sb, r0 + mov r8, r1 + mov r6, r3 + mov r5, r7 + mov r4, #0 + b _0207C918 +_0207C900: + tst r5, #1 + beq _0207C910 + mov r0, r4 + bl Sndi_IncAlarmId +_0207C910: + add r4, r4, #1 + mov r5, r5, lsr #1 +_0207C918: + cmp r4, #8 + bge _0207C928 + cmp r5, #0 + bne _0207C900 +_0207C928: + mov r1, sb + mov r2, r8 + mov r3, r7 + mov r0, #0xd + str r6, [sp] + bl PushCommand_impl + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end Snd_StopTimer + + arm_func_start Snd_SetupCapture +Snd_SetupCapture: ; 0x0207C944 + stmdb sp!, {r3, lr} + mov r1, r1, lsl #0x1e + orr r0, r1, r0, lsl #31 + ldr ip, [sp, #8] + mov r1, r2 + orr r0, r0, ip, lsl #29 + ldr r2, [sp, #0xc] + mov lr, #0 + orr r0, r0, r2, lsl #28 + ldr ip, [sp, #0x10] + mov r2, r3 + orr r3, r0, ip, lsl #27 + mov r0, #0x11 + str lr, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetupCapture + + arm_func_start Snd_SetupAlarm +Snd_SetupAlarm: ; 0x0207C984 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r4, r2 + mov r5, r1 + ldr r2, [sp, #0x18] + mov r6, r0 + mov r1, r3 + bl Sndi_SetAlarmHandler + str r0, [sp] + mov r1, r6 + mov r2, r5 + mov r3, r4 + mov r0, #0x12 + bl PushCommand_impl + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end Snd_SetupAlarm + + arm_func_start Snd_LockChannel +Snd_LockChannel: ; 0x0207C9C4 + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x1a + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_LockChannel + + arm_func_start Snd_UnlockChannel +Snd_UnlockChannel: ; 0x0207C9E4 + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x1b + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_UnlockChannel + + arm_func_start Snd_SetChannelTimer +Snd_SetChannelTimer: ; 0x0207CA04 + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x13 + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetChannelTimer + + arm_func_start Snd_SetChannelVolume +Snd_SetChannelVolume: ; 0x0207CA24 + stmdb sp!, {r3, lr} + mov lr, r1 + mov r3, r2 + mov ip, #0 + mov r1, r0 + mov r2, lr + mov r0, #0x14 + str ip, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetChannelVolume + + arm_func_start Snd_SetChannelPan +Snd_SetChannelPan: ; 0x0207CA4C + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x15 + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetChannelPan + + arm_func_start Snd_SetupChannelPcm +Snd_SetupChannelPcm: ; 0x0207CA6C + stmdb sp!, {r3, r4, r5, lr} + ldr ip, [sp, #0x1c] + mov r1, r1, lsl #0x18 + orr r4, r1, r3, lsl #26 + ldr r5, [sp, #0x24] + mov r1, ip, lsl #0x16 + ldr r3, [sp, #0x18] + ldr ip, [sp, #0x10] + orr r4, r4, r5, lsl #16 + orr r4, ip, r4 + ldr lr, [sp, #0x20] + orr r3, r1, r3, lsl #24 + ldr ip, [sp, #0x14] + orr r1, r0, lr, lsl #16 + orr r3, ip, r3 + mov r0, #0xe + str r4, [sp] + bl PushCommand_impl + ldmia sp!, {r3, r4, r5, pc} + arm_func_end Snd_SetupChannelPcm + + arm_func_start Snd_SetupChannelPsg +Snd_SetupChannelPsg: ; 0x0207CAB8 + stmdb sp!, {r3, lr} + ldr lr, [sp, #8] + ldr ip, [sp, #0xc] + str r1, [sp] + orr r2, r2, r3, lsl #8 + mov r1, r0 + orr r3, ip, lr, lsl #8 + mov r0, #0xf + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetupChannelPsg + + arm_func_start Snd_SetupChannelNoise +Snd_SetupChannelNoise: ; 0x0207CAE0 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr ip, [sp, #0x10] + mov r4, r1 + mov lr, #0 + mov r1, r0 + orr r2, r4, r2, lsl #8 + orr r3, ip, r3, lsl #8 + mov r0, #0x10 + str lr, [sp] + bl PushCommand_impl + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end Snd_SetupChannelNoise + + arm_func_start Snd_InvalidateSeqData +Snd_InvalidateSeqData: ; 0x0207CB14 + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x1f + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_InvalidateSeqData + + arm_func_start Snd_InvalidateBankData +Snd_InvalidateBankData: ; 0x0207CB34 + stmdb sp!, {r3, lr} + mov r2, r1 + mov r3, #0 + mov r1, r0 + mov r0, #0x20 + str r3, [sp] + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_InvalidateBankData + + arm_func_start Snd_SetOutputSelector +Snd_SetOutputSelector: ; 0x0207CB54 + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, r2 + str r3, [sp] + mov r1, r0 + mov r2, lr + mov r3, ip + mov r0, #0x19 + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Snd_SetOutputSelector + + arm_func_start Sndi_SetPlayerParam +Sndi_SetPlayerParam: ; 0x0207CB7C + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, r2 + str r3, [sp] + mov r1, r0 + mov r2, lr + mov r3, ip + mov r0, #6 + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Sndi_SetPlayerParam + + arm_func_start Sndi_SetTrackParam +Sndi_SetTrackParam: ; 0x0207CBA4 + stmdb sp!, {r3, lr} + ldr ip, [sp, #8] + mov lr, r2 + str r3, [sp] + mov r2, r1 + orr r1, r0, ip, lsl #24 + mov r3, lr + mov r0, #7 + bl PushCommand_impl + ldmia sp!, {r3, pc} + arm_func_end Sndi_SetTrackParam + + arm_func_start PushCommand_impl +PushCommand_impl: ; 0x0207CBCC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r0, #1 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl Snd_AllocCommand + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + str r7, [r0, #4] + str r6, [r0, #8] + str r5, [r0, #0xc] + ldr r1, [sp, #0x18] + str r4, [r0, #0x10] + str r1, [r0, #0x14] + bl Snd_PushCommand + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end PushCommand_impl + diff --git a/lib/NitroSDK/asm/snd_main.s b/lib/NitroSDK/asm/snd_main.s new file mode 100644 index 00000000..71588597 --- /dev/null +++ b/lib/NitroSDK/asm/snd_main.s @@ -0,0 +1,44 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start SND_Init +SND_Init: ; 0x0207CC10 + stmdb sp!, {r3, lr} + ldr r1, _0207CC40 ; =_022B99EC + ldr r0, [r1] + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0207CC44 ; =_022B99F0 + mov r2, #1 + str r2, [r1] + bl OS_InitMutex + bl SND_CommandInit + bl Snd_AlarmInit + ldmia sp!, {r3, pc} + .align 2, 0 +_0207CC40: .word _022B99EC +_0207CC44: .word _022B99F0 + arm_func_end SND_Init + + arm_func_start Sndi_LockMutex +Sndi_LockMutex: ; 0x0207CC48 + ldr ip, _0207CC54 ; =OS_LockMutex + ldr r0, _0207CC58 ; =_022B99F0 + bx ip + .align 2, 0 +_0207CC54: .word OS_LockMutex +_0207CC58: .word _022B99F0 + arm_func_end Sndi_LockMutex + + arm_func_start Sndi_UnlockMutex +Sndi_UnlockMutex: ; 0x0207CC5C + ldr ip, _0207CC68 ; =OS_UnlockMutex + ldr r0, _0207CC6C ; =_022B99F0 + bx ip + .align 2, 0 +_0207CC68: .word OS_UnlockMutex +_0207CC6C: .word _022B99F0 + arm_func_end Sndi_UnlockMutex + diff --git a/lib/NitroSDK/asm/snd_util.s b/lib/NitroSDK/asm/snd_util.s new file mode 100644 index 00000000..5d7c109c --- /dev/null +++ b/lib/NitroSDK/asm/snd_util.s @@ -0,0 +1,40 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start Snd_CalcChannelVolume +Snd_CalcChannelVolume: ; 0x0207D540 + ldr r1, _0207D5A8 ; =0xFFFFFD2D + cmp r0, r1 + movlt r0, r1 + blt _0207D558 + cmp r0, #0 + movgt r0, #0 +_0207D558: + add r1, r0, #0xd3 + mvn r2, #0xef + cmp r0, r2 + ldr r3, _0207D5AC ; =ARM9_UNKNOWN_TABLE__NA_20AE924 + add r1, r1, #0x200 + ldrb r3, [r3, r1] + movlt r0, #3 + blt _0207D598 + add r1, r2, #0x78 + cmp r0, r1 + movlt r0, #2 + blt _0207D598 + add r1, r2, #0xb4 + cmp r0, r1 + movlt r0, #1 + movge r0, #0 +_0207D598: + orr r0, r3, r0, lsl #8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + .align 2, 0 +_0207D5A8: .word 0xFFFFFD2D +_0207D5AC: .word ARM9_UNKNOWN_TABLE__NA_20AE924 + arm_func_end Snd_CalcChannelVolume + diff --git a/lib/NitroSDK/asm/snd_work.s b/lib/NitroSDK/asm/snd_work.s new file mode 100644 index 00000000..2e38762c --- /dev/null +++ b/lib/NitroSDK/asm/snd_work.s @@ -0,0 +1,90 @@ + .include "asm/macros.inc" + .include "include/nitro.inc" + + .text + + arm_func_start Snd_GetPlayerStatus +Snd_GetPlayerStatus: ; 0x0207D444 + stmdb sp!, {r3, lr} + ldr r0, _0207D46C ; =_022BB560 + mov r1, #4 + ldr r0, [r0] + add r0, r0, #4 + bl DC_InvalidateRange + ldr r0, _0207D46C ; =_022BB560 + ldr r0, [r0] + ldr r0, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_0207D46C: .word _022BB560 + arm_func_end Snd_GetPlayerStatus + + arm_func_start Snd_GetChannelStatus +Snd_GetChannelStatus: ; 0x0207D470 + stmdb sp!, {r3, lr} + ldr r0, _0207D498 ; =_022BB560 + mov r1, #2 + ldr r0, [r0] + add r0, r0, #8 + bl DC_InvalidateRange + ldr r0, _0207D498 ; =_022BB560 + ldr r0, [r0] + ldrh r0, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_0207D498: .word _022BB560 + arm_func_end Snd_GetChannelStatus + + arm_func_start Sndi_GetFinishedCommandTag +Sndi_GetFinishedCommandTag: ; 0x0207D49C + stmdb sp!, {r3, lr} + ldr r0, _0207D4C0 ; =_022BB560 + mov r1, #4 + ldr r0, [r0] + bl DC_InvalidateRange + ldr r0, _0207D4C0 ; =_022BB560 + ldr r0, [r0] + ldr r0, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0207D4C0: .word _022BB560 + arm_func_end Sndi_GetFinishedCommandTag + + arm_func_start Sndi_InitSharedWork +Sndi_InitSharedWork: ; 0x0207D4C4 + stmdb sp!, {r4, lr} + mov ip, #0 + str ip, [r0, #4] + strh ip, [r0, #8] + strh ip, [r0, #0xa] + mov r4, r0 + str ip, [r0] + mvn r2, #0 + mov r3, ip +_0207D4E8: + mov lr, r3 + str r3, [r4, #0x40] +_0207D4F0: + add r1, r4, lr, lsl #1 + add lr, lr, #1 + strh r2, [r1, #0x20] + cmp lr, #0x10 + blt _0207D4F0 + add ip, ip, #1 + cmp ip, #0x10 + add r4, r4, #0x24 + blt _0207D4E8 + mov r3, #0 + mvn r2, #0 +_0207D51C: + add r1, r0, r3, lsl #1 + add r1, r1, #0x200 + add r3, r3, #1 + strh r2, [r1, #0x60] + cmp r3, #0x10 + blt _0207D51C + mov r1, #0x280 + bl DC_FlushRange + ldmia sp!, {r4, pc} + arm_func_end Sndi_InitSharedWork + diff --git a/lib/asm/nitro.s b/lib/asm/nitro.s deleted file mode 100644 index 451fa406..00000000 --- a/lib/asm/nitro.s +++ /dev/null @@ -1,2558 +0,0 @@ - .include "asm/macros.inc" - .include "include/nitro.inc" - - .text - - arm_func_start Snd_StopSeq -Snd_StopSeq: ; 0x0207C7DC - stmdb sp!, {r3, lr} - mov r2, #0 - mov r1, r0 - mov r3, r2 - mov r0, #1 - str r2, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_StopSeq - - arm_func_start Snd_PrepareSeq -Snd_PrepareSeq: ; 0x0207C7FC - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, r2 - str r3, [sp] - mov r1, r0 - mov r2, lr - mov r3, ip - mov r0, #2 - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_PrepareSeq - - arm_func_start Snd_StartPreparedSeq -Snd_StartPreparedSeq: ; 0x0207C824 - stmdb sp!, {r3, lr} - mov r2, #0 - mov r1, r0 - mov r3, r2 - mov r0, #3 - str r2, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_StartPreparedSeq - - arm_func_start Snd_SetPlayerTempoRatio -Snd_SetPlayerTempoRatio: ; 0x0207C844 - ldr ip, _0207C858 ; =Sndi_SetPlayerParam - mov r2, r1 - mov r1, #6 - mov r3, #2 - bx ip - .align 2, 0 -_0207C858: .word Sndi_SetPlayerParam - arm_func_end Snd_SetPlayerTempoRatio - - arm_func_start Snd_SetPlayerVolume -Snd_SetPlayerVolume: ; 0x0207C85C - ldr ip, _0207C870 ; =Sndi_SetPlayerParam - mov r2, r1 - mov r1, #4 - mov r3, #1 - bx ip - .align 2, 0 -_0207C870: .word Sndi_SetPlayerParam - arm_func_end Snd_SetPlayerVolume - - arm_func_start Snd_SetTrackPan -Snd_SetTrackPan: ; 0x0207C874 - stmdb sp!, {r3, lr} - mov r3, r2 - mov ip, #2 - mov r2, #0xc - str ip, [sp] - bl Sndi_SetTrackParam - ldmia sp!, {r3, pc} - arm_func_end Snd_SetTrackPan - - arm_func_start Snd_SetTrackAllocatableChannel -Snd_SetTrackAllocatableChannel: ; 0x0207C890 - stmdb sp!, {r3, lr} - mov lr, r1 - mov r3, r2 - mov ip, #0 - mov r1, r0 - mov r2, lr - mov r0, #9 - str ip, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetTrackAllocatableChannel - - arm_func_start Snd_StartTimer -Snd_StartTimer: ; 0x0207C8B8 - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, r2 - str r3, [sp] - mov r1, r0 - mov r2, lr - mov r3, ip - mov r0, #0xc - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_StartTimer - - arm_func_start Snd_StopTimer -Snd_StopTimer: ; 0x0207C8E0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r7, r2 - mov sb, r0 - mov r8, r1 - mov r6, r3 - mov r5, r7 - mov r4, #0 - b _0207C918 -_0207C900: - tst r5, #1 - beq _0207C910 - mov r0, r4 - bl Sndi_IncAlarmId -_0207C910: - add r4, r4, #1 - mov r5, r5, lsr #1 -_0207C918: - cmp r4, #8 - bge _0207C928 - cmp r5, #0 - bne _0207C900 -_0207C928: - mov r1, sb - mov r2, r8 - mov r3, r7 - mov r0, #0xd - str r6, [sp] - bl PushCommand_impl - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end Snd_StopTimer - - arm_func_start Snd_SetupCapture -Snd_SetupCapture: ; 0x0207C944 - stmdb sp!, {r3, lr} - mov r1, r1, lsl #0x1e - orr r0, r1, r0, lsl #31 - ldr ip, [sp, #8] - mov r1, r2 - orr r0, r0, ip, lsl #29 - ldr r2, [sp, #0xc] - mov lr, #0 - orr r0, r0, r2, lsl #28 - ldr ip, [sp, #0x10] - mov r2, r3 - orr r3, r0, ip, lsl #27 - mov r0, #0x11 - str lr, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetupCapture - - arm_func_start Snd_SetupAlarm -Snd_SetupAlarm: ; 0x0207C984 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r4, r2 - mov r5, r1 - ldr r2, [sp, #0x18] - mov r6, r0 - mov r1, r3 - bl Sndi_SetAlarmHandler - str r0, [sp] - mov r1, r6 - mov r2, r5 - mov r3, r4 - mov r0, #0x12 - bl PushCommand_impl - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end Snd_SetupAlarm - - arm_func_start Snd_LockChannel -Snd_LockChannel: ; 0x0207C9C4 - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x1a - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_LockChannel - - arm_func_start Snd_UnlockChannel -Snd_UnlockChannel: ; 0x0207C9E4 - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x1b - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_UnlockChannel - - arm_func_start Snd_SetChannelTimer -Snd_SetChannelTimer: ; 0x0207CA04 - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x13 - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetChannelTimer - - arm_func_start Snd_SetChannelVolume -Snd_SetChannelVolume: ; 0x0207CA24 - stmdb sp!, {r3, lr} - mov lr, r1 - mov r3, r2 - mov ip, #0 - mov r1, r0 - mov r2, lr - mov r0, #0x14 - str ip, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetChannelVolume - - arm_func_start Snd_SetChannelPan -Snd_SetChannelPan: ; 0x0207CA4C - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x15 - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetChannelPan - - arm_func_start Snd_SetupChannelPcm -Snd_SetupChannelPcm: ; 0x0207CA6C - stmdb sp!, {r3, r4, r5, lr} - ldr ip, [sp, #0x1c] - mov r1, r1, lsl #0x18 - orr r4, r1, r3, lsl #26 - ldr r5, [sp, #0x24] - mov r1, ip, lsl #0x16 - ldr r3, [sp, #0x18] - ldr ip, [sp, #0x10] - orr r4, r4, r5, lsl #16 - orr r4, ip, r4 - ldr lr, [sp, #0x20] - orr r3, r1, r3, lsl #24 - ldr ip, [sp, #0x14] - orr r1, r0, lr, lsl #16 - orr r3, ip, r3 - mov r0, #0xe - str r4, [sp] - bl PushCommand_impl - ldmia sp!, {r3, r4, r5, pc} - arm_func_end Snd_SetupChannelPcm - - arm_func_start Snd_SetupChannelPsg -Snd_SetupChannelPsg: ; 0x0207CAB8 - stmdb sp!, {r3, lr} - ldr lr, [sp, #8] - ldr ip, [sp, #0xc] - str r1, [sp] - orr r2, r2, r3, lsl #8 - mov r1, r0 - orr r3, ip, lr, lsl #8 - mov r0, #0xf - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetupChannelPsg - - arm_func_start Snd_SetupChannelNoise -Snd_SetupChannelNoise: ; 0x0207CAE0 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr ip, [sp, #0x10] - mov r4, r1 - mov lr, #0 - mov r1, r0 - orr r2, r4, r2, lsl #8 - orr r3, ip, r3, lsl #8 - mov r0, #0x10 - str lr, [sp] - bl PushCommand_impl - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end Snd_SetupChannelNoise - - arm_func_start Snd_InvalidateSeqData -Snd_InvalidateSeqData: ; 0x0207CB14 - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x1f - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_InvalidateSeqData - - arm_func_start Snd_InvalidateBankData -Snd_InvalidateBankData: ; 0x0207CB34 - stmdb sp!, {r3, lr} - mov r2, r1 - mov r3, #0 - mov r1, r0 - mov r0, #0x20 - str r3, [sp] - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_InvalidateBankData - - arm_func_start Snd_SetOutputSelector -Snd_SetOutputSelector: ; 0x0207CB54 - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, r2 - str r3, [sp] - mov r1, r0 - mov r2, lr - mov r3, ip - mov r0, #0x19 - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Snd_SetOutputSelector - - arm_func_start Sndi_SetPlayerParam -Sndi_SetPlayerParam: ; 0x0207CB7C - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, r2 - str r3, [sp] - mov r1, r0 - mov r2, lr - mov r3, ip - mov r0, #6 - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Sndi_SetPlayerParam - - arm_func_start Sndi_SetTrackParam -Sndi_SetTrackParam: ; 0x0207CBA4 - stmdb sp!, {r3, lr} - ldr ip, [sp, #8] - mov lr, r2 - str r3, [sp] - mov r2, r1 - orr r1, r0, ip, lsl #24 - mov r3, lr - mov r0, #7 - bl PushCommand_impl - ldmia sp!, {r3, pc} - arm_func_end Sndi_SetTrackParam - - arm_func_start PushCommand_impl -PushCommand_impl: ; 0x0207CBCC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r0, #1 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl Snd_AllocCommand - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - str r7, [r0, #4] - str r6, [r0, #8] - str r5, [r0, #0xc] - ldr r1, [sp, #0x18] - str r4, [r0, #0x10] - str r1, [r0, #0x14] - bl Snd_PushCommand - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end PushCommand_impl - - arm_func_start SND_Init -SND_Init: ; 0x0207CC10 - stmdb sp!, {r3, lr} - ldr r1, _0207CC40 ; =_022B99EC - ldr r0, [r1] - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0207CC44 ; =_022B99F0 - mov r2, #1 - str r2, [r1] - bl OS_InitMutex - bl SND_CommandInit - bl Snd_AlarmInit - ldmia sp!, {r3, pc} - .align 2, 0 -_0207CC40: .word _022B99EC -_0207CC44: .word _022B99F0 - arm_func_end SND_Init - - arm_func_start Sndi_LockMutex -Sndi_LockMutex: ; 0x0207CC48 - ldr ip, _0207CC54 ; =OS_LockMutex - ldr r0, _0207CC58 ; =_022B99F0 - bx ip - .align 2, 0 -_0207CC54: .word OS_LockMutex -_0207CC58: .word _022B99F0 - arm_func_end Sndi_LockMutex - - arm_func_start Sndi_UnlockMutex -Sndi_UnlockMutex: ; 0x0207CC5C - ldr ip, _0207CC68 ; =OS_UnlockMutex - ldr r0, _0207CC6C ; =_022B99F0 - bx ip - .align 2, 0 -_0207CC68: .word OS_UnlockMutex -_0207CC6C: .word _022B99F0 - arm_func_end Sndi_UnlockMutex - - arm_func_start SND_CommandInit -SND_CommandInit: ; 0x0207CC70 - stmdb sp!, {r4, lr} - bl InitPxi - ldr lr, _0207CD2C ; =_022B9D00 - ldr r0, _0207CD30 ; =_022B9A20 - mov r4, #0 - str lr, [r0] - mov r0, #0x18 - mov r1, r0 - b _0207CCA8 -_0207CC94: - add r3, r4, #1 - mul r2, r4, r1 - mla ip, r3, r0, lr - mov r4, r3 - str ip, [lr, r2] -_0207CCA8: - cmp r4, #0xff - blt _0207CC94 - ldr r0, _0207CD34 ; =_022BAA20 - mov r3, #0 - str r3, [r0, #0xac8] - ldr r1, _0207CD38 ; =_022BB4E8 - ldr r2, _0207CD30 ; =_022B9A20 - mov r0, #1 - str r1, [r2, #0x10] - str r3, [r2, #8] - str r3, [r2, #0xc] - str r3, [r2, #0x1c] - str r3, [r2, #0x14] - str r3, [r2, #0x18] - str r0, [r2, #0x20] - ldr r0, _0207CD3C ; =_022B9A80 - ldr r1, _0207CD40 ; =_022BB560 - str r3, [r2, #4] - str r0, [r1] - bl Sndi_InitSharedWork - mov r0, #1 - bl Snd_AllocCommand - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r2, #0x1d - ldr r1, _0207CD40 ; =_022BB560 - str r2, [r0, #4] - ldr r1, [r1] - str r1, [r0, #8] - bl Snd_PushCommand - mov r0, #1 - bl Snd_FlushCommand - ldmia sp!, {r4, pc} - .align 2, 0 -_0207CD2C: .word _022B9D00 -_0207CD30: .word _022B9A20 -_0207CD34: .word _022BAA20 -_0207CD38: .word _022BB4E8 -_0207CD3C: .word _022B9A80 -_0207CD40: .word _022BB560 - arm_func_end SND_CommandInit - - arm_func_start Snd_RecvCommandReply -Snd_RecvCommandReply: ; 0x0207CD44 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - bl EnableIrqFlag - mov r4, r0 - tst r5, #1 - beq _0207CDA0 - bl Sndi_GetFinishedCommandTag - ldr r5, _0207CE4C ; =_022B9A20 - ldr r1, [r5, #4] - cmp r1, r0 - bne _0207CDC4 - mov r6, #0x64 -_0207CD74: - mov r0, r4 - bl SetIrqFlag - mov r0, r6 - bl OS_SpinWait - bl EnableIrqFlag - mov r4, r0 - bl Sndi_GetFinishedCommandTag - ldr r1, [r5, #4] - cmp r1, r0 - beq _0207CD74 - b _0207CDC4 -_0207CDA0: - bl Sndi_GetFinishedCommandTag - ldr r1, _0207CE4C ; =_022B9A20 - ldr r1, [r1, #4] - cmp r1, r0 - bne _0207CDC4 - mov r0, r4 - bl SetIrqFlag - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_0207CDC4: - ldr r0, _0207CE4C ; =_022B9A20 - ldr r2, _0207CE50 ; =_022B9A44 - ldr r3, [r0, #0x14] - add r1, r3, #1 - ldr r5, [r2, r3, lsl #2] - str r1, [r0, #0x14] - cmp r1, #8 - movgt r1, #0 - strgt r1, [r0, #0x14] - ldr r0, [r5] - mov r2, r5 - cmp r0, #0 - beq _0207CE08 -_0207CDF8: - ldr r2, [r2] - ldr r0, [r2] - cmp r0, #0 - bne _0207CDF8 -_0207CE08: - ldr r0, _0207CE4C ; =_022B9A20 - ldr r1, [r0, #0x10] - cmp r1, #0 - strne r5, [r1] - streq r5, [r0] - ldr r1, _0207CE4C ; =_022B9A20 - mov r0, r4 - str r2, [r1, #0x10] - ldr r2, [r1, #0x1c] - sub r2, r2, #1 - str r2, [r1, #0x1c] - ldr r2, [r1, #4] - add r2, r2, #1 - str r2, [r1, #4] - bl SetIrqFlag - mov r0, r5 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0207CE4C: .word _022B9A20 -_0207CE50: .word _022B9A44 - arm_func_end Snd_RecvCommandReply - - arm_func_start Snd_AllocCommand -Snd_AllocCommand: ; 0x0207CE54 - stmdb sp!, {r4, lr} - mov r4, r0 - bl IsCommandAvailable - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - bl AllocCommand - cmp r0, #0 - ldmneia sp!, {r4, pc} - tst r4, #1 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - bl Snd_CountWaitingCommand - cmp r0, #0 - ble _0207CEB4 - mov r4, #0 -_0207CE94: - mov r0, r4 - bl Snd_RecvCommandReply - cmp r0, #0 - bne _0207CE94 - bl AllocCommand - cmp r0, #0 - beq _0207CEBC - ldmia sp!, {r4, pc} -_0207CEB4: - mov r0, #1 - bl Snd_FlushCommand -_0207CEBC: - bl RequestCommandProc - mov r4, #1 -_0207CEC4: - mov r0, r4 - bl Snd_RecvCommandReply - bl AllocCommand - cmp r0, #0 - beq _0207CEC4 - ldmia sp!, {r4, pc} - arm_func_end Snd_AllocCommand - - arm_func_start Snd_PushCommand -Snd_PushCommand: ; 0x0207CEDC - stmdb sp!, {r4, lr} - mov r4, r0 - bl EnableIrqFlag - ldr r1, _0207CF10 ; =_022B9A20 - ldr r2, [r1, #0xc] - cmp r2, #0 - streq r4, [r1, #8] - strne r4, [r2] - str r4, [r1, #0xc] - mov r1, #0 - str r1, [r4] - bl SetIrqFlag - ldmia sp!, {r4, pc} - .align 2, 0 -_0207CF10: .word _022B9A20 - arm_func_end Snd_PushCommand - - arm_func_start Snd_FlushCommand -Snd_FlushCommand: ; 0x0207CF14 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - bl EnableIrqFlag - ldr r4, _0207D0C4 ; =_022B9A20 - mov sb, r0 - ldr r1, [r4, #8] - cmp r1, #0 - bne _0207CF40 - bl SetIrqFlag - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207CF40: - ldr r1, [r4, #0x1c] - cmp r1, #8 - blt _0207CF98 - tst sl, #1 - bne _0207CF60 - bl SetIrqFlag - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207CF60: - mov r5, #1 -_0207CF64: - mov r0, r5 - bl Snd_RecvCommandReply - ldr r0, [r4, #0x1c] - cmp r0, #8 - bge _0207CF64 - ldr r0, _0207D0C4 ; =_022B9A20 - ldr r0, [r0, #8] - cmp r0, #0 - bne _0207CF98 - mov r0, sb - bl SetIrqFlag - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207CF98: - ldr r0, _0207D0C8 ; =_022B9D00 - mov r1, #0x1800 - bl DC_FlushRange - ldr r1, _0207D0C4 ; =_022B9A20 - mov r0, #7 - ldr r1, [r1, #8] - mov r2, #0 - bl PXI_SendWordByFifo - cmp r0, #0 - bge _0207D058 - tst sl, #1 - bne _0207CFD8 - mov r0, sb - bl SetIrqFlag - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207CFD8: - mov fp, #0 - mov r5, #7 - mov r8, fp - ldr r7, _0207D0C8 ; =_022B9D00 - mov r6, #0x1800 - ldr r4, _0207D0C4 ; =_022B9A20 - b _0207D034 -_0207CFF4: - mov r0, sb - bl SetIrqFlag - mov r0, r8 - bl Snd_RecvCommandReply - bl EnableIrqFlag - mov sb, r0 - mov r0, r7 - mov r1, r6 - bl DC_FlushRange - ldr r0, [r4, #8] - cmp r0, #0 - bne _0207D034 - mov r0, sb - bl SetIrqFlag - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207D034: - ldr r0, [r4, #0x1c] - cmp r0, #8 - bge _0207CFF4 - ldr r1, [r4, #8] - mov r0, r5 - mov r2, fp - bl PXI_SendWordByFifo - cmp r0, #0 - blt _0207CFF4 -_0207D058: - ldr r0, _0207D0C4 ; =_022B9A20 - ldr r2, _0207D0CC ; =_022B9A44 - ldr r3, [r0, #0x18] - ldr r4, [r0, #8] - add r1, r3, #1 - str r4, [r2, r3, lsl #2] - str r1, [r0, #0x18] - cmp r1, #8 - movgt r1, #0 - strgt r1, [r0, #0x18] - ldr r1, _0207D0C4 ; =_022B9A20 - mov r0, #0 - str r0, [r1, #8] - str r0, [r1, #0xc] - ldr r2, [r1, #0x1c] - mov r0, sb - add r2, r2, #1 - str r2, [r1, #0x1c] - ldr r2, [r1, #0x20] - add r2, r2, #1 - str r2, [r1, #0x20] - bl SetIrqFlag - tst sl, #2 - beq _0207D0BC - bl RequestCommandProc -_0207D0BC: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0207D0C4: .word _022B9A20 -_0207D0C8: .word _022B9D00 -_0207D0CC: .word _022B9A44 - arm_func_end Snd_FlushCommand - - arm_func_start Snd_WaitForCommandProc -Snd_WaitForCommandProc: ; 0x0207D0D0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl Snd_IsFinishedCommandTag - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r4, #0 -_0207D0E8: - mov r0, r4 - bl Snd_RecvCommandReply - cmp r0, #0 - bne _0207D0E8 - mov r0, r5 - bl Snd_IsFinishedCommandTag - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - bl RequestCommandProc - mov r0, r5 - bl Snd_IsFinishedCommandTag - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r4, #1 -_0207D120: - mov r0, r4 - bl Snd_RecvCommandReply - mov r0, r5 - bl Snd_IsFinishedCommandTag - cmp r0, #0 - beq _0207D120 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end Snd_WaitForCommandProc - - arm_func_start Snd_GetCurrentCommandTag -Snd_GetCurrentCommandTag: ; 0x0207D13C - stmdb sp!, {r4, lr} - bl EnableIrqFlag - ldr r1, _0207D164 ; =_022B9A20 - ldr r2, [r1, #8] - cmp r2, #0 - ldreq r4, [r1, #4] - ldrne r4, [r1, #0x20] - bl SetIrqFlag - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D164: .word _022B9A20 - arm_func_end Snd_GetCurrentCommandTag - - arm_func_start Snd_IsFinishedCommandTag -Snd_IsFinishedCommandTag: ; 0x0207D168 - stmdb sp!, {r4, lr} - mov r4, r0 - bl EnableIrqFlag - ldr r1, _0207D1B4 ; =_022B9A20 - ldr r1, [r1, #4] - cmp r4, r1 - bls _0207D198 - sub r1, r4, r1 - cmp r1, #0x80000000 - movlo r4, #0 - movhs r4, #1 - b _0207D1A8 -_0207D198: - sub r1, r1, r4 - cmp r1, #0x80000000 - movlo r4, #1 - movhs r4, #0 -_0207D1A8: - bl SetIrqFlag - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D1B4: .word _022B9A20 - arm_func_end Snd_IsFinishedCommandTag - - arm_func_start Snd_CountFreeCommand -Snd_CountFreeCommand: ; 0x0207D1B8 - stmdb sp!, {r4, lr} - bl EnableIrqFlag - ldr r1, _0207D1F0 ; =_022B9A20 - mov r4, #0 - ldr r1, [r1] - cmp r1, #0 - beq _0207D1E4 -_0207D1D4: - ldr r1, [r1] - add r4, r4, #1 - cmp r1, #0 - bne _0207D1D4 -_0207D1E4: - bl SetIrqFlag - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D1F0: .word _022B9A20 - arm_func_end Snd_CountFreeCommand - - arm_func_start Snd_CountReservedCommand -Snd_CountReservedCommand: ; 0x0207D1F4 - stmdb sp!, {r4, lr} - bl EnableIrqFlag - ldr r1, _0207D22C ; =_022B9A20 - mov r4, #0 - ldr r1, [r1, #8] - cmp r1, #0 - beq _0207D220 -_0207D210: - ldr r1, [r1] - add r4, r4, #1 - cmp r1, #0 - bne _0207D210 -_0207D220: - bl SetIrqFlag - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D22C: .word _022B9A20 - arm_func_end Snd_CountReservedCommand - - arm_func_start Snd_CountWaitingCommand -Snd_CountWaitingCommand: ; 0x0207D230 - stmdb sp!, {r4, lr} - bl Snd_CountFreeCommand - mov r4, r0 - bl Snd_CountReservedCommand - rsb r1, r4, #0x100 - sub r0, r1, r0 - ldmia sp!, {r4, pc} - arm_func_end Snd_CountWaitingCommand - - arm_func_start PxiFifoCallback -PxiFifoCallback: ; 0x0207D24C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - bl EnableIrqFlag - mov r4, r0 - mov r0, r5 - bl Sndi_CallAlarmHandler - mov r0, r4 - bl SetIrqFlag - ldmia sp!, {r3, r4, r5, pc} - arm_func_end PxiFifoCallback - - arm_func_start InitPxi -InitPxi: ; 0x0207D270 - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _0207D2CC ; =PxiFifoCallback - mov r0, #7 - bl PXI_SetFifoRecvCallback - bl IsCommandAvailable - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, #7 - mov r1, #1 - bl PXI_IsCallbackReady - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - mov r6, #0x64 - mov r5, #7 - mov r4, #1 -_0207D2AC: - mov r0, r6 - bl OS_SpinWait - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0 - beq _0207D2AC - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0207D2CC: .word PxiFifoCallback - arm_func_end InitPxi - - arm_func_start RequestCommandProc -RequestCommandProc: ; 0x0207D2D0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, #7 - mov r4, #0 -_0207D2DC: - mov r0, r5 - mov r1, r4 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _0207D2DC - ldmia sp!, {r3, r4, r5, pc} - arm_func_end RequestCommandProc - - arm_func_start AllocCommand -AllocCommand: ; 0x0207D2F8 - stmdb sp!, {r4, lr} - bl EnableIrqFlag - ldr r1, _0207D33C ; =_022B9A20 - ldr r4, [r1] - cmp r4, #0 - bne _0207D31C - bl SetIrqFlag - mov r0, #0 - ldmia sp!, {r4, pc} -_0207D31C: - ldr r2, [r4] - str r2, [r1] - cmp r2, #0 - moveq r2, #0 - streq r2, [r1, #0x10] - bl SetIrqFlag - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D33C: .word _022B9A20 - arm_func_end AllocCommand - - arm_func_start IsCommandAvailable -IsCommandAvailable: ; 0x0207D340 - stmdb sp!, {r4, lr} - bl OS_IsRunOnEmulator - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r4, pc} - bl EnableIrqFlag - ldr r1, _0207D37C ; =0x04FFF200 - mov r2, #0x10 - str r2, [r1] - ldr r4, [r1] - bl SetIrqFlag - cmp r4, #0 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0207D37C: .word 0x04FFF200 - arm_func_end IsCommandAvailable - - arm_func_start Snd_AlarmInit -Snd_AlarmInit: ; 0x0207D380 - mov r1, #0 - ldr r2, _0207D3AC ; =_022BB500 - mov r0, r1 -_0207D38C: - str r0, [r2] - str r0, [r2, #4] - add r1, r1, #1 - strb r0, [r2, #8] - cmp r1, #8 - add r2, r2, #0xc - blt _0207D38C - bx lr - .align 2, 0 -_0207D3AC: .word _022BB500 - arm_func_end Snd_AlarmInit - - arm_func_start Sndi_IncAlarmId -Sndi_IncAlarmId: ; 0x0207D3B0 - ldr r2, _0207D3CC ; =_022BB500 - mov r1, #0xc - mla r1, r0, r1, r2 - ldrb r0, [r1, #8] - add r0, r0, #1 - strb r0, [r1, #8] - bx lr - .align 2, 0 -_0207D3CC: .word _022BB500 - arm_func_end Sndi_IncAlarmId - - arm_func_start Sndi_SetAlarmHandler -Sndi_SetAlarmHandler: ; 0x0207D3D0 - mov r3, #0xc - mul r3, r0, r3 - ldr r0, _0207D3FC ; =_022BB500 - str r1, [r0, r3] - add r1, r0, r3 - str r2, [r1, #4] - ldrb r0, [r1, #8] - add r0, r0, #1 - strb r0, [r1, #8] - and r0, r0, #0xff - bx lr - .align 2, 0 -_0207D3FC: .word _022BB500 - arm_func_end Sndi_SetAlarmHandler - - arm_func_start Sndi_CallAlarmHandler -Sndi_CallAlarmHandler: ; 0x0207D400 - stmdb sp!, {r3, lr} - ldr r3, _0207D440 ; =_022BB500 - and r2, r0, #0xff - mov r1, #0xc - mla r3, r2, r1, r3 - mov r1, r0, asr #8 - ldrb r0, [r3, #8] - and r1, r1, #0xff - cmp r1, r0 - ldmneia sp!, {r3, pc} - ldr r1, [r3] - cmp r1, #0 - ldmeqia sp!, {r3, pc} - ldr r0, [r3, #4] - blx r1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207D440: .word _022BB500 - arm_func_end Sndi_CallAlarmHandler - - arm_func_start Snd_GetPlayerStatus -Snd_GetPlayerStatus: ; 0x0207D444 - stmdb sp!, {r3, lr} - ldr r0, _0207D46C ; =_022BB560 - mov r1, #4 - ldr r0, [r0] - add r0, r0, #4 - bl DC_InvalidateRange - ldr r0, _0207D46C ; =_022BB560 - ldr r0, [r0] - ldr r0, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_0207D46C: .word _022BB560 - arm_func_end Snd_GetPlayerStatus - - arm_func_start Snd_GetChannelStatus -Snd_GetChannelStatus: ; 0x0207D470 - stmdb sp!, {r3, lr} - ldr r0, _0207D498 ; =_022BB560 - mov r1, #2 - ldr r0, [r0] - add r0, r0, #8 - bl DC_InvalidateRange - ldr r0, _0207D498 ; =_022BB560 - ldr r0, [r0] - ldrh r0, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_0207D498: .word _022BB560 - arm_func_end Snd_GetChannelStatus - - arm_func_start Sndi_GetFinishedCommandTag -Sndi_GetFinishedCommandTag: ; 0x0207D49C - stmdb sp!, {r3, lr} - ldr r0, _0207D4C0 ; =_022BB560 - mov r1, #4 - ldr r0, [r0] - bl DC_InvalidateRange - ldr r0, _0207D4C0 ; =_022BB560 - ldr r0, [r0] - ldr r0, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0207D4C0: .word _022BB560 - arm_func_end Sndi_GetFinishedCommandTag - - arm_func_start Sndi_InitSharedWork -Sndi_InitSharedWork: ; 0x0207D4C4 - stmdb sp!, {r4, lr} - mov ip, #0 - str ip, [r0, #4] - strh ip, [r0, #8] - strh ip, [r0, #0xa] - mov r4, r0 - str ip, [r0] - mvn r2, #0 - mov r3, ip -_0207D4E8: - mov lr, r3 - str r3, [r4, #0x40] -_0207D4F0: - add r1, r4, lr, lsl #1 - add lr, lr, #1 - strh r2, [r1, #0x20] - cmp lr, #0x10 - blt _0207D4F0 - add ip, ip, #1 - cmp ip, #0x10 - add r4, r4, #0x24 - blt _0207D4E8 - mov r3, #0 - mvn r2, #0 -_0207D51C: - add r1, r0, r3, lsl #1 - add r1, r1, #0x200 - add r3, r3, #1 - strh r2, [r1, #0x60] - cmp r3, #0x10 - blt _0207D51C - mov r1, #0x280 - bl DC_FlushRange - ldmia sp!, {r4, pc} - arm_func_end Sndi_InitSharedWork - - arm_func_start Snd_CalcChannelVolume -Snd_CalcChannelVolume: ; 0x0207D540 - ldr r1, _0207D5A8 ; =0xFFFFFD2D - cmp r0, r1 - movlt r0, r1 - blt _0207D558 - cmp r0, #0 - movgt r0, #0 -_0207D558: - add r1, r0, #0xd3 - mvn r2, #0xef - cmp r0, r2 - ldr r3, _0207D5AC ; =ARM9_UNKNOWN_TABLE__NA_20AE924 - add r1, r1, #0x200 - ldrb r3, [r3, r1] - movlt r0, #3 - blt _0207D598 - add r1, r2, #0x78 - cmp r0, r1 - movlt r0, #2 - blt _0207D598 - add r1, r2, #0xb4 - cmp r0, r1 - movlt r0, #1 - movge r0, #0 -_0207D598: - orr r0, r3, r0, lsl #8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - .align 2, 0 -_0207D5A8: .word 0xFFFFFD2D -_0207D5AC: .word ARM9_UNKNOWN_TABLE__NA_20AE924 - arm_func_end Snd_CalcChannelVolume - - arm_func_start Snd_AssignWaveArc -Snd_AssignWaveArc: ; 0x0207D5B0 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl Sndi_LockMutex - add r3, r6, r5, lsl #3 - ldr r2, [r3, #0x18] - cmp r2, #0 - beq _0207D640 - cmp r4, r2 - bne _0207D5E4 - bl Sndi_UnlockMutex - ldmia sp!, {r4, r5, r6, pc} -_0207D5E4: - add r1, r6, #0x18 - ldr r0, [r2, #0x18] - add ip, r1, r5, lsl #3 - cmp ip, r0 - bne _0207D610 - ldr r0, [r3, #0x1c] - mov r1, #0x3c - str r0, [r2, #0x18] - ldr r0, [r3, #0x18] - bl DC_StoreRange - b _0207D640 -_0207D610: - cmp r0, #0 - beq _0207D62C -_0207D618: - ldr r1, [r0, #4] - cmp ip, r1 - movne r0, r1 - cmpne r1, #0 - bne _0207D618 -_0207D62C: - add r1, r6, r5, lsl #3 - ldr r2, [r1, #0x1c] - mov r1, #8 - str r2, [r0, #4] - bl DC_StoreRange -_0207D640: - add r0, r6, #0x18 - ldr r1, [r4, #0x18] - add r0, r0, r5, lsl #3 - str r0, [r4, #0x18] - add r0, r6, r5, lsl #3 - str r1, [r0, #0x1c] - str r4, [r0, #0x18] - bl Sndi_UnlockMutex - mov r0, r6 - mov r1, #0x3c - bl DC_StoreRange - mov r0, r4 - mov r1, #0x3c - bl DC_StoreRange - ldmia sp!, {r4, r5, r6, pc} - arm_func_end Snd_AssignWaveArc - - arm_func_start Snd_DestroyBank -Snd_DestroyBank: ; 0x0207D67C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - bl Sndi_LockMutex - add r5, r7, #0x18 - mov r6, #0 - mov r8, #8 - mov r4, #0x3c -_0207D698: - add r1, r7, r6, lsl #3 - ldr r0, [r1, #0x18] - cmp r0, #0 - beq _0207D6FC - ldr r3, [r0, #0x18] - cmp r5, r3 - bne _0207D6C8 - ldr r2, [r1, #0x1c] - mov r1, r4 - str r2, [r0, #0x18] - bl DC_StoreRange - b _0207D6FC -_0207D6C8: - cmp r3, #0 - beq _0207D6E4 -_0207D6D0: - ldr r0, [r3, #4] - cmp r5, r0 - movne r3, r0 - cmpne r0, #0 - bne _0207D6D0 -_0207D6E4: - add r0, r7, r6, lsl #3 - ldr r2, [r0, #0x1c] - mov r0, r3 - mov r1, r8 - str r2, [r3, #4] - bl DC_StoreRange -_0207D6FC: - add r6, r6, #1 - cmp r6, #4 - add r5, r5, #8 - blt _0207D698 - bl Sndi_UnlockMutex - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end Snd_DestroyBank - - arm_func_start Snd_DestroyWaveArc -Snd_DestroyWaveArc: ; 0x0207D714 - stmdb sp!, {r4, r5, r6, lr} - mov r4, r0 - bl Sndi_LockMutex - ldr r0, [r4, #0x18] - cmp r0, #0 - beq _0207D754 - mov r5, #0 - mov r4, #8 -_0207D734: - ldr r6, [r0, #4] - mov r1, r4 - str r5, [r0] - str r5, [r0, #4] - bl DC_StoreRange - mov r0, r6 - cmp r6, #0 - bne _0207D734 -_0207D754: - bl Sndi_UnlockMutex - ldmia sp!, {r4, r5, r6, pc} - arm_func_end Snd_DestroyWaveArc - - arm_func_start Snd_GetFirstInstDataPos -Snd_GetFirstInstDataPos: ; 0x0207D75C - sub sp, sp, #8 - mov r1, #0 - str r1, [r0] - str r1, [sp] - str r1, [sp, #4] - str r1, [r0, #4] - add sp, sp, #8 - bx lr - arm_func_end Snd_GetFirstInstDataPos - - arm_func_start Snd_GetNextInstData -Snd_GetNextInstData: ; 0x0207D77C - stmdb sp!, {r3, r4, r5, lr} - ldr r4, [r2] - ldr r3, [r0, #0x38] - cmp r4, r3 - bhs _0207D924 - mov ip, #0 -_0207D794: - add r3, r0, r4, lsl #2 - ldr r4, [r3, #0x3c] - and r3, r4, #0xff - strb r4, [r1] - cmp r3, #0x10 - mov r4, r4, lsr #8 - bgt _0207D7DC - cmp r3, #0x10 - bge _0207D828 - cmp r3, #5 - addls pc, pc, r3, lsl #2 - b _0207D908 -_0207D7C4: ; jump table - b _0207D908 ; case 0 - b _0207D7E8 ; case 1 - b _0207D7E8 ; case 2 - b _0207D7E8 ; case 3 - b _0207D7E8 ; case 4 - b _0207D7E8 ; case 5 -_0207D7DC: - cmp r3, #0x11 - beq _0207D89C - b _0207D908 -_0207D7E8: - add r5, r0, r4 - ldrh r4, [r0, r4] - ldrh r3, [r5, #2] - mov r0, #1 - strh r4, [r1, #2] - strh r3, [r1, #4] - ldrh r4, [r5, #4] - ldrh r3, [r5, #6] - strh r4, [r1, #6] - strh r3, [r1, #8] - ldrh r3, [r5, #8] - strh r3, [r1, #0xa] - ldr r1, [r2] - add r1, r1, #1 - str r1, [r2] - ldmia sp!, {r3, r4, r5, pc} -_0207D828: - add r5, r0, r4 - b _0207D87C -_0207D830: - mov r0, #0xc - mla ip, lr, r0, r5 - ldrh r4, [ip, #2] - ldrh r3, [ip, #4] - mov r0, #1 - strh r4, [r1] - strh r3, [r1, #2] - ldrh r4, [ip, #6] - ldrh r3, [ip, #8] - strh r4, [r1, #4] - strh r3, [r1, #6] - ldrh r4, [ip, #0xa] - ldrh r3, [ip, #0xc] - strh r4, [r1, #8] - strh r3, [r1, #0xa] - ldr r1, [r2, #4] - add r1, r1, #1 - str r1, [r2, #4] - ldmia sp!, {r3, r4, r5, pc} -_0207D87C: - ldrb r4, [r5, #1] - ldrb r3, [r5] - ldr lr, [r2, #4] - sub r3, r4, r3 - add r3, r3, #1 - cmp lr, r3 - blo _0207D830 - b _0207D908 -_0207D89C: - add r4, r0, r4 - b _0207D8FC -_0207D8A4: - ldrb lr, [r4, r3] - cmp lr, #0 - beq _0207D908 - mov r0, #0xc - mla lr, r3, r0, r4 - ldrh ip, [lr, #8] - ldrh r3, [lr, #0xa] - mov r0, #1 - strh ip, [r1] - strh r3, [r1, #2] - ldrh ip, [lr, #0xc] - ldrh r3, [lr, #0xe] - strh ip, [r1, #4] - strh r3, [r1, #6] - ldrh ip, [lr, #0x10] - ldrh r3, [lr, #0x12] - strh ip, [r1, #8] - strh r3, [r1, #0xa] - ldr r1, [r2, #4] - add r1, r1, #1 - str r1, [r2, #4] - ldmia sp!, {r3, r4, r5, pc} -_0207D8FC: - ldr r3, [r2, #4] - cmp r3, #8 - blo _0207D8A4 -_0207D908: - ldr r3, [r2] - add r3, r3, #1 - stmia r2, {r3, ip} - ldr r4, [r2] - ldr r3, [r0, #0x38] - cmp r4, r3 - blo _0207D794 -_0207D924: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end Snd_GetNextInstData - - arm_func_start Snd_GetWaveDataCount -Snd_GetWaveDataCount: ; 0x0207D92C - ldr r0, [r0, #0x38] - bx lr - arm_func_end Snd_GetWaveDataCount - - arm_func_start Snd_SetWaveDataAddress -Snd_SetWaveDataAddress: ; 0x0207D934 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl Sndi_LockMutex - add r0, r6, #0x3c - add r2, r6, r5, lsl #2 - add r0, r0, r5, lsl #2 - mov r1, #4 - str r4, [r2, #0x3c] - bl DC_StoreRange - bl Sndi_UnlockMutex - ldmia sp!, {r4, r5, r6, pc} - arm_func_end Snd_SetWaveDataAddress - - arm_func_start Snd_GetWaveDataAddress -Snd_GetWaveDataAddress: ; 0x0207D968 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl Sndi_LockMutex - add r0, r5, r4, lsl #2 - ldr r4, [r0, #0x3c] - cmp r4, #0 - beq _0207D994 - cmp r4, #0x2000000 - addlo r4, r5, r4 - b _0207D998 -_0207D994: - mov r4, #0 -_0207D998: - bl Sndi_UnlockMutex - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end Snd_GetWaveDataAddress - - arm_func_start PXI_Init -PXI_Init: ; 0x0207D9A4 - ldr ip, _0207D9AC ; =PXI_InitFifo - bx ip - .align 2, 0 -_0207D9AC: .word PXI_InitFifo - arm_func_end PXI_Init - - arm_func_start PXI_InitFifo -PXI_InitFifo: ; 0x0207D9B0 - stmdb sp!, {r3, r4, r5, lr} - bl EnableIrqFlag - ldr r1, _0207DA94 ; =_022BB564 - mov r4, r0 - ldrh r0, [r1] - cmp r0, #0 - bne _0207DA88 - mov r2, #1 - strh r2, [r1] - mov r2, #0 - ldr r0, _0207DA98 ; =0x027FFC00 - mov r1, r2 - str r2, [r0, #0x388] - ldr r0, _0207DA9C ; =_022BB568 -_0207D9E8: - str r1, [r0, r2, lsl #2] - add r2, r2, #1 - cmp r2, #0x20 - blt _0207D9E8 - ldr r2, _0207DAA0 ; =0x0000C408 - ldr r1, _0207DAA4 ; =0x04000184 - mov r0, #0x40000 - strh r2, [r1] - bl OS_ResetRequestIrqMask - ldr r1, _0207DAA8 ; =PXIi_HandlerRecvFifoNotEmpty - mov r0, #0x40000 - bl OS_SetIrqFunction - mov r0, #0x40000 - bl OS_EnableIrqMask - mov r5, #0 - ldr r3, _0207DAAC ; =0x04000180 - mov r1, r5 - mov r2, #0x3e8 -_0207DA30: - ldrh r0, [r3] - ands lr, r0, #0xf - mov r0, lr, lsl #8 - strh r0, [r3] - bne _0207DA4C - cmp r5, #4 - bgt _0207DA88 -_0207DA4C: - ldrh r0, [r3] - mov ip, r2 - and r0, r0, #0xf - cmp r0, lr - bne _0207DA80 -_0207DA60: - cmp ip, #0 - movle r5, r1 - ble _0207DA80 - ldrh r0, [r3] - sub ip, ip, #1 - and r0, r0, #0xf - cmp r0, lr - beq _0207DA60 -_0207DA80: - add r5, r5, #1 - b _0207DA30 -_0207DA88: - mov r0, r4 - bl SetIrqFlag - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0207DA94: .word _022BB564 -_0207DA98: .word 0x027FFC00 -_0207DA9C: .word _022BB568 -_0207DAA0: .word 0x0000C408 -_0207DAA4: .word 0x04000184 -_0207DAA8: .word PXIi_HandlerRecvFifoNotEmpty -_0207DAAC: .word 0x04000180 - arm_func_end PXI_InitFifo - - arm_func_start PXI_SetFifoRecvCallback -PXI_SetFifoRecvCallback: ; 0x0207DAB0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl EnableIrqFlag - ldr r1, _0207DAF4 ; =_022BB568 - ldr r3, _0207DAF8 ; =0x027FFC00 - str r5, [r1, r4, lsl #2] - cmp r5, #0 - ldrne r2, [r3, #0x388] - mov r1, #1 - orrne r1, r2, r1, lsl r4 - mvneq r1, r1, lsl r4 - ldreq r2, [r3, #0x388] - andeq r1, r2, r1 - str r1, [r3, #0x388] - bl SetIrqFlag - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0207DAF4: .word _022BB568 -_0207DAF8: .word 0x027FFC00 - arm_func_end PXI_SetFifoRecvCallback - - arm_func_start PXI_IsCallbackReady -PXI_IsCallbackReady: ; 0x0207DAFC - ldr r2, _0207DB1C ; =0x027FFC00 - mov r3, #1 - add r1, r2, r1, lsl #2 - ldr r1, [r1, #0x388] - tst r1, r3, lsl r0 - moveq r3, #0 - mov r0, r3 - bx lr - .align 2, 0 -_0207DB1C: .word 0x027FFC00 - arm_func_end PXI_IsCallbackReady - - arm_func_start PXI_SendWordByFifo -PXI_SendWordByFifo: ; 0x0207DB20 - stmdb sp!, {r3, lr} - ldr ip, [sp] - ldr r3, _0207DBA4 ; =0x04000184 - bic ip, ip, #0x1f - and r0, r0, #0x1f - orr ip, ip, r0 - ldrh r0, [r3] - bic ip, ip, #0x20 - mov r2, r2, lsl #0x1f - orr r2, ip, r2, lsr #26 - and r2, r2, #0x3f - orr r1, r2, r1, lsl #6 - str r1, [sp] - tst r0, #0x4000 - beq _0207DB70 - ldrh r1, [r3] - mvn r0, #0 - orr r1, r1, #0xc000 - strh r1, [r3] - ldmia sp!, {r3, pc} -_0207DB70: - bl EnableIrqFlag - ldr r2, _0207DBA4 ; =0x04000184 - ldrh r1, [r2] - tst r1, #2 - beq _0207DB90 - bl SetIrqFlag - mvn r0, #1 - ldmia sp!, {r3, pc} -_0207DB90: - ldr r1, [sp] - str r1, [r2, #4] - bl SetIrqFlag - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207DBA4: .word 0x04000184 - arm_func_end PXI_SendWordByFifo - - arm_func_start PXIi_HandlerRecvFifoNotEmpty -PXIi_HandlerRecvFifoNotEmpty: ; 0x0207DBA8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mvn r8, #3 - ldr r6, [sp] - ldr sb, _0207DCB8 ; =0x04000184 - ldr r4, _0207DCBC ; =_022BB568 - add sl, r8, #1 - mov r7, #0x4100000 - mov r5, #0 -_0207DBCC: - ldrh r0, [sb] - tst r0, #0x4000 - beq _0207DBEC - ldrh r0, [sb] - add r1, r8, #1 - orr r0, r0, #0xc000 - strh r0, [sb] - b _0207DC18 -_0207DBEC: - bl EnableIrqFlag - ldrh r1, [sb] - tst r1, #0x100 - beq _0207DC08 - bl SetIrqFlag - mov r1, r8 - b _0207DC18 -_0207DC08: - ldr r6, [r7] - str r6, [sp] - bl SetIrqFlag - mov r1, r5 -_0207DC18: - cmp r1, r8 - addeq sp, sp, #4 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - cmp r1, sl - beq _0207DBCC - mov r0, r6, lsl #0x1b - movs r0, r0, lsr #0x1b - beq _0207DBCC - ldr r3, [r4, r0, lsl #2] - cmp r3, #0 - beq _0207DC58 - mov r2, r6, lsl #0x1a - mov r1, r6, lsr #6 - mov r2, r2, lsr #0x1f - blx r3 - b _0207DBCC -_0207DC58: - mov r0, r6, lsl #0x1a - movs r0, r0, lsr #0x1f - bne _0207DBCC - ldrh r0, [sb] - orr r6, r6, #0x20 - str r6, [sp] - tst r0, #0x4000 - beq _0207DC88 - ldrh r0, [sb] - orr r0, r0, #0xc000 - strh r0, [sb] - b _0207DBCC -_0207DC88: - bl EnableIrqFlag - ldrh r1, [sb] - tst r1, #2 - beq _0207DCA0 - bl SetIrqFlag - b _0207DBCC -_0207DCA0: - mov r1, r6 - str r1, [sb, #4] - bl SetIrqFlag - b _0207DBCC -_0207DCB0: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0207DCB8: .word 0x04000184 -_0207DCBC: .word _022BB568 - arm_func_end PXIi_HandlerRecvFifoNotEmpty - - arm_func_start FSi_ReleaseCommand -FSi_ReleaseCommand: ; 0x0207DCC0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - mov r4, r1 - bl EnableIrqFlag - ldr r1, [r5] - mov r6, r0 - ldr r0, [r5, #4] - cmp r1, #0 - strne r0, [r1, #4] - cmp r0, #0 - strne r1, [r0] - mov r0, #0 - str r0, [r5] - str r0, [r5, #4] - ldr r1, [r5, #0xc] - add r0, r5, #0x18 - bic r1, r1, #0x4f - str r1, [r5, #0xc] - str r4, [r5, #0x14] - bl OS_WakeupThread - mov r0, r6 - bl SetIrqFlag - ldmia sp!, {r4, r5, r6, pc} - arm_func_end FSi_ReleaseCommand - - arm_func_start FSi_TranslateCommand -FSi_TranslateCommand: ; 0x0207DD1C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - ldr r0, [r8, #0xc] - ldr r5, [r8, #8] - mov r7, r1 - mov r1, #1 - tst r0, #4 - mov r6, r1, lsl r7 - moveq r1, #0 - ldr r0, [r5, #0x1c] - cmp r1, #0 - orrne r0, r0, #0x200 - orreq r0, r0, #0x100 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x58] - tst r0, r6 - beq _0207DDC4 - ldr r2, [r5, #0x54] - mov r0, r8 - mov r1, r7 - blx r2 - mov r4, r0 - cmp r4, #8 - addls pc, pc, r4, lsl #2 - b _0207DDC8 -_0207DD80: ; jump table - b _0207DDA4 ; case 0 - b _0207DDA4 ; case 1 - b _0207DDC8 ; case 2 - b _0207DDC8 ; case 3 - b _0207DDA4 ; case 4 - b _0207DDC8 ; case 5 - b _0207DDC8 ; case 6 - b _0207DDC8 ; case 7 - b _0207DDAC ; case 8 -_0207DDA4: - str r4, [r8, #0x14] - b _0207DDC8 -_0207DDAC: - ldr r1, [r5, #0x58] - mvn r0, r6 - and r0, r1, r0 - str r0, [r5, #0x58] - mov r4, #7 - b _0207DDC8 -_0207DDC4: - mov r4, #7 -_0207DDC8: - cmp r4, #7 - bne _0207DDE4 - ldr r1, _0207DEA8 ; =_020AEBF8 - mov r0, r8 - ldr r1, [r1, r7, lsl #2] - blx r1 - mov r4, r0 -_0207DDE4: - cmp r4, #6 - bne _0207DE5C - ldr r0, [r8, #0xc] - tst r0, #4 - movne r0, #1 - moveq r0, #0 - cmp r0, #0 - beq _0207DEA0 - bl EnableIrqFlag - ldr r1, [r5, #0x1c] - mov r7, r0 - tst r1, #0x200 - movne r0, #1 - moveq r0, #0 - cmp r0, #0 - beq _0207DE4C - mov r4, #0 - mov r6, #1 -_0207DE2C: - add r0, r5, #0xc - bl OS_SleepThread - ldr r0, [r5, #0x1c] - tst r0, #0x200 - movne r0, r6 - moveq r0, r4 - cmp r0, #0 - bne _0207DE2C -_0207DE4C: - mov r0, r7 - ldr r4, [r8, #0x14] - bl SetIrqFlag - b _0207DEA0 -_0207DE5C: - ldr r0, [r8, #0xc] - tst r0, #4 - movne r0, #1 - moveq r0, #0 - cmp r0, #0 - bne _0207DE90 - ldr r1, [r5, #0x1c] - mov r0, r8 - bic r2, r1, #0x100 - mov r1, r4 - str r2, [r5, #0x1c] - bl FSi_ReleaseCommand - b _0207DEA0 -_0207DE90: - ldr r0, [r5, #0x1c] - bic r0, r0, #0x200 - str r0, [r5, #0x1c] - str r4, [r8, #0x14] -_0207DEA0: - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0207DEA8: .word _020AEBF8 - arm_func_end FSi_TranslateCommand - - arm_func_start FSi_StrNiCmp -FSi_StrNiCmp: ; 0x0207DEAC - stmdb sp!, {r3, lr} - cmp r2, #0 - mov lr, #0 - bls _0207DEF4 -_0207DEBC: - ldrb ip, [r0, lr] - ldrb r3, [r1, lr] - sub ip, ip, #0x41 - cmp ip, #0x19 - sub r3, r3, #0x41 - addls ip, ip, #0x20 - cmp r3, #0x19 - addls r3, r3, #0x20 - cmp ip, r3 - subne r0, ip, r3 - ldmneia sp!, {r3, pc} - add lr, lr, #1 - cmp lr, r2 - blo _0207DEBC -_0207DEF4: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end FSi_StrNiCmp - - arm_func_start FSi_ReadTable -FSi_ReadTable: ; 0x0207DEFC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r7, r0 - ldr r4, [r7] - mov r6, r2 - ldr r2, [r4, #0x1c] - mov r0, r4 - orr r2, r2, #0x200 - str r2, [r4, #0x1c] - ldr r2, [r7, #4] - ldr r5, [r4, #0x50] - mov r3, r6 - blx r5 - cmp r0, #0 - cmpne r0, #1 - beq _0207DF44 - cmp r0, #6 - beq _0207DF54 - b _0207DFAC -_0207DF44: - ldr r1, [r4, #0x1c] - bic r1, r1, #0x200 - str r1, [r4, #0x1c] - b _0207DFAC -_0207DF54: - bl EnableIrqFlag - ldr r1, [r4, #0x1c] - mov r5, r0 - tst r1, #0x200 - movne r0, #1 - moveq r0, #0 - cmp r0, #0 - beq _0207DF9C - mov r8, #0 - mov sb, #1 -_0207DF7C: - add r0, r4, #0xc - bl OS_SleepThread - ldr r0, [r4, #0x1c] - tst r0, #0x200 - movne r0, sb - moveq r0, r8 - cmp r0, #0 - bne _0207DF7C -_0207DF9C: - mov r0, r5 - bl SetIrqFlag - ldr r0, [r4, #0x24] - ldr r0, [r0, #0x14] -_0207DFAC: - ldr r1, [r7, #4] - add r1, r1, r6 - str r1, [r7, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end FSi_ReadTable - - arm_func_start FSi_SeekDirDirect -FSi_SeekDirDirect: ; 0x0207DFBC - ldr r3, [r0, #0xc] - mov r2, #0 - orr r3, r3, #4 - str r3, [r0, #0xc] - ldr r3, [r0, #8] - ldr ip, _0207DFEC ; =FSi_TranslateCommand - str r3, [r0, #0x30] - str r2, [r0, #0x38] - strh r2, [r0, #0x36] - strh r1, [r0, #0x34] - mov r1, #2 - bx ip - .align 2, 0 -_0207DFEC: .word FSi_TranslateCommand - arm_func_end FSi_SeekDirDirect - - arm_func_start FSi_ReadFileCommand -FSi_ReadFileCommand: ; 0x0207DFF0 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0x2c] - ldr r3, [r0, #0x38] - ldr lr, [r0, #8] - ldr r1, [r0, #0x30] - add ip, r2, r3 - str ip, [r0, #0x2c] - ldr ip, [lr, #0x48] - mov r0, lr - blx ip - ldmia sp!, {r3, pc} - arm_func_end FSi_ReadFileCommand - - arm_func_start FSi_WriteFileCommand -FSi_WriteFileCommand: ; 0x0207E01C - stmdb sp!, {r3, lr} - ldr r2, [r0, #0x2c] - ldr r3, [r0, #0x38] - ldr lr, [r0, #8] - ldr r1, [r0, #0x30] - add ip, r2, r3 - str ip, [r0, #0x2c] - ldr ip, [lr, #0x4c] - mov r0, lr - blx ip - ldmia sp!, {r3, pc} - arm_func_end FSi_WriteFileCommand - - arm_func_start FSi_SeekDirCommand -FSi_SeekDirCommand: ; 0x0207E048 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r6, r0 - ldr r4, [r6, #8] - add r5, r6, #0x30 - str r4, [sp] - ldrh r1, [r5, #4] - ldr r2, [r4, #0x34] - add r0, sp, #0 - add r3, r2, r1, lsl #3 - add r1, sp, #8 - mov r2, #8 - str r3, [sp, #4] - bl FSi_ReadTable - movs r3, r0 - bne _0207E0D0 - add ip, r6, #0x20 - ldmia r5, {r0, r1, r2} - stmia ip, {r0, r1, r2} - ldrh r0, [r5, #6] - cmp r0, #0 - ldreq r0, [r5, #8] - cmpeq r0, #0 - bne _0207E0C0 - ldrh r0, [sp, #0xc] - strh r0, [r6, #0x26] - ldr r1, [r4, #0x34] - ldr r0, [sp, #8] - add r0, r1, r0 - str r0, [r6, #0x28] -_0207E0C0: - ldrh r1, [sp, #0xe] - ldr r0, _0207E0DC ; =0x00000FFF - and r0, r1, r0 - str r0, [r6, #0x2c] -_0207E0D0: - mov r0, r3 - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0207E0DC: .word 0x00000FFF - arm_func_end FSi_SeekDirCommand - - arm_func_start FSi_ReadDirCommand -FSi_ReadDirCommand: ; 0x0207E0E0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r0 - ldr r4, [r5, #0x30] - ldr r1, [r5, #8] - add r0, sp, #4 - str r1, [sp, #4] - ldr r3, [r5, #0x28] - add r1, sp, #0 - mov r2, #1 - str r3, [sp, #8] - bl FSi_ReadTable - cmp r0, #0 - addne sp, sp, #0xc - ldmneia sp!, {r4, r5, pc} - ldrb r1, [sp] - and r2, r1, #0x7f - mov r1, r1, asr #7 - str r2, [r4, #0x10] - and r1, r1, #1 - str r1, [r4, #0xc] - ldr r2, [r4, #0x10] - cmp r2, #0 - addeq sp, sp, #0xc - moveq r0, #1 - ldmeqia sp!, {r4, r5, pc} - ldr r1, [r5, #0x34] - cmp r1, #0 - bne _0207E180 - add r0, sp, #4 - add r1, r4, #0x14 - bl FSi_ReadTable - cmp r0, #0 - addne sp, sp, #0xc - ldmneia sp!, {r4, r5, pc} - ldr r1, [r4, #0x10] - mov r2, #0 - add r1, r4, r1 - strb r2, [r1, #0x14] - b _0207E18C -_0207E180: - ldr r1, [sp, #8] - add r1, r1, r2 - str r1, [sp, #8] -_0207E18C: - ldr r1, [r4, #0xc] - cmp r1, #0 - beq _0207E1DC - add r0, sp, #4 - add r1, sp, #2 - mov r2, #2 - bl FSi_ReadTable - cmp r0, #0 - addne sp, sp, #0xc - ldmneia sp!, {r4, r5, pc} - ldr r2, [r5, #8] - ldr r1, _0207E208 ; =0x00000FFF - str r2, [r4] - ldrh r3, [sp, #2] - mov r2, #0 - and r1, r3, r1 - strh r1, [r4, #4] - strh r2, [r4, #6] - str r2, [r4, #8] - b _0207E1F8 -_0207E1DC: - ldr r1, [r5, #8] - str r1, [r4] - ldrh r1, [r5, #0x26] - str r1, [r4, #4] - ldrh r1, [r5, #0x26] - add r1, r1, #1 - strh r1, [r5, #0x26] -_0207E1F8: - ldr r1, [sp, #8] - str r1, [r5, #0x28] - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_0207E208: .word 0x00000FFF - arm_func_end FSi_ReadDirCommand - - arm_func_start FSi_FindPathCommand -FSi_FindPathCommand: ; 0x0207E20C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x94 - mov sb, r0 - ldr r5, [sb, #0x3c] - mov r1, #2 - ldr r6, [sb, #0x40] - bl FSi_TranslateCommand - ldrb r3, [r5] - cmp r3, #0 - beq _0207E3C4 -_0207E234: - mov r8, #0 - mov r0, #1 - mov r1, r8 - b _0207E248 -_0207E244: - add r8, r8, #1 -_0207E248: - ldrb r7, [r5, r8] - mov r2, r1 - cmp r7, #0 - cmpne r7, #0x2f - cmpne r7, #0x5c - movne r2, r0 - cmp r2, #0 - bne _0207E244 - cmp r7, #0 - cmpeq r6, #0 - movne r7, #1 - cmp r8, #0 - addeq sp, sp, #0x94 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - cmp r3, #0x2e - bne _0207E2DC - cmp r8, #1 - addeq r5, r5, #1 - beq _0207E3A8 - ldrb r0, [r5, #1] - cmp r8, #2 - moveq r1, #1 - movne r1, #0 - cmp r0, #0x2e - moveq r0, #1 - movne r0, #0 - tst r1, r0 - beq _0207E2DC - ldrh r0, [sb, #0x24] - cmp r0, #0 - beq _0207E2D4 - ldr r1, [sb, #0x2c] - mov r0, sb - bl FSi_SeekDirDirect -_0207E2D4: - add r5, r5, #2 - b _0207E3A8 -_0207E2DC: - cmp r8, #0x7f - addgt sp, sp, #0x94 - movgt r0, #1 - ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - add r1, sp, #0 - mov r0, #0 - str r1, [sb, #0x30] - str r0, [sb, #0x34] - add sl, sp, #0x14 - mov r4, #3 -_0207E304: - mov r0, sb - mov r1, r4 - bl FSi_TranslateCommand - cmp r0, #0 - addne sp, sp, #0x94 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - ldr r0, [sp, #0xc] - cmp r7, r0 - ldreq r0, [sp, #0x10] - cmpeq r8, r0 - bne _0207E304 - mov r0, r5 - mov r1, sl - mov r2, r8 - bl FSi_StrNiCmp - cmp r0, #0 - bne _0207E304 - cmp r7, #0 - beq _0207E378 - add r0, sp, #0 - add r3, sb, #0x30 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, sb - mov r1, #2 - add r5, r5, r8 - bl FSi_TranslateCommand - b _0207E3A8 -_0207E378: - cmp r6, #0 - addne sp, sp, #0x94 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - ldr r3, [sb, #0x44] - ldr r2, [sp] - ldr r1, [sp, #4] - add sp, sp, #0x94 - str r2, [r3] - mov r0, #0 - str r1, [r3, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} -_0207E3A8: - ldrb r0, [r5] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - ldrb r3, [r5, r0]! - cmp r3, #0 - bne _0207E234 -_0207E3C4: - cmp r6, #0 - addeq sp, sp, #0x94 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - ldr r3, [sb, #0x44] - add r0, sb, #0x20 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #0 - add sp, sp, #0x94 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end FSi_FindPathCommand - - arm_func_start FSi_GetPathCommand -FSi_GetPathCommand: ; 0x0207E3F0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xe0 - mov sl, r0 - ldr r1, [sl, #8] - add r0, sp, #4 - str r1, [sp] - bl FileInit - ldr r0, [sl, #8] - str r0, [sp, #0xc] - ldr r0, [sl, #0xc] - tst r0, #0x20 - movne r0, #1 - moveq r0, #0 - cmp r0, #0 - ldrneh sb, [sl, #0x24] - movne r6, #0x10000 - bne _0207E4D4 - ldrh r0, [sl, #0x38] - ldr r6, [sl, #0x20] - cmp r0, #0 - ldrneh sb, [sl, #0x3a] - bne _0207E4D4 - mov r7, #0 - mov r8, r7 - mov sb, #0x10000 - add r5, sp, #4 - mov r4, #3 - add fp, sp, #0x4c -_0207E460: - mov r0, r5 - mov r1, r7 - bl FSi_SeekDirDirect - mov r2, #1 - cmp r7, #0 - mov r0, r5 - mov r1, #3 - ldreq r8, [sp, #0x30] - str fp, [sp, #0x34] - str r2, [sp, #0x38] - bl FSi_TranslateCommand - cmp r0, #0 - bne _0207E4C0 -_0207E494: - ldr r0, [sp, #0x58] - cmp r0, #0 - ldreq r0, [sp, #0x50] - cmpeq r0, r6 - ldreqh sb, [sp, #0x28] - beq _0207E4C0 - mov r0, r5 - mov r1, r4 - bl FSi_TranslateCommand - cmp r0, #0 - beq _0207E494 -_0207E4C0: - cmp sb, #0x10000 - bne _0207E4D4 - add r7, r7, #1 - cmp r7, r8 - blo _0207E460 -_0207E4D4: - cmp sb, #0x10000 - bne _0207E4F0 - mov r0, #0 - strh r0, [sl, #0x38] - add sp, sp, #0xe0 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0207E4F0: - ldrh r0, [sl, #0x38] - cmp r0, #0 - bne _0207E5D4 - ldr r0, [sp] - mov r1, #0 - ldr r0, [r0] - cmp r0, #0xff - addls r8, r1, #1 - bls _0207E520 - cmp r0, #0xff00 - addls r8, r1, #2 - addhi r8, r1, #3 -_0207E520: - cmp r6, #0x10000 - ldrne r0, [sp, #0x5c] - add r8, r8, #2 - addne r8, r8, r0 - mov r7, sb - cmp sb, #0 - beq _0207E5C8 - add r0, sp, #4 - mov r1, sb - bl FSi_SeekDirDirect - add r5, sp, #4 - mov r4, #3 - add fp, sp, #0x4c -_0207E554: - ldr r1, [sp, #0x30] - mov r0, r5 - bl FSi_SeekDirDirect - mov r1, #1 - str r1, [sp, #0x38] - mov r0, r5 - mov r1, #3 - str fp, [sp, #0x34] - bl FSi_TranslateCommand - cmp r0, #0 - bne _0207E5BC -_0207E580: - ldr r0, [sp, #0x58] - cmp r0, #0 - beq _0207E5A8 - ldrh r0, [sp, #0x50] - cmp r0, r7 - bne _0207E5A8 - ldr r0, [sp, #0x5c] - add r0, r0, #1 - add r8, r8, r0 - b _0207E5BC -_0207E5A8: - mov r0, r5 - mov r1, r4 - bl FSi_TranslateCommand - cmp r0, #0 - beq _0207E580 -_0207E5BC: - ldrh r7, [sp, #0x28] - cmp r7, #0 - bne _0207E554 -_0207E5C8: - add r0, r8, #1 - strh r0, [sl, #0x38] - strh sb, [sl, #0x3a] -_0207E5D4: - ldr r5, [sl, #0x30] - cmp r5, #0 - addeq sp, sp, #0xe0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrh r4, [sl, #0x38] - ldr r0, [sl, #0x34] - cmp r0, r4 - addlo sp, sp, #0xe0 - movlo r0, #1 - ldmloia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r0, [sp] - mov r7, #0 - ldr r0, [r0] - cmp r0, #0xff - movls r8, #1 - bls _0207E624 - cmp r0, #0xff00 - movls r8, #2 - movhi r8, #3 -_0207E624: - ldr r0, [sp] - mov r1, r5 - mov r2, r8 - bl MI_CpuCopy8 - add r1, r7, r8 - ldr r0, _0207E798 ; =_020B2BB0 - add r1, r5, r1 - mov r2, #2 - bl MI_CpuCopy8 - add r0, sp, #4 - mov r1, sb - bl FSi_SeekDirDirect - cmp r6, #0x10000 - beq _0207E6D4 - add r3, sp, #0x4c - mov r2, #0 - add r0, sp, #4 - mov r1, #3 - str r3, [sp, #0x34] - str r2, [sp, #0x38] - bl FSi_TranslateCommand - cmp r0, #0 - bne _0207E6B0 - add r8, sp, #4 - mov r7, #3 -_0207E688: - ldr r0, [sp, #0x58] - cmp r0, #0 - ldreq r0, [sp, #0x50] - cmpeq r0, r6 - beq _0207E6B0 - mov r0, r8 - mov r1, r7 - bl FSi_TranslateCommand - cmp r0, #0 - beq _0207E688 -_0207E6B0: - ldr r0, [sp, #0x5c] - add r1, r5, r4 - add r6, r0, #1 - add r0, sp, #0x60 - mov r2, r6 - sub r1, r1, r6 - bl MI_CpuCopy8 - sub r4, r4, r6 - b _0207E6E4 -_0207E6D4: - add r0, r5, r4 - mov r1, #0 - strb r1, [r0, #-1] - sub r4, r4, #1 -_0207E6E4: - cmp sb, #0 - beq _0207E78C - add sl, sp, #4 - mov r6, #3 - add r8, sp, #0x4c - mov r7, #0 - mov fp, #0x2f -_0207E700: - ldr r1, [sp, #0x30] - mov r0, sl - bl FSi_SeekDirDirect - add r1, r5, r4 - str r8, [sp, #0x34] - str r7, [sp, #0x38] - strb fp, [r1, #-1] - mov r0, sl - mov r1, #3 - sub r4, r4, #1 - bl FSi_TranslateCommand - cmp r0, #0 - bne _0207E780 -_0207E734: - ldr r0, [sp, #0x58] - cmp r0, #0 - beq _0207E76C - ldrh r0, [sp, #0x50] - cmp r0, sb - bne _0207E76C - ldr sb, [sp, #0x5c] - add r1, r5, r4 - add r0, sp, #0x60 - mov r2, sb - sub r1, r1, sb - bl MI_CpuCopy8 - sub r4, r4, sb - b _0207E780 -_0207E76C: - mov r0, sl - mov r1, r6 - bl FSi_TranslateCommand - cmp r0, #0 - beq _0207E734 -_0207E780: - ldrh sb, [sp, #0x28] - cmp sb, #0 - bne _0207E700 -_0207E78C: - mov r0, #0 - add sp, sp, #0xe0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0207E798: .word _020B2BB0 - arm_func_end FSi_GetPathCommand - - arm_func_start FSi_OpenFileFastCommand -FSi_OpenFileFastCommand: ; 0x0207E79C - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - mov r5, r0 - ldr r1, [r5, #8] - ldr r4, [r5, #0x34] - ldr r0, [r1, #0x30] - mov r2, r4, lsl #3 - cmp r0, r4, lsl #3 - addls sp, sp, #0x10 - movls r0, #1 - ldmlsia sp!, {r3, r4, r5, pc} - str r1, [sp] - ldr r1, [r1, #0x2c] - add r0, sp, #0 - add r3, r1, r2 - add r1, sp, #8 - mov r2, #8 - str r3, [sp, #4] - bl FSi_ReadTable - cmp r0, #0 - addne sp, sp, #0x10 - ldmneia sp!, {r3, r4, r5, pc} - ldr r1, [sp, #8] - mov r0, r5 - str r1, [r5, #0x30] - ldr r2, [sp, #0xc] - mov r1, #7 - str r2, [r5, #0x34] - str r4, [r5, #0x38] - bl FSi_TranslateCommand - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end FSi_OpenFileFastCommand - diff --git a/main.lsf b/main.lsf index d8227c26..538f2ffa 100644 --- a/main.lsf +++ b/main.lsf @@ -260,7 +260,17 @@ Static main 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 lib/NitroSDK/asm/snd_interface.o + Object lib/NitroSDK/asm/snd_main.o + Object lib/NitroSDK/asm/snd_command.o + Object lib/NitroSDK/asm/snd_alarm.o + Object lib/NitroSDK/asm/snd_work.o + Object lib/NitroSDK/asm/snd_util.o + Object lib/NitroSDK/asm/snd_bank.o + Object lib/NitroSDK/asm/pxi_init.o + Object lib/NitroSDK/asm/pxi_fifo.o + Object lib/NitroSDK/asm/fs_command.o + Object lib/NitroSDK/asm/fs_command_default.o Object src/main_0207E81C.o Object asm/main_0207E84C.o Object src/main_0207F3E4.o