added apex audio system
[gbajam21] / libs / aas / AAS_ASM.s
diff --git a/libs/aas/AAS_ASM.s b/libs/aas/AAS_ASM.s
new file mode 100644 (file)
index 0000000..bf99d4a
--- /dev/null
@@ -0,0 +1,299 @@
+@ Copyright (c) 2003-2021 James Daniels
+@ Distributed under the MIT License
+@ license terms: see LICENSE file in root or http://opensource.org/licenses/MIT
+
+.TEXT
+.SECTION    .text,"ax",%progbits
+.ALIGN
+.ARM
+
+.GLOBAL AAS_DoDMA3
+
+.GLOBAL AAS_MixAudio_SetMode_Normal
+.GLOBAL AAS_MixAudio_SetMode_Boost
+.GLOBAL AAS_MixAudio_SetMode_BoostAndClip
+
+.GLOBAL AAS_MixAudio_SetMaxChans_2
+.GLOBAL AAS_MixAudio_SetMaxChans_4
+.GLOBAL AAS_MixAudio_SetMaxChans_8
+
+.GLOBAL _AAS_vol_lookup
+
+
+@ Volume lookup table. -1 means use multiply, 0 to 7 means use bit shift.
+
+_AAS_vol_lookup:
+       .byte 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, 4
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+       .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7
+
+_ma_mul_r5_r0_r3:
+       .word 0x00000010
+       mul r5,r0,r3
+_ma_mov_r5_r0_lsl_0:
+       .word 0x00000001
+       mov r5,r0,lsl #0
+_ma_mlane_r5_r0_r3_r5:
+       .word 0x00000011
+       mlane r5,r0,r3,r5
+_ma_add_r5_r5_r0_lsl_0:
+       .word 0x00000011
+       add r5,r5,r0,lsl #0
+
+
+_ma_merge_noclip_start:
+       @ ma_again:
+
+       @ Merge
+       ldr r14,[sp,#24]
+       and r5,r14,r5,lsr #8
+       and r6,r14,r6,lsr #8
+       and r7,r14,r7,lsr #8
+       and r8,r14,r8,lsr #8
+       and r9,r14,r9,lsr #8
+       and r10,r14,r10,lsr #8
+       and r11,r14,r11,lsr #8
+       and r12,r14,r12,lsr #8
+       add r5,r5,r6,lsl #8
+       add r6,r7,r8,lsl #8
+       add r7,r9,r10,lsl #8
+       add r8,r11,r12,lsl #8
+       
+       @ Store
+       stmia r4!,{r5-r8}
+       
+       @ Loop
+       subs r14,r14,#0x2000000
+       .word 0xdaffffa5  @ ble ma_end
+       
+       @ ma_start:
+       str r14,[sp,#24]
+_ma_merge_noclip_end:
+
+
+_ma_merge_boostnoclip_start:
+       @ ma_again:
+
+       @ Merge
+       ldr r14,[sp,#24]
+       and r5,r14,r5,lsr #7
+       and r6,r14,r6,lsr #7
+       and r7,r14,r7,lsr #7
+       and r8,r14,r8,lsr #7
+       and r9,r14,r9,lsr #7
+       and r10,r14,r10,lsr #7
+       and r11,r14,r11,lsr #7
+       and r12,r14,r12,lsr #7
+       add r5,r5,r6,lsl #8
+       add r6,r7,r8,lsl #8
+       add r7,r9,r10,lsl #8
+       add r8,r11,r12,lsl #8
+       
+       @ Store
+       stmia r4!,{r5-r8}
+       
+       @ Loop
+       subs r14,r14,#0x2000000
+       .word 0xdaffffa5  @ ble ma_end
+       
+       @ ma_start:
+       str r14,[sp,#24]
+_ma_merge_boostnoclip_end:
+
+
+_ma_merge_clip_start:
+       _ma_mask_0x80808080: .word 0x80808080
+
+       .word 0,0 @ padding
+
+       @ ma_again:
+       @ Merge
+       ldr r14,[sp,#24]
+       .word 0xe51f2018  @ ldr r2,_ma_mask_0x80808080
+       
+       and r0,r14,r5,lsr #8
+       and r1,r14,r6,lsr #8
+       add r0,r0,r1,lsl #8
+       and r5,r14,r5,lsr #7
+       and r6,r14,r6,lsr #7
+       add r5,r5,r6,lsl #8
+       eor r0,r0,r5
+       ands r0,r2,r0
+       beq no_clip1  @ perhaps not worthwhile?
+       and r1,r2,r5
+       sub r1,r2,r1,lsr #7
+       sub r0,r0,r0,lsr #7
+       orr r0,r0,r0,lsl #1
+       bic r5,r5,r0
+       and r1,r1,r0
+       orr r5,r5,r1
+no_clip1:
+
+       and r0,r14,r7,lsr #8
+       and r1,r14,r8,lsr #8
+       add r0,r0,r1,lsl #8
+       and r7,r14,r7,lsr #7
+       and r8,r14,r8,lsr #7
+       add r6,r7,r8,lsl #8
+       eor r0,r0,r6
+       ands r0,r2,r0
+       beq no_clip2  @ perhaps not worthwhile?
+       and r1,r2,r6
+       sub r1,r2,r1,lsr #7
+       sub r0,r0,r0,lsr #7
+       orr r0,r0,r0,lsl #1
+       bic r6,r6,r0
+       and r1,r1,r0
+       orr r6,r6,r1
+no_clip2:
+
+       and r0,r14,r9,lsr #8
+       and r1,r14,r10,lsr #8
+       add r0,r0,r1,lsl #8
+       and r9,r14,r9,lsr #7
+       and r10,r14,r10,lsr #7
+       add r7,r9,r10,lsl #8
+       eor r0,r0,r7
+       ands r0,r2,r0
+       beq no_clip3  @ perhaps not worthwhile?
+       and r1,r2,r7
+       sub r1,r2,r1,lsr #7
+       sub r0,r0,r0,lsr #7
+       orr r0,r0,r0,lsl #1
+       bic r7,r7,r0
+       and r1,r1,r0
+       orr r7,r7,r1
+no_clip3:
+
+       and r0,r14,r11,lsr #8
+       and r1,r14,r12,lsr #8
+       add r0,r0,r1,lsl #8
+       and r11,r14,r11,lsr #7
+       and r12,r14,r12,lsr #7
+       add r8,r11,r12,lsl #8
+       eor r0,r0,r8
+       ands r0,r2,r0
+       beq no_clip4  @ perhaps not worthwhile?
+       and r1,r2,r8
+       sub r1,r2,r1,lsr #7
+       sub r0,r0,r0,lsr #7
+       orr r0,r0,r0,lsl #1
+       bic r8,r8,r0
+       and r1,r1,r0
+       orr r8,r8,r1
+no_clip4:
+
+       @ Store
+       stmia r4!,{r5-r8}
+       
+       @ Loop
+       subs r14,r14,#0x2000000
+       .word 0xdaffff6d  @ ble ma_end
+       
+       @ ma_start:
+       str r14,[sp,#24]
+_ma_merge_clip_end:
+
+_ma_clip:
+add r12,pc,#0x540  @ adr r12,ma_buffer_start
+.word 0xea000091  @ b ma_start
+add r0,pc,#0x248  @ adr r0,ma_again
+
+_ma_noclip:
+add r12,pc,#0x460  @ adr r12,ma_buffer_start
+.word 0xea000059  @ b ma_start
+add r0,pc,#0x23c  @ adr r0,ma_again
+
+
+AAS_MixAudio_SetMode_BoostAndClip:
+       adr r12,_ma_clip
+       adr r0,_ma_merge_clip_start
+       mov r2,#((_ma_merge_clip_end-_ma_merge_clip_start)/4)
+
+do_mods:
+       ldr r1,=_AAS_MixAudio_mod4
+       add r2,r2,#0x84000000
+       mov r3,#0x04000000
+       add r3,r3,#0xd4
+       stmia r3,{r0-r2}
+       ldmia r12,{r1-r3}
+       ldr r0,=_AAS_MixAudio_mod1
+       str r1,[r0]
+       ldr r0,=_AAS_MixAudio_mod2
+       str r2,[r0]
+       ldr r0,=_AAS_MixAudio_mod3
+       str r3,[r0]
+       bx lr
+
+
+AAS_MixAudio_SetMode_Normal:
+       adr r12,_ma_noclip
+       adr r0,_ma_merge_noclip_start
+       mov r2,#((_ma_merge_noclip_end-_ma_merge_noclip_start)/4)
+       b do_mods
+       
+       
+AAS_MixAudio_SetMode_Boost:
+       adr r12,_ma_noclip
+       adr r0,_ma_merge_boostnoclip_start
+       mov r2,#((_ma_merge_boostnoclip_end-_ma_merge_boostnoclip_start)/4)
+       b do_mods
+       
+
+_ma_2ch:
+mov r6,#0x10000000
+mov r10,#2
+mov r14,#2
+sub r1,r1,#(20*2)
+
+_ma_4ch:
+mov r6,#0x30000000
+mov r10,#4
+mov r14,#4
+sub r1,r1,#(20*4)
+
+_ma_8ch:
+mov r6,#0x70000000
+mov r10,#8
+mov r14,#8
+sub r1,r1,#(20*8)
+
+
+AAS_MixAudio_SetMaxChans_4:
+       adr r12,_ma_4ch
+
+do_mods2:
+       ldmia r12,{r0-r3}
+       ldr r12,=_AAS_MixAudio_mod5
+       str r0,[r12]
+       ldr r12,=_AAS_MixAudio_mod6
+       str r1,[r12]
+       ldr r12,=_AAS_MixAudio_mod7
+       str r2,[r12]
+       ldr r12,=_AAS_MixAudio_mod8
+       str r3,[r12]
+       bx lr
+
+
+AAS_MixAudio_SetMaxChans_8:
+       adr r12,_ma_8ch
+       b do_mods2
+       
+       
+AAS_MixAudio_SetMaxChans_2:
+       adr r12,_ma_2ch
+       b do_mods2
+
+.pool
+
+
+AAS_DoDMA3:
+       mov r3,#0x04000000
+       add r3,r3,#0xd4
+       stmia r3,{r0-r2}
+       bx lr