diff options
Diffstat (limited to 'arm7/asm/SND_unk_037FD440.s')
-rw-r--r-- | arm7/asm/SND_unk_037FD440.s | 1603 |
1 files changed, 1603 insertions, 0 deletions
diff --git a/arm7/asm/SND_unk_037FD440.s b/arm7/asm/SND_unk_037FD440.s new file mode 100644 index 00000000..f680881b --- /dev/null +++ b/arm7/asm/SND_unk_037FD440.s @@ -0,0 +1,1603 @@ +#todo identify and split + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start FUN_037FD440 +FUN_037FD440: ; 0x037FD440 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _037FD4B8 + b _037FD464 + b _037FD474 + b _037FD484 + b _037FD49C +_037FD464: + ldrb r0, [r4] + bic r0, r0, #4 + strb r0, [r4] + b _037FD4B8 +_037FD474: + ldrb r0, [r4] + orr r0, r0, #4 + strb r0, [r4] + b _037FD4B8 +_037FD484: + ldrb r2, [r4] + orr r2, r2, #4 + strb r2, [r4] + mvn r2, #0 + bl FUN_037FE588 + b _037FD4B8 +_037FD49C: + ldrb r2, [r4] + orr r2, r2, #4 + strb r2, [r4] + mov r2, #127 ; 0x7f + bl FUN_037FE588 + mov r0, r4 + bl FUN_037FE54C +_037FD4B8: + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FUN_037FD4C0 +FUN_037FD4C0: ; 0x037FD4C0 + mov r0, #0 + ldr r3, _037FD500 ; =_038086EC + b _037FD4F0 +_037FD4CC: + add ip, r3, r0, lsl #6 + ldrb r1, [r3, r0, lsl #6] + mov r2, r1, lsl #31 + movs r2, r2, lsr #31 + biceq r1, r1, #1 + orreq r1, r1, #1 + streqb r1, [ip] + bxeq lr + add r0, r0, #1 +_037FD4F0: + cmp r0, #32 + blt _037FD4CC + mvn r0, #0 + bx lr +_037FD500: .word _038086EC + + arm_func_start FUN_037FD504 +FUN_037FD504: ; 0x037FD504 + ldr r2, _037FD544 ; =SNDi_SharedWork + ldr r2, [r2] + cmp r2, #0 + moveq r0, #0 + bxeq lr + cmp r1, #16 + addge r2, r2, #608 ; 0x260 + subge r0, r1, #16 + addge r0, r2, r0, lsl #1 + bxge lr + add r3, r2, #32 + ldrb r2, [r0, #1] + mov r0, #36 ; 0x24 + mla r0, r2, r0, r3 + add r0, r0, r1, lsl #1 + bx lr +_037FD544: .word SNDi_SharedWork + + arm_func_start FUN_037FD548 +FUN_037FD548: ; 0x037FD548 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r7, r1 + mov r6, #0 + mov r5, r6 + mov r4, #1 +_037FD560: + mov r0, r8 + mov r1, r5 + bl FUN_037FE460 + cmp r0, #0 + beq _037FD5A8 + ldr r1, [r0, #40] ; 0x28 + cmp r1, #0 + beq _037FD5A8 + mov r1, r8 + mov r2, r5 + mov r3, r7 + bl FUN_037FD5C8 + cmp r0, #0 + moveq r6, r4 + beq _037FD5A8 + mov r0, r8 + mov r1, r5 + bl FUN_037FE3EC +_037FD5A8: + add r5, r5, #1 + cmp r5, #16 + blt _037FD560 + cmp r6, #0 + moveq r0, #1 + movne r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + + arm_func_start FUN_037FD5C8 +FUN_037FD5C8: ; 0x037FD5C8 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #52 ; 0x34 + mov r9, r0 + mov r8, r1 + str r3, [sp, #4] + ldr r2, [r9, #60] ; 0x3c + b _037FD61C +_037FD5E4: + ldr r0, [r2, #52] ; 0x34 + cmp r0, #0 + subgt r0, r0, #1 + strgt r0, [r2, #52] ; 0x34 + ldrb r0, [r2, #3] + mov r0, r0, lsl #29 + movs r0, r0, lsr #31 + bne _037FD618 + ldr r1, [r2, #20] + ldr r0, [r2, #24] + cmp r1, r0 + addlt r0, r1, #1 + strlt r0, [r2, #20] +_037FD618: + ldr r2, [r2, #80] ; 0x50 +_037FD61C: + cmp r2, #0 + bne _037FD5E4 + ldrb r1, [r9] + mov r0, r1, lsl #27 + movs r0, r0, lsr #31 + beq _037FD64C + ldr r0, [r9, #60] ; 0x3c + cmp r0, #0 + movne r0, #0 + bne _037FDF84 + bic r0, r1, #16 + strb r0, [r9] +_037FD64C: + ldr r0, [r9, #32] + cmp r0, #0 + ble _037FD670 + sub r0, r0, #1 + str r0, [r9, #32] + ldr r0, [r9, #32] + cmp r0, #0 + movgt r0, #0 + bgt _037FDF84 +_037FD670: + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE9B8 + add r0, r9, #40 ; 0x28 + str r0, [sp, #28] + mov r0, #2 + str r0, [sp, #32] + mov r0, #127 ; 0x7f + str r0, [sp, #36] ; 0x24 + mov fp, #0 + mvn r0, #0 + str r0, [sp, #40] ; 0x28 + mov sl, #1 + mov r0, #3 + str r0, [sp, #20] + mov r0, #4 + str r0, [sp, #24] + b _037FDF64 +_037FD6B4: + mov r4, fp + mov r6, sl + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + mov r7, r0 + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + cmp r7, #162 ; 0xa2 + bne _037FD700 + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + mov r7, r0 + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + ldrb r0, [r9] + mov r0, r0, lsl #25 + mov r6, r0, lsr #31 +_037FD700: + cmp r7, #160 ; 0xa0 + bne _037FD72C + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + mov r7, r0 + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + ldr r0, [sp, #20] + str r0, [sp, #8] + mov r4, sl +_037FD72C: + cmp r7, #161 ; 0xa1 + bne _037FD758 + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + mov r7, r0 + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + ldr r0, [sp, #24] + str r0, [sp, #8] + mov r4, sl +_037FD758: + ands r0, r7, #128 ; 0x80 + bne _037FD82C + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + str r0, [sp, #12] + ldr r0, [sp, #28] + ldr r0, [r0] + add r1, r0, #1 + ldr r0, [sp, #28] + str r1, [r0] + cmp r4, #0 + ldrne r2, [sp, #8] + ldreq r2, [sp, #32] + mov r0, r9 + mov r1, r8 + bl FUN_037FE7B0 + mov r5, r0 + ldrsb r0, [r9, #19] + add r4, r7, r0 + cmp r6, #0 + beq _037FDF64 + cmp r4, #0 + movlt r4, fp + blt _037FD7C0 + cmp r4, #127 ; 0x7f + ldrgt r4, [sp, #36] ; 0x24 +_037FD7C0: + ldrb r0, [r9] + mov r0, r0, lsl #29 + movs r0, r0, lsr #31 + bne _037FD800 + ldr r0, [sp, #4] + cmp r0, #0 + beq _037FD800 + cmp r5, #0 + movgt r0, r5 + ldrle r0, [sp, #40] ; 0x28 + str r0, [sp] + mov r0, r9 + mov r1, r8 + mov r2, r4 + ldr r3, [sp, #12] + bl FUN_037FDF94 +_037FD800: + strb r4, [r9, #20] + ldrb r0, [r9] + mov r0, r0, lsl #30 + movs r0, r0, lsr #31 + beq _037FDF64 + str r5, [r9, #32] + cmp r5, #0 + ldreqb r0, [r9] + orreq r0, r0, #16 + streqb r0, [r9] + b _037FDF64 +_037FD82C: + and r0, r7, #240 ; 0xf0 + cmp r0, #192 ; 0xc0 + bgt _037FD868 + cmp r0, #192 ; 0xc0 + bge _037FD9B8 + cmp r0, #144 ; 0x90 + bgt _037FD85C + cmp r0, #144 ; 0x90 + bge _037FD8D8 + cmp r0, #128 ; 0x80 + beq _037FD890 + b _037FDF64 +_037FD85C: + cmp r0, #176 ; 0xb0 + beq _037FDC68 + b _037FDF64 +_037FD868: + cmp r0, #224 ; 0xe0 + bgt _037FD884 + cmp r0, #224 ; 0xe0 + bge _037FDC14 + cmp r0, #208 ; 0xd0 + beq _037FD9B8 + b _037FDF64 +_037FD884: + cmp r0, #240 ; 0xf0 + beq _037FDEC0 + b _037FDF64 +_037FD890: + cmp r4, #0 + ldrne r2, [sp, #8] + ldreq r2, [sp, #32] + mov r0, r9 + mov r1, r8 + bl FUN_037FE7B0 + cmp r6, #0 + beq _037FDF64 + cmp r7, #128 ; 0x80 + beq _037FD8C4 + cmp r7, #129 ; 0x81 + beq _037FD8CC + b _037FDF64 +_037FD8C4: + str r0, [r9, #32] + b _037FDF64 +_037FD8CC: + cmp r0, #65536 ; 0x10000 + strlth r0, [r9, #2] + b _037FDF64 +_037FD8D8: + cmp r7, #147 ; 0x93 + beq _037FD8F4 + cmp r7, #148 ; 0x94 + beq _037FD958 + cmp r7, #149 ; 0x95 + beq _037FD974 + b _037FDF64 +_037FD8F4: + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + mov r4, r0 + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + mov r0, r9 + bl FUN_037FE8B8 + mov r5, r0 + cmp r6, #0 + beq _037FDF64 + mov r0, r8 + mov r1, r4 + bl FUN_037FE460 + movs r4, r0 + beq _037FDF64 + cmp r4, r9 + beq _037FDF64 + mov r1, r8 + bl FUN_037FE440 + mov r0, r4 + ldr r1, [r9, #36] ; 0x24 + mov r2, r5 + bl FUN_037FE6A8 + b _037FDF64 +_037FD958: + mov r0, r9 + bl FUN_037FE8B8 + cmp r6, #0 + ldrne r1, [r9, #36] ; 0x24 + addne r0, r1, r0 + strne r0, [r9, #40] ; 0x28 + b _037FDF64 +_037FD974: + mov r0, r9 + bl FUN_037FE8B8 + cmp r6, #0 + beq _037FDF64 + ldrb r1, [r9, #59] ; 0x3b + cmp r1, #3 + bcs _037FDF64 + ldr r2, [r9, #40] ; 0x28 + add r1, r9, r1, lsl #2 + str r2, [r1, #44] ; 0x2c + ldrb r1, [r9, #59] ; 0x3b + add r1, r1, #1 + strb r1, [r9, #59] ; 0x3b + ldr r1, [r9, #36] ; 0x24 + add r0, r1, r0 + str r0, [r9, #40] ; 0x28 + b _037FDF64 +_037FD9B8: + cmp r4, #0 + ldrne r2, [sp, #8] + moveq r2, fp + mov r0, r9 + mov r1, r8 + bl FUN_037FE7B0 + strb r0, [sp, #44] ; 0x2c + cmp r6, #0 + beq _037FDF64 + sub r0, r7, #192 ; 0xc0 + cmp r0, #23 + addls pc, pc, r0, lsl #2 + b _037FDF64 + b _037FDBE4 + b _037FDA4C + b _037FDA64 + b _037FDBCC + b _037FDBD8 + b _037FDA70 + b _037FDA7C + b _037FDA88 + b _037FDB48 + b _037FDB90 + b _037FDAB0 + b _037FDABC + b _037FDAC8 + b _037FDAD4 + b _037FDBB0 + b _037FDAA4 + b _037FDAE0 + b _037FDAEC + b _037FDAF8 + b _037FDB04 + b _037FDB10 + b _037FDA58 + b _037FDBF4 + b _037FDB7C +_037FDA4C: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #4] + b _037FDF64 +_037FDA58: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #5] + b _037FDF64 +_037FDA64: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r8, #5] + b _037FDF64 +_037FDA70: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #7] + b _037FDF64 +_037FDA7C: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #18] + b _037FDF64 +_037FDA88: + ldrb r0, [r9] + bic r1, r0, #2 + ldrb r0, [sp, #44] ; 0x2c + and r0, r0, #1 + orr r0, r1, r0, lsl #1 + strb r0, [r9] + b _037FDF64 +_037FDAA4: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #21] + b _037FDF64 +_037FDAB0: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #26] + b _037FDF64 +_037FDABC: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #25] + b _037FDF64 +_037FDAC8: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #24] + b _037FDF64 +_037FDAD4: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #27] + b _037FDF64 +_037FDAE0: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #14] + b _037FDF64 +_037FDAEC: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #15] + b _037FDF64 +_037FDAF8: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #16] + b _037FDF64 +_037FDB04: + ldrb r0, [sp, #44] ; 0x2c + strb r0, [r9, #17] + b _037FDF64 +_037FDB10: + ldrb r0, [r9, #59] ; 0x3b + cmp r0, #3 + bcs _037FDF64 + ldr r1, [r9, #40] ; 0x28 + add r0, r9, r0, lsl #2 + str r1, [r0, #44] ; 0x2c + ldrb r1, [sp, #44] ; 0x2c + ldrb r0, [r9, #59] ; 0x3b + add r0, r9, r0 + strb r1, [r0, #56] ; 0x38 + ldrb r0, [r9, #59] ; 0x3b + add r0, r0, #1 + strb r0, [r9, #59] ; 0x3b + b _037FDF64 +_037FDB48: + ldrb r0, [r9] + bic r1, r0, #8 + ldrb r0, [sp, #44] ; 0x2c + and r0, r0, #1 + orr r0, r1, r0, lsl #3 + strb r0, [r9] + mov r0, r9 + mov r1, r8 + ldr r2, [sp, #40] ; 0x28 + bl FUN_037FE588 + mov r0, r9 + bl FUN_037FE54C + b _037FDF64 +_037FDB7C: + mov r0, r9 + mov r1, r8 + ldrb r2, [sp, #44] ; 0x2c + bl FUN_037FD440 + b _037FDF64 +_037FDB90: + ldrb r1, [sp, #44] ; 0x2c + ldrsb r0, [r9, #19] + add r0, r1, r0 + strb r0, [r9, #20] + ldrb r0, [r9] + orr r0, r0, #32 + strb r0, [r9] + b _037FDF64 +_037FDBB0: + ldrb r0, [r9] + bic r1, r0, #32 + ldrb r0, [sp, #44] ; 0x2c + and r0, r0, #1 + orr r0, r1, r0, lsl #5 + strb r0, [r9] + b _037FDF64 +_037FDBCC: + ldrsb r0, [sp, #44] ; 0x2c + strb r0, [r9, #19] + b _037FDF64 +_037FDBD8: + ldrsb r0, [sp, #44] ; 0x2c + strb r0, [r9, #6] + b _037FDF64 +_037FDBE4: + ldrb r0, [sp, #44] ; 0x2c + sub r0, r0, #64 ; 0x40 + strb r0, [r9, #8] + b _037FDF64 +_037FDBF4: + ldr r0, _037FDF90 ; =_03807F4C + ldr r0, [r0] + cmp r0, #0 + beq _037FDF64 + mov r0, r8 + ldrb r1, [sp, #44] ; 0x2c + bl FUN_037FD504 + b _037FDF64 +_037FDC14: + cmp r4, #0 + ldrne r2, [sp, #8] + moveq r2, sl + mov r0, r9 + mov r1, r8 + bl FUN_037FE7B0 + mov r0, r0, lsl #16 + mov r0, r0, asr #16 + cmp r6, #0 + beq _037FDF64 + cmp r7, #224 ; 0xe0 + beq _037FDC60 + cmp r7, #225 ; 0xe1 + beq _037FDC58 + cmp r7, #227 ; 0xe3 + streqh r0, [r9, #22] + b _037FDF64 +_037FDC58: + strh r0, [r8, #24] + b _037FDF64 +_037FDC60: + strh r0, [r9, #28] + b _037FDF64 +_037FDC68: + ldr r0, [r9, #40] ; 0x28 + bl FUN_037FE968 + str r0, [sp, #16] + ldr r0, [r9, #40] ; 0x28 + add r0, r0, #1 + str r0, [r9, #40] ; 0x28 + cmp r4, #0 + ldrne r2, [sp, #8] + moveq r2, sl + mov r0, r9 + mov r1, r8 + bl FUN_037FE7B0 + mov r0, r0, lsl #16 + mov r5, r0, asr #16 + mov r0, r8 + ldr r1, [sp, #16] + bl FUN_037FD504 + mov r4, r0 + cmp r6, #0 + beq _037FDF64 + cmp r4, #0 + beq _037FDF64 + sub r0, r7, #176 ; 0xb0 + cmp r0, #13 + addls pc, pc, r0, lsl #2 + b _037FDF64 + b _037FDD08 + b _037FDD10 + b _037FDD20 + b _037FDD30 + b _037FDD40 + b _037FDD5C + b _037FDD80 + b _037FDF64 + b _037FDDB8 + b _037FDDE4 + b _037FDE10 + b _037FDE3C + b _037FDE68 + b _037FDE94 +_037FDD08: + strh r5, [r4] + b _037FDF64 +_037FDD10: + ldrsh r0, [r4] + add r0, r0, r5 + strh r0, [r4] + b _037FDF64 +_037FDD20: + ldrsh r0, [r4] + sub r0, r0, r5 + strh r0, [r4] + b _037FDF64 +_037FDD30: + ldrsh r0, [r4] + mul r1, r0, r5 + strh r1, [r4] + b _037FDF64 +_037FDD40: + cmp r5, #0 + beq _037FDF64 + ldrsh r0, [r4] + mov r1, r5 + bl _s32_div_f + strh r0, [r4] + b _037FDF64 +_037FDD5C: + cmp r5, #0 + ldrgesh r0, [r4] + movge r0, r0, lsl r5 + strgeh r0, [r4] + ldrltsh r1, [r4] + rsblt r0, r5, #0 + movlt r0, r1, asr r0 + strlth r0, [r4] + b _037FDF64 +_037FDD80: + mov r6, fp + cmp r5, #0 + movlt r6, sl + rsblt r0, r5, #0 + movlt r0, r0, lsl #16 + movlt r5, r0, asr #16 + bl SND_CalcRandom + add r1, r5, #1 + mul r1, r0, r1 + mov r0, r1, asr #16 + cmp r6, #0 + rsbne r0, r0, #0 + strh r0, [r4] + b _037FDF64 +_037FDDB8: + ldrsh r0, [r4] + cmp r0, r5 + moveq r2, sl + movne r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDDE4: + ldrsh r0, [r4] + cmp r0, r5 + movge r2, sl + movlt r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDE10: + ldrsh r0, [r4] + cmp r0, r5 + movgt r2, sl + movle r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDE3C: + ldrsh r0, [r4] + cmp r0, r5 + movle r2, sl + movgt r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDE68: + ldrsh r0, [r4] + cmp r0, r5 + movlt r2, sl + movge r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDE94: + ldrsh r0, [r4] + cmp r0, r5 + movne r2, sl + moveq r2, fp + ldrb r0, [r9] + bic r1, r0, #64 ; 0x40 + and r0, r2, #255 ; 0xff + and r0, r0, #1 + orr r0, r1, r0, lsl #6 + strb r0, [r9] + b _037FDF64 +_037FDEC0: + cmp r6, #0 + beq _037FDF64 + sub r0, r7, #252 ; 0xfc + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _037FDF64 + b _037FDF10 + b _037FDEE8 + b _037FDF64 + b _037FDF5C +_037FDEE8: + ldrb r0, [r9, #59] ; 0x3b + cmp r0, #0 + beq _037FDF64 + sub r0, r0, #1 + strb r0, [r9, #59] ; 0x3b + ldrb r0, [r9, #59] ; 0x3b + add r0, r9, r0, lsl #2 + ldr r0, [r0, #44] ; 0x2c + str r0, [r9, #40] ; 0x28 + b _037FDF64 +_037FDF10: + ldrb r0, [r9, #59] ; 0x3b + cmp r0, #0 + beq _037FDF64 + sub r1, r0, #1 + add r2, r9, r1 + ldrb r0, [r2, #56] ; 0x38 + cmp r0, #0 + beq _037FDF40 + sub r0, r0, #1 + ands r0, r0, #255 ; 0xff + streqb r1, [r9, #59] ; 0x3b + beq _037FDF64 +_037FDF40: + strb r0, [r2, #56] ; 0x38 + ldrb r0, [r9, #59] ; 0x3b + sub r0, r0, #1 + add r0, r9, r0, lsl #2 + ldr r0, [r0, #44] ; 0x2c + str r0, [r9, #40] ; 0x28 + b _037FDF64 +_037FDF5C: + mvn r0, #0 + b _037FDF84 +_037FDF64: + ldr r0, [r9, #32] + cmp r0, #0 + bne _037FDF80 + ldrb r0, [r9] + mov r0, r0, lsl #27 + movs r0, r0, lsr #31 + beq _037FD6B4 +_037FDF80: + mov r0, #0 +_037FDF84: + add sp, sp, #52 ; 0x34 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_037FDF90: .word _03807F4C + + arm_func_start FUN_037FDF94 +FUN_037FDF94: ; 0x037FDF94 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #24 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, #0 + ldrb r0, [r8] + mov r0, r0, lsl #28 + movs r0, r0, lsr #31 + beq _037FDFD0 + ldr r4, [r8, #60] ; 0x3c + cmp r4, #0 + strneb r6, [r4, #8] + strneb r5, [r4, #9] +_037FDFD0: + cmp r4, #0 + bne _037FE0C4 + ldr r0, [r7, #32] + ldrh r1, [r8, #2] + mov r2, r6 + add r3, sp, #8 + bl SND_ReadInstData + cmp r0, #0 + beq _037FE18C + ldrb r0, [sp, #8] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _037FE030 + b _037FE030 + b _037FE018 + b _037FE020 + b _037FE028 + b _037FE018 +_037FE018: + ldr r1, _037FE198 ; =0x0000FFFF + b _037FE034 +_037FE020: + mov r1, #16128 ; 0x3f00 + b _037FE034 +_037FE028: + mov r1, #49152 ; 0xc000 + b _037FE034 +_037FE030: + b _037FE18C +_037FE034: + ldrh r0, [r8, #30] + and r0, r1, r0 + str r8, [sp] + ldrb r2, [r7, #4] + ldrb r1, [r8, #18] + add r1, r2, r1 + ldrb r2, [r8] + mov r2, r2, lsl #24 + mov r2, r2, lsr #31 + ldr r3, _037FE19C ; =FUN_037FE344 + bl SND_AllocExChannel + movs r4, r0 + beq _037FE18C + ldrb r0, [r8] + mov r0, r0, lsl #28 + movs r0, r0, lsr #31 + mvnne r3, #0 + ldreq r3, [sp, #48] ; 0x30 + ldr r0, [r7, #32] + str r0, [sp] + add r0, sp, #8 + str r0, [sp, #4] + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl SND_NoteOn + cmp r0, #0 + bne _037FE0B8 + mov r0, #0 + strb r0, [r4, #34] ; 0x22 + mov r0, r4 + bl SND_FreeExChannel + b _037FE18C +_037FE0B8: + ldr r0, [r8, #60] ; 0x3c + str r0, [r4, #80] ; 0x50 + str r4, [r8, #60] ; 0x3c +_037FE0C4: + ldrb r1, [r8, #14] + cmp r1, #255 ; 0xff + beq _037FE0D8 + mov r0, r4 + bl SND_SetExChannelAttack +_037FE0D8: + ldrb r1, [r8, #15] + cmp r1, #255 ; 0xff + beq _037FE0EC + mov r0, r4 + bl SND_SetExChannelDecay +_037FE0EC: + ldrb r1, [r8, #16] + cmp r1, #255 ; 0xff + beq _037FE100 + mov r0, r4 + bl SND_SetExChannelSustain +_037FE100: + ldrb r1, [r8, #17] + cmp r1, #255 ; 0xff + beq _037FE114 + mov r0, r4 + bl SND_SetExChannelRelease +_037FE114: + ldrsh r0, [r8, #22] + strh r0, [r4, #50] ; 0x32 + ldrb r0, [r8] + mov r0, r0, lsl #26 + movs r0, r0, lsr #31 + beq _037FE144 + ldrsh r1, [r4, #50] ; 0x32 + ldrb r0, [r8, #20] + sub r0, r0, r6 + mov r0, r0, lsl #22 + add r0, r1, r0, asr #16 + strh r0, [r4, #50] ; 0x32 +_037FE144: + ldrb r0, [r8, #21] + cmp r0, #0 + bne _037FE168 + ldr r0, [sp, #48] ; 0x30 + str r0, [r4, #24] + ldrb r0, [r4, #3] + bic r0, r0, #4 + strb r0, [r4, #3] + b _037FE184 +_037FE168: + mul r1, r0, r0 + ldrsh r0, [r4, #50] ; 0x32 + cmp r0, #0 + rsblt r0, r0, #0 + mul r0, r1, r0 + mov r0, r0, asr #11 + str r0, [r4, #24] +_037FE184: + mov r0, #0 + str r0, [r4, #20] +_037FE18C: + add sp, sp, #24 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_037FE198: .word 0x0000FFFF +_037FE19C: .word FUN_037FE344 + + arm_func_start FUN_037FE1A0 +FUN_037FE1A0: ; 0x037FE1A0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #0 + mov r4, #1 +_037FE1B0: + mov r0, r6 + mov r1, r5 + bl FUN_037FE460 + cmp r0, #0 + beq _037FE1D0 + mov r1, r6 + mov r2, r4 + bl FUN_037FE1E4 +_037FE1D0: + add r5, r5, #1 + cmp r5, #16 + blt _037FE1B0 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start FUN_037FE1E4 +FUN_037FE1E4: ; 0x037FE1E4 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + mov fp, r2 + ldrb r0, [r1, #5] + mov r0, r0, lsl #1 + ldr r4, _037FE340 ; =SNDi_DecibelSquareTable + ldrsh r3, [r4, r0] + ldrb r0, [sl, #4] + mov r0, r0, lsl #1 + ldrsh r2, [r4, r0] + ldrb r0, [sl, #5] + mov r0, r0, lsl #1 + ldrsh r0, [r4, r0] + add r0, r2, r0 + add r3, r3, r0 + ldrsh r2, [sl, #10] + ldrsh r0, [r1, #6] + add r2, r2, r0 + ldrsb r4, [sl, #6] + ldrb r0, [sl, #7] + mov r0, r0, lsl #6 + mul r1, r4, r0 + ldrsh r0, [sl, #12] + add r0, r0, r1, asr #7 + ldrsb r1, [sl, #8] + ldrb r4, [sl, #1] + cmp r4, #127 ; 0x7f + mulne r4, r1, r4 + addne r1, r4, #64 ; 0x40 + movne r1, r1, asr #7 + ldrsb r4, [sl, #9] + add r1, r1, r4 + mov r4, #32768 ; 0x8000 + rsb r4, r4, #0 + cmp r3, r4 + movlt r3, r4 + mov r4, #32768 ; 0x8000 + rsb r4, r4, #0 + cmp r2, r4 + movlt r2, r4 + mvn r4, #127 ; 0x7f + cmp r1, r4 + movlt r1, r4 + blt _037FE2A0 + cmp r1, #127 ; 0x7f + movgt r1, #127 ; 0x7f +_037FE2A0: + ldr r9, [sl, #60] ; 0x3c + mov r4, #1 + mov r3, r3, lsl #16 + mov r7, r3, asr #16 + mov r0, r0, lsl #16 + mov r6, r0, asr #16 + mov r0, r1, lsl #24 + mov r5, r0, asr #24 + mov r0, r2, lsl #16 + mov r8, r0, asr #16 + b _037FE32C +_037FE2CC: + strh r8, [r9, #6] + ldrb r0, [r9, #2] + cmp r0, #3 + beq _037FE328 + strh r7, [r9, #12] + strh r6, [r9, #14] + strb r5, [r9, #11] + ldrb r0, [sl, #1] + strb r0, [r9, #4] + ldrh r0, [sl, #24] + strh r0, [r9, #40] ; 0x28 + ldrh r0, [sl, #26] + strh r0, [r9, #42] ; 0x2a + ldrh r0, [sl, #28] + strh r0, [r9, #44] ; 0x2c + ldr r0, [r9, #52] ; 0x34 + cmp r0, #0 + bne _037FE328 + cmp fp, #0 + beq _037FE328 + strb r4, [r9, #34] ; 0x22 + mov r0, r9 + bl SND_ReleaseExChannel +_037FE328: + ldr r9, [r9, #80] ; 0x50 +_037FE32C: + cmp r9, #0 + bne _037FE2CC + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_037FE340: .word SNDi_DecibelSquareTable + + arm_func_start FUN_037FE344 +FUN_037FE344: ; 0x037FE344 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r2 + cmp r1, #1 + bne _037FE368 + mov r1, #0 + strb r1, [r5, #34] ; 0x22 + bl SND_FreeExChannel +_037FE368: + ldr r1, [r4, #60] ; 0x3c + cmp r1, r5 + ldreq r0, [r5, #80] ; 0x50 + streq r0, [r4, #60] ; 0x3c + beq _037FE3A0 + b _037FE394 +_037FE380: + cmp r0, r5 + ldreq r0, [r5, #80] ; 0x50 + streq r0, [r1, #80] ; 0x50 + beq _037FE3A0 + mov r1, r0 +_037FE394: + ldr r0, [r1, #80] ; 0x50 + cmp r0, #0 + bne _037FE380 +_037FE3A0: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start FUN_037FE3AC +FUN_037FE3AC: ; 0x037FE3AC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, #0 +_037FE3BC: + mov r0, r5 + mov r1, r4 + bl FUN_037FE3EC + add r4, r4, #1 + cmp r4, #16 + blt _037FE3BC + ldrb r0, [r5] + bic r0, r0, #1 + strb r0, [r5] + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start FUN_037FE3EC +FUN_037FE3EC: ; 0x037FE3EC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_037FE460 + cmp r0, #0 + beq _037FE430 + mov r1, r5 + bl FUN_037FE440 + add r3, r5, #8 + ldr r2, _037FE43C ; =_038086EC + ldrb r1, [r3, r4] + ldrb r0, [r2, r1, lsl #6] + bic r0, r0, #1 + strb r0, [r2, r1, lsl #6] + mov r0, #255 ; 0xff + strb r0, [r3, r4] +_037FE430: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_037FE43C: .word _038086EC + + arm_func_start FUN_037FE440 +FUN_037FE440: ; 0x037FE440 + stmdb sp!, {r4, lr} + mov r4, r0 + mvn r2, #0 + bl FUN_037FE588 + mov r0, r4 + bl FUN_037FE54C + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FUN_037FE460 +FUN_037FE460: ; 0x037FE460 + cmp r1, #15 + movgt r0, #0 + bxgt lr + add r0, r0, r1 + ldrb r1, [r0, #8] + cmp r1, #255 ; 0xff + moveq r0, #0 + ldrne r0, _037FE488 ; =_038086EC + addne r0, r0, r1, lsl #6 + bx lr +_037FE488: .word _038086EC + + arm_func_start FUN_037FE48C +FUN_037FE48C: ; 0x037FE48C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r6, r0 + mov r5, #0 + add r1, r6, #28 + b _037FE4B4 +_037FE4A4: + ldrh r0, [r1] + sub r0, r0, #240 ; 0xf0 + strh r0, [r1] + add r5, r5, #1 +_037FE4B4: + ldrh r0, [r6, #28] + cmp r0, #240 ; 0xf0 + bcs _037FE4A4 + mov r4, #0 + mov r7, #1 + b _037FE4F0 +_037FE4CC: + mov r0, r6 + mov r1, r7 + bl FUN_037FD548 + cmp r0, #0 + beq _037FE4EC + mov r0, r6 + bl FUN_037FE3AC + b _037FE4F8 +_037FE4EC: + add r4, r4, #1 +_037FE4F0: + cmp r4, r5 + blt _037FE4CC +_037FE4F8: + ldr r0, _037FE548 ; =SNDi_SharedWork + ldr r0, [r0] + cmp r0, #0 + beq _037FE524 + add r3, r0, #64 ; 0x40 + ldrb r1, [r6, #1] + mov r0, #36 ; 0x24 + mul r2, r1, r0 + ldr r0, [r3, r2] + add r0, r0, r4 + str r0, [r3, r2] +_037FE524: + ldrh r2, [r6, #24] + ldrh r0, [r6, #26] + mul r1, r2, r0 + ldrh r0, [r6, #28] + add r0, r0, r1, asr #8 + strh r0, [r6, #28] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_037FE548: .word SNDi_SharedWork + + arm_func_start FUN_037FE54C +FUN_037FE54C: ; 0x037FE54C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r4, [r5, #60] ; 0x3c + b _037FE56C +_037FE560: + mov r0, r4 + bl SND_FreeExChannel + ldr r4, [r4, #80] ; 0x50 +_037FE56C: + cmp r4, #0 + bne _037FE560 + mov r0, #0 + str r0, [r5, #60] ; 0x3c + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start FUN_037FE588 +FUN_037FE588: ; 0x037FE588 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r0 + mov r7, r2 + mov r2, #0 + bl FUN_037FE1E4 + ldr r6, [r4, #60] ; 0x3c + and r5, r7, #255 ; 0xff + mov r4, #1 + b _037FE5E4 +_037FE5B0: + mov r0, r6 + bl SND_IsExChannelActive + cmp r0, #0 + beq _037FE5E0 + cmp r7, #0 + blt _037FE5D4 + mov r0, r6 + mov r1, r5 + bl SND_SetExChannelRelease +_037FE5D4: + strb r4, [r6, #34] ; 0x22 + mov r0, r6 + bl SND_ReleaseExChannel +_037FE5E0: + ldr r6, [r6, #80] ; 0x50 +_037FE5E4: + cmp r6, #0 + bne _037FE5B0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + + arm_func_start FUN_037FE5F8 +FUN_037FE5F8: ; 0x037FE5F8 + stmdb sp!, {r4, lr} + ldrb r2, [r0] + bic r2, r2, #4 + strb r2, [r0] + str r1, [r0, #32] + mov r1, #120 ; 0x78 + strh r1, [r0, #24] + mov r1, #256 ; 0x100 + strh r1, [r0, #26] + mov r1, #240 ; 0xf0 + strh r1, [r0, #28] + mov r1, #127 ; 0x7f + strb r1, [r0, #5] + mov r3, #0 + strh r3, [r0, #6] + mov r1, #64 ; 0x40 + strb r1, [r0, #4] + mov r2, #255 ; 0xff +_037FE640: + add r1, r0, r3 + strb r2, [r1, #8] + add r3, r3, #1 + cmp r3, #16 + blt _037FE640 + ldr r2, _037FE6A4 ; =SNDi_SharedWork + ldr r3, [r2] + cmp r3, #0 + beq _037FE69C + mov r4, #0 + ldrb ip, [r0, #1] + mov r1, #36 ; 0x24 + mla r3, ip, r1, r3 + str r4, [r3, #64] ; 0x40 + mvn lr, #0 +_037FE67C: + ldr r3, [r2] + ldrb ip, [r0, #1] + mla r3, ip, r1, r3 + add r3, r3, r4, lsl #1 + strh lr, [r3, #32] + add r4, r4, #1 + cmp r4, #16 + blt _037FE67C +_037FE69C: + ldmia sp!, {r4, lr} + bx lr +_037FE6A4: .word SNDi_SharedWork + + arm_func_start FUN_037FE6A8 +FUN_037FE6A8: ; 0x037FE6A8 + str r1, [r0, #36] ; 0x24 + ldr r1, [r0, #36] ; 0x24 + add r1, r1, r2 + str r1, [r0, #40] ; 0x28 + bx lr + + arm_func_start FUN_037FE6BC +FUN_037FE6BC: ; 0x037FE6BC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + str r0, [r4, #36] ; 0x24 + str r0, [r4, #40] ; 0x28 + ldrb r1, [r4] + orr r1, r1, #2 + strb r1, [r4] + ldrb r1, [r4] + bic r1, r1, #4 + strb r1, [r4] + ldrb r1, [r4] + bic r1, r1, #8 + strb r1, [r4] + ldrb r1, [r4] + bic r1, r1, #16 + strb r1, [r4] + ldrb r1, [r4] + bic r1, r1, #32 + strb r1, [r4] + ldrb r1, [r4] + orr r1, r1, #64 ; 0x40 + strb r1, [r4] + ldrb r1, [r4] + bic r1, r1, #128 ; 0x80 + strb r1, [r4] + strb r0, [r4, #59] ; 0x3b + strh r0, [r4, #2] + mov r1, #64 ; 0x40 + strb r1, [r4, #18] + mov r2, #127 ; 0x7f + strb r2, [r4, #4] + strb r2, [r4, #5] + strh r0, [r4, #10] + strb r0, [r4, #8] + strb r0, [r4, #9] + strb r0, [r4, #6] + strh r0, [r4, #12] + mov r1, #255 ; 0xff + strb r1, [r4, #14] + strb r1, [r4, #15] + strb r1, [r4, #16] + strb r1, [r4, #17] + strb r2, [r4, #1] + mov r1, #2 + strb r1, [r4, #7] + mov r1, #60 ; 0x3c + strb r1, [r4, #20] + strb r0, [r4, #21] + strh r0, [r4, #22] + strb r0, [r4, #19] + ldr r0, _037FE7AC ; =0x0000FFFF + strh r0, [r4, #30] + add r0, r4, #24 + bl SND_InitLfoParam + mov r0, #0 + str r0, [r4, #32] + str r0, [r4, #60] ; 0x3c + ldmia sp!, {r4, lr} + bx lr +_037FE7AC: .word 0x0000FFFF + + arm_func_start FUN_037FE7B0 +FUN_037FE7B0: ; 0x037FE7B0 + stmdb sp!, {r4, r5, r6, lr} + mov r4, r0 + mov r6, r1 + cmp r2, #4 + addls pc, pc, r2, lsl #2 + b _037FE86C + b _037FE7DC + b _037FE7F8 + b _037FE804 + b _037FE83C + b _037FE810 +_037FE7DC: + ldr r0, [r4, #40] ; 0x28 + bl FUN_037FE968 + mov r5, r0 + ldr r0, [r4, #40] ; 0x28 + add r0, r0, #1 + str r0, [r4, #40] ; 0x28 + b _037FE86C +_037FE7F8: + bl FUN_037FE918 + mov r5, r0 + b _037FE86C +_037FE804: + bl FUN_037FE878 + mov r5, r0 + b _037FE86C +_037FE810: + ldr r0, [r4, #40] ; 0x28 + bl FUN_037FE968 + mov r1, r0 + ldr r0, [r4, #40] ; 0x28 + add r0, r0, #1 + str r0, [r4, #40] ; 0x28 + mov r0, r6 + bl FUN_037FD504 + cmp r0, #0 + ldrnesh r5, [r0] + b _037FE86C +_037FE83C: + bl FUN_037FE918 + mov r5, r0, lsl #16 + mov r0, r4 + bl FUN_037FE918 + mov r0, r0, lsl #16 + mov r4, r0, asr #16 + bl SND_CalcRandom + sub r1, r4, r5, asr #16 + add r1, r1, #1 + mul r1, r0, r1 + mov r0, r1, asr #16 + add r5, r0, r5, asr #16 +_037FE86C: + mov r0, r5 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start FUN_037FE878 +FUN_037FE878: ; 0x037FE878 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #0 + add r4, r6, #40 ; 0x28 +_037FE888: + ldr r0, [r6, #40] ; 0x28 + bl FUN_037FE968 + ldr r1, [r4] + add r1, r1, #1 + str r1, [r4] + and r1, r0, #127 ; 0x7f + orr r5, r1, r5, lsl #7 + ands r0, r0, #128 ; 0x80 + bne _037FE888 + mov r0, r5 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start FUN_037FE8B8 +FUN_037FE8B8: ; 0x037FE8B8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, [r4, #40] ; 0x28 + bl FUN_037FE968 + mov r5, r0 + ldr r0, [r4, #40] ; 0x28 + add r0, r0, #1 + str r0, [r4, #40] ; 0x28 + ldr r0, [r4, #40] ; 0x28 + bl FUN_037FE968 + ldr r1, [r4, #40] ; 0x28 + add r1, r1, #1 + str r1, [r4, #40] ; 0x28 + orr r5, r5, r0, lsl #8 + ldr r0, [r4, #40] ; 0x28 + bl FUN_037FE968 + ldr r1, [r4, #40] ; 0x28 + add r1, r1, #1 + str r1, [r4, #40] ; 0x28 + orr r0, r5, r0, lsl #16 + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start FUN_037FE918 +FUN_037FE918: ; 0x037FE918 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #40] ; 0x28 + bl FUN_037FE968 + mov r4, r0 + ldr r0, [r5, #40] ; 0x28 + add r0, r0, #1 + str r0, [r5, #40] ; 0x28 + ldr r0, [r5, #40] ; 0x28 + bl FUN_037FE968 + ldr r1, [r5, #40] ; 0x28 + add r1, r1, #1 + str r1, [r5, #40] ; 0x28 + orr r0, r4, r0, lsl #8 + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start FUN_037FE968 +FUN_037FE968: ; 0x037FE968 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _037FE9B0 ; =_03807F50 + ldr r1, [r0] + cmp r4, r1 + bcc _037FE98C + ldr r0, [r0, #4] + cmp r4, r0 + bcc _037FE994 +_037FE98C: + mov r0, r4 + bl FUN_037FE9B8 +_037FE994: + ldr r0, _037FE9B0 ; =_03807F50 + ldr r0, [r0] + sub r1, r4, r0 + ldr r0, _037FE9B4 ; =_03807F58 + ldrb r0, [r0, r1] + ldmia sp!, {r4, lr} + bx lr +_037FE9B0: .word _03807F50 +_037FE9B4: .word _03807F58 + + arm_func_start FUN_037FE9B8 +FUN_037FE9B8: ; 0x037FE9B8 + bic r2, r0, #3 + ldr r0, _037FE9F0 ; =_03807F50 + str r2, [r0] + add r1, r2, #16 + str r1, [r0, #4] + ldr r1, [r2] + str r1, [r0, #8] + ldr r1, [r2, #4] + str r1, [r0, #12] + ldr r1, [r2, #8] + str r1, [r0, #16] + ldr r1, [r2, #12] + str r1, [r0, #20] + bx lr +_037FE9F0: .word _03807F50 |