From 76931b997aecbab55162aac51cc0acf1dfaad692 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 14 Dec 2024 19:25:43 +0100 Subject: [PATCH] sync m4a_1.s with pokeemerald and move to src --- Makefile | 11 +- asm/m4a_1.s | 1647 ----------------------- include/asm/constants/m4a_constants.inc | 174 ++- ld_script.txt | 2 +- 4 files changed, 127 insertions(+), 1707 deletions(-) delete mode 100644 asm/m4a_1.s diff --git a/Makefile b/Makefile index 51c25f931..2109838df 100755 --- a/Makefile +++ b/Makefile @@ -106,10 +106,12 @@ MID_BUILDDIR = $(BUILD_DIR)/$(MID_SUBDIR) C_SOURCES := $(wildcard src/*.c) ASM_SOURCES := $(wildcard asm/*.s data/*.s) +C_ASM_SOURCES := $(wildcard src/*.s) C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o)) ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o)) -ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) +C_ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_ASM_SOURCES:%.s=%.o)) +ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) $(C_ASM_OBJECTS) SUBDIRS := $(sort $(dir $(ALL_OBJECTS))) @@ -233,6 +235,13 @@ $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $(ASM_BUILDDIR)/%.d: $(ASM_SUBDIR)/%.s @$(call scaninc,$(INCLUDE_PATHS)) + +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s + @$(CPP) -x assembler-with-cpp $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.s + $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s + +$(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.s + @$(call scaninc,$(INCLUDE_PATHS)) libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) diff --git a/asm/m4a_1.s b/asm/m4a_1.s deleted file mode 100644 index b6fe6f95c..000000000 --- a/asm/m4a_1.s +++ /dev/null @@ -1,1647 +0,0 @@ - #include "asm/macros.inc" - #include "asm/constants/gba_constants.inc" - #include "asm/constants/m4a_constants.inc" - - .syntax unified - - .text - - thumb_func_start umul3232H32 -umul3232H32: - adr r2, __umul3232H32 - bx r2 - .arm -__umul3232H32: - umull r2, r3, r0, r1 - add r0, r3, 0 - bx lr - thumb_func_end umul3232H32 - - thumb_func_start SoundMain -SoundMain: - ldr r0, lt_SOUND_INFO_PTR - ldr r0, [r0] - ldr r2, lt_ID_NUMBER - ldr r3, [r0, o_SoundInfo_ident] - cmp r2, r3 - beq SoundMain_1 - bx lr @ Exit the function if ident doesn't match ID_NUMBER. -SoundMain_1: - adds r3, 1 - str r3, [r0, o_SoundInfo_ident] - push {r4-r7,lr} - mov r1, r8 - mov r2, r9 - mov r3, r10 - mov r4, r11 - push {r0-r4} - sub sp, 0x18 - ldrb r1, [r0, o_SoundInfo_maxLines] - cmp r1, 0 @ if maxLines is 0, there is no maximum - beq SoundMain_3 - ldr r2, lt_REG_VCOUNT - ldrb r2, [r2] - cmp r2, VCOUNT_VBLANK - bhs SoundMain_2 - adds r2, TOTAL_SCANLINES -SoundMain_2: - adds r1, r2 -SoundMain_3: - str r1, [sp, 0x14] - ldr r3, [r0, o_SoundInfo_func] - cmp r3, 0 - beq SoundMain_4 - ldr r0, [r0, o_SoundInfo_intp] - bl call_r3 - ldr r0, [sp, 0x18] -SoundMain_4: - ldr r3, [r0, o_SoundInfo_CgbSound] - bl call_r3 - ldr r0, [sp, 0x18] - ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank] - mov r8, r3 - ldr r5, lt_o_SoundInfo_pcmBuffer - adds r5, r0 - ldrb r4, [r0, o_SoundInfo_pcmDmaCounter] - subs r7, r4, 1 - bls SoundMain_5 - ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] - subs r1, r7 - mov r2, r8 - muls r2, r1 - adds r5, r2 -SoundMain_5: - str r5, [sp, 0x8] - ldr r6, lt_PCM_DMA_BUF_SIZE - ldr r3, lt_SoundMainRAM_Buffer - bx r3 - - .align 2, 0 -lt_SOUND_INFO_PTR: .word SOUND_INFO_PTR -lt_ID_NUMBER: .word ID_NUMBER -lt_SoundMainRAM_Buffer: .word SoundMainRAM_Buffer + 1 -lt_REG_VCOUNT: .word REG_VCOUNT -lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer -lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE - thumb_func_end SoundMain - - thumb_func_start SoundMainRAM -SoundMainRAM: - ldrb r3, [r0, o_SoundInfo_reverb] - cmp r3, 0 - beq SoundMainRAM_NoReverb - adr r1, SoundMainRAM_Reverb - bx r1 - .arm -SoundMainRAM_Reverb: - cmp r4, 0x2 - addeq r7, r0, o_SoundInfo_pcmBuffer - addne r7, r5, r8 - mov r4, r8 -_080AE314: - ldrsb r0, [r5, r6] - ldrsb r1, [r5] - add r0, r0, r1 - ldrsb r1, [r7, r6] - add r0, r0, r1 - ldrsb r1, [r7], 0x1 - add r0, r0, r1 - mul r1, r0, r3 - mov r0, r1, asr 9 - tst r0, 0x80 - addne r0, r0, 0x1 - strb r0, [r5, r6] - strb r0, [r5], 0x1 - subs r4, r4, 0x1 - bgt _080AE314 - add r0, pc, 0x2F - bx r0 - .thumb -SoundMainRAM_NoReverb: - movs r0, 0 - mov r1, r8 - adds r6, r5 - lsrs r1, 3 - bcc SoundMainRAM_NoReverb_Ok - stm r5!, {r0} - stm r6!, {r0} -SoundMainRAM_NoReverb_Ok: - lsrs r1, 1 - bcc SoundMainRAM_NoReverb_Loop - stm r5!, {r0} - stm r6!, {r0} - stm r5!, {r0} - stm r6!, {r0} -SoundMainRAM_NoReverb_Loop: - stm r5!, {r0} - stm r6!, {r0} - stm r5!, {r0} - stm r6!, {r0} - stm r5!, {r0} - stm r6!, {r0} - stm r5!, {r0} - stm r6!, {r0} - subs r1, 0x1 - bgt SoundMainRAM_NoReverb_Loop -_080AE386: - ldr r4, [sp, 0x18] - ldr r0, [r4, o_SoundInfo_divFreq] - mov r12, r0 - ldrb r0, [r4, o_SoundInfo_maxChans] - adds r4, o_SoundInfo_chans -SoundMainRAM_ChanLoop: - str r0, [sp, 0x4] - ldr r3, [r4, o_SoundChannel_wav] - ldr r0, [sp, 0x14] - cmp r0, 0 - beq _080AE3B0 - ldr r1, =REG_VCOUNT - ldrb r1, [r1] - cmp r1, VCOUNT_VBLANK - bhs _080AE3A4 - adds r1, TOTAL_SCANLINES -_080AE3A4: - cmp r1, r0 - bcc _080AE3B0 - b _080AE682 - - .pool - -_080AE3B0: - ldrb r6, [r4, o_SoundChannel_status] - movs r0, 0xC7 - tst r0, r6 - bne _080AE3BA - b _080AE678 -_080AE3BA: - movs r0, 0x80 - tst r0, r6 - beq _080AE3EA - movs r0, 0x40 - tst r0, r6 - bne _080AE3FA - movs r6, 0x3 - strb r6, [r4, o_SoundChannel_status] - adds r0, r3, 0 - adds r0, 0x10 - str r0, [r4, o_SoundChannel_cp] - ldr r0, [r3, 0xC] - str r0, [r4, o_SoundChannel_ct] - movs r5, 0 - strb r5, [r4, o_SoundChannel_ev] - str r5, [r4, o_SoundChannel_fw] - ldrb r2, [r3, 0x3] - movs r0, 0xC0 - tst r0, r2 - beq _080AE442 - movs r0, 0x10 - orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] - b _080AE442 -_080AE3EA: - ldrb r5, [r4, o_SoundChannel_ev] - movs r0, 0x4 - tst r0, r6 - beq _080AE400 - ldrb r0, [r4, o_SoundChannel_iel] - subs r0, 0x1 - strb r0, [r4, o_SoundChannel_iel] - bhi _080AE450 -_080AE3FA: - movs r0, 0 - strb r0, [r4, o_SoundChannel_status] - b _080AE678 -_080AE400: - movs r0, 0x40 - tst r0, r6 - beq _080AE420 - ldrb r0, [r4, o_SoundChannel_release] - muls r5, r0 - lsrs r5, 8 - ldrb r0, [r4, o_SoundChannel_iev] - cmp r5, r0 - bhi _080AE450 -_080AE412: - ldrb r5, [r4, o_SoundChannel_iev] - cmp r5, 0 - beq _080AE3FA - movs r0, 0x4 - orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] - b _080AE450 -_080AE420: - movs r2, 0x3 - ands r2, r6 - cmp r2, 0x2 - bne _080AE43E - ldrb r0, [r4, o_SoundChannel_decay] - muls r5, r0 - lsrs r5, 8 - ldrb r0, [r4, o_SoundChannel_sustain] - cmp r5, r0 - bhi _080AE450 - adds r5, r0, 0 - beq _080AE412 - subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] - b _080AE450 -_080AE43E: - cmp r2, 0x3 - bne _080AE450 -_080AE442: - ldrb r0, [r4, o_SoundChannel_attack] - adds r5, r0 - cmp r5, 0xFF - bcc _080AE450 - movs r5, 0xFF - subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] -_080AE450: - strb r5, [r4, o_SoundChannel_ev] - ldr r0, [sp, 0x18] - ldrb r0, [r0, o_SoundChannel_release] - adds r0, 0x1 - muls r0, r5 - lsrs r5, r0, 4 - ldrb r0, [r4, o_SoundChannel_rightVolume] - muls r0, r5 - lsrs r0, 8 - strb r0, [r4, o_SoundChannel_er] - ldrb r0, [r4, o_SoundChannel_leftVolume] - muls r0, r5 - lsrs r0, 8 - strb r0, [r4, o_SoundChannel_el] - movs r0, 0x10 - ands r0, r6 - str r0, [sp, 0x10] - beq _080AE484 - adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r3, 0x8] - adds r0, r1 - str r0, [sp, 0xC] - ldr r0, [r3, 0xC] - subs r0, r1 - str r0, [sp, 0x10] -_080AE484: - ldr r5, [sp, 0x8] - ldr r2, [r4, o_SoundChannel_ct] - ldr r3, [r4, o_SoundChannel_cp] - adr r0, _080AE490 - bx r0 - .arm -_080AE490: - str r8, [sp] - ldrb r10, [r4, o_SoundChannel_er] - ldrb r11, [r4, o_SoundChannel_el] - mov r10, r10, lsl 16 - mov r11, r11, lsl 16 - ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x8 - beq _080AE5D0 -_080AE4B0: - cmp r2, 0x4 - ble _080AE520 - subs r2, r2, r8 - movgt lr, 0 - bgt _080AE4DC - mov lr, r8 - add r2, r2, r8 - sub r8, r2, 0x4 - sub lr, lr, r8 - ands r2, r2, 0x3 - moveq r2, 0x4 -_080AE4DC: - ldr r6, [r5] - ldr r7, [r5, 0x630] -_080AE4E4: - ldrsb r0, [r3], 0x1 - mul r1, r10, r0 - bic r1, r1, 0xFF0000 - add r6, r1, r6, ror 8 - mul r1, r11, r0 - bic r1, r1, 0xFF0000 - add r7, r1, r7, ror 8 - adds r5, r5, 0x40000000 - bcc _080AE4E4 - str r7, [r5, 0x630] - str r6, [r5], 0x4 - subs r8, r8, 0x4 - bgt _080AE4DC - adds r8, r8, lr - beq _080AE664 -_080AE520: - ldr r6, [r5] - ldr r7, [r5, 0x630] -_080AE528: - ldrsb r0, [r3], 0x1 - mul r1, r10, r0 - bic r1, r1, 0xFF0000 - add r6, r1, r6, ror 8 - mul r1, r11, r0 - bic r1, r1, 0xFF0000 - add r7, r1, r7, ror 8 - subs r2, r2, 0x1 - beq _080AE598 -_080AE54C: - adds r5, r5, 0x40000000 - bcc _080AE528 - str r7, [r5, 0x630] - str r6, [r5], 0x4 - subs r8, r8, 0x4 - bgt _080AE4B0 - b _080AE664 -_080AE568: - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _080AE58C - ldr r3, [sp, 0x14] - rsb r9, r2, 0 -_080AE57C: - adds r2, r0, r2 - bgt _080AE634 - sub r9, r9, r0 - b _080AE57C -_080AE58C: - ldmia sp!, {r4,r12} - mov r2, 0 - b _080AE5A8 -_080AE598: - ldr r2, [sp, 0x10] - cmp r2, 0 - ldrne r3, [sp, 0xC] - bne _080AE54C -_080AE5A8: - strb r2, [r4, o_SoundChannel_status] - mov r0, r5, lsr 30 - bic r5, r5, 0xC0000000 - rsb r0, r0, 0x3 - mov r0, r0, lsl 3 - mov r6, r6, ror r0 - mov r7, r7, ror r0 - str r7, [r5, 0x630] - str r6, [r5], 0x4 - b _080AE66C -_080AE5D0: - stmdb sp!, {r4,r12} - ldr lr, [r4, o_SoundChannel_fw] - ldr r1, [r4, o_SoundChannel_freq] - mul r4, r12, r1 - ldrsb r0, [r3] - ldrsb r1, [r3, 0x1]! - sub r1, r1, r0 -_080AE5EC: - ldr r6, [r5] - ldr r7, [r5, 0x630] -_080AE5F4: - mul r9, lr, r1 - add r9, r0, r9, asr 23 - mul r12, r10, r9 - bic r12, r12, 0xFF0000 - add r6, r12, r6, ror 8 - mul r12, r11, r9 - bic r12, r12, 0xFF0000 - add r7, r12, r7, ror 8 - add lr, lr, r4 - movs r9, lr, lsr 23 - beq _080AE640 - bic lr, lr, 0x3F800000 - subs r2, r2, r9 - ble _080AE568 - subs r9, r9, 0x1 - addeq r0, r0, r1 -_080AE634: - ldrsbne r0, [r3, r9]! - ldrsb r1, [r3, 0x1]! - sub r1, r1, r0 -_080AE640: - adds r5, r5, 0x40000000 - bcc _080AE5F4 - str r7, [r5, 0x630] - str r6, [r5], 0x4 - subs r8, r8, 0x4 - bgt _080AE5EC - sub r3, r3, 0x1 - ldmia sp!, {r4,r12} - str lr, [r4, o_SoundChannel_fw] -_080AE664: - str r2, [r4, o_SoundChannel_ct] - str r3, [r4, o_SoundChannel_cp] -_080AE66C: - ldr r8, [sp] - add r0, pc, 0x1 - bx r0 - .thumb -_080AE678: - ldr r0, [sp, 0x4] - subs r0, 0x1 - ble _080AE682 - adds r4, SoundChannel_size - b SoundMainRAM_ChanLoop -_080AE682: - ldr r0, [sp, 0x18] - ldr r3, =ID_NUMBER - str r3, [r0] - add sp, 0x1C - pop {r0-r7} - mov r8, r0 - mov r9, r1 - mov r10, r2 - mov r11, r3 - pop {r3} - -call_r3: - bx r3 - .pool - thumb_func_end SoundMainRAM - - thumb_func_start SoundMainBTM -SoundMainBTM: - mov r12, r4 - movs r1, 0 - movs r2, 0 - movs r3, 0 - movs r4, 0 - stm r0!, {r1-r4} - stm r0!, {r1-r4} - stm r0!, {r1-r4} - stm r0!, {r1-r4} - mov r4, r12 - bx lr - thumb_func_end SoundMainBTM - - thumb_func_start RealClearChain -RealClearChain: - ldr r3, [r0, 0x2C] - cmp r3, 0 - beq _080AE6D2 - ldr r1, [r0, 0x34] - ldr r2, [r0, 0x30] - cmp r2, 0 - beq _080AE6C6 - str r1, [r2, 0x34] - b _080AE6C8 -_080AE6C6: - str r1, [r3, 0x20] -_080AE6C8: - cmp r1, 0 - beq _080AE6CE - str r2, [r1, 0x30] -_080AE6CE: - movs r1, 0 - str r1, [r0, 0x2C] -_080AE6D2: - bx lr - thumb_func_end RealClearChain - - thumb_func_start ply_fine -ply_fine: - push {r4,r5,lr} - adds r5, r1, 0 - ldr r4, [r5, o_MusicPlayerTrack_chan] - cmp r4, 0 - beq ply_fine_done -ply_fine_loop: - ldrb r1, [r4] - movs r0, 0xC7 - tst r0, r1 - beq ply_fine_ok - movs r0, 0x40 - orrs r1, r0 - strb r1, [r4] -ply_fine_ok: - adds r0, r4, 0 - bl RealClearChain - ldr r4, [r4, 0x34] - cmp r4, 0 - bne ply_fine_loop -ply_fine_done: - movs r0, 0 - strb r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ply_fine - - thumb_func_start MPlayJumpTableCopy -MPlayJumpTableCopy: - mov r12, lr - movs r1, 0x24 - ldr r2, lt_MPlayJumpTableTemplate -MPlayJumpTableCopy_Loop: - ldr r3, [r2] - bl chk_adr_r2 - stm r0!, {r3} - adds r2, 0x4 - subs r1, 0x1 - bgt MPlayJumpTableCopy_Loop - bx r12 - thumb_func_end MPlayJumpTableCopy - - .align 2, 0 - .thumb_func -ldrb_r3_r2: - ldrb r3, [r2] - - .thumb_func -chk_adr_r2: - push {r0} - lsrs r0, r2, 25 - bne chk_adr_r2_done - ldr r0, lt_MPlayJumpTableTemplate - cmp r2, r0 - bcc chk_adr_r2_reject - lsrs r0, r2, 14 - beq chk_adr_r2_done -chk_adr_r2_reject: - movs r3, 0 -chk_adr_r2_done: - pop {r0} - bx lr - .align 2, 0 -lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate - - thumb_func_start ld_r3_tp_adr_i -ld_r3_tp_adr_i: - ldr r2, [r1, 0x40] -_080AE73A: - adds r3, r2, 0x1 - str r3, [r1, 0x40] - ldrb r3, [r2] - b chk_adr_r2 - thumb_func_end ld_r3_tp_adr_i - - thumb_func_start ply_goto -ply_goto: - push {lr} -ply_goto_1: - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - ldrb r0, [r2, 0x3] - lsls r0, 8 - ldrb r3, [r2, 0x2] - orrs r0, r3 - lsls r0, 8 - ldrb r3, [r2, 0x1] - orrs r0, r3 - lsls r0, 8 - bl ldrb_r3_r2 - orrs r0, r3 - str r0, [r1, o_MusicPlayerTrack_cmdPtr] - pop {r0} - bx r0 - thumb_func_end ply_goto - - thumb_func_start ply_patt -ply_patt: - ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] - cmp r2, 0x3 - bcs _080AE77C - lsls r2, 2 - adds r3, r1, r2 - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - adds r2, 0x4 - str r2, [r3, o_MusicPlayerTrack_patternStack] - ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] - adds r2, 0x1 - strb r2, [r1, o_MusicPlayerTrack_patternLevel] - b ply_goto -_080AE77C: - b ply_fine - thumb_func_end ply_patt - - thumb_func_start ply_pend -ply_pend: - ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] - cmp r2, 0 - beq ply_pend_done - subs r2, 1 - strb r2, [r1, o_MusicPlayerTrack_patternLevel] - lsls r2, 2 - adds r3, r1, r2 - ldr r2, [r3, o_MusicPlayerTrack_patternStack] - str r2, [r1, o_MusicPlayerTrack_cmdPtr] -ply_pend_done: - bx lr - thumb_func_end ply_pend - - thumb_func_start ply_rept -ply_rept: - push {lr} - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - ldrb r3, [r2] - cmp r3, 0 - bne ply_rept_1 - adds r2, 1 - str r2, [r1, o_MusicPlayerTrack_cmdPtr] - b ply_goto_1 -ply_rept_1: - ldrb r3, [r1, o_MusicPlayerTrack_repN] - adds r3, 1 - strb r3, [r1, o_MusicPlayerTrack_repN] - mov r12, r3 - bl ld_r3_tp_adr_i - cmp r12, r3 - bhs ply_rept_2 - b ply_goto_1 -ply_rept_2: - movs r3, 0 - strb r3, [r1, o_MusicPlayerTrack_repN] - adds r2, 5 - str r2, [r1, o_MusicPlayerTrack_cmdPtr] - pop {r0} - bx r0 - thumb_func_end ply_rept - - thumb_func_start ply_prio -ply_prio: - mov r12, lr - bl ld_r3_tp_adr_i - strb r3, [r1, o_MusicPlayerTrack_priority] - bx r12 - thumb_func_end ply_prio - - thumb_func_start ply_tempo -ply_tempo: - mov r12, lr - bl ld_r3_tp_adr_i - lsls r3, 1 - strh r3, [r0, o_MusicPlayerInfo_tempoD] - ldrh r2, [r0, o_MusicPlayerInfo_tempoU] - muls r3, r2 - lsrs r3, 8 - strh r3, [r0, o_MusicPlayerInfo_tempoI] - bx r12 - thumb_func_end ply_tempo - - thumb_func_start ply_keysh -ply_keysh: - mov r12, lr - bl ld_r3_tp_adr_i - strb r3, [r1, o_MusicPlayerTrack_keyShift] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_keysh - - thumb_func_start ply_voice -ply_voice: - mov r12, lr - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - ldrb r3, [r2] - adds r2, 1 - str r2, [r1, o_MusicPlayerTrack_cmdPtr] - lsls r2, r3, 1 - adds r2, r3 - lsls r2, 2 - ldr r3, [r0, o_MusicPlayerInfo_tone] - adds r2, r3 - ldr r3, [r2] - bl chk_adr_r2 - str r3, [r1, o_MusicPlayerTrack_ToneData_type] - ldr r3, [r2, 0x4] - bl chk_adr_r2 - str r3, [r1, o_MusicPlayerTrack_ToneData_wav] - ldr r3, [r2, 0x8] - bl chk_adr_r2 - str r3, [r1, o_MusicPlayerTrack_ToneData_attack] - bx r12 - thumb_func_end ply_voice - - thumb_func_start ply_vol -ply_vol: - mov r12, lr - bl ld_r3_tp_adr_i - strb r3, [r1, o_MusicPlayerTrack_vol] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_vol - - thumb_func_start ply_pan -ply_pan: - mov r12, lr - bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, o_MusicPlayerTrack_pan] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_pan - - thumb_func_start ply_bend -ply_bend: - mov r12, lr - bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, o_MusicPlayerTrack_bend] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_bend - - thumb_func_start ply_bendr -ply_bendr: - mov r12, lr - bl ld_r3_tp_adr_i - strb r3, [r1, o_MusicPlayerTrack_bendRange] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_bendr - - thumb_func_start ply_lfodl -ply_lfodl: - mov r12, lr - bl ld_r3_tp_adr_i - strb r3, [r1, o_MusicPlayerTrack_lfoDelay] - bx r12 - thumb_func_end ply_lfodl - - thumb_func_start ply_modt -ply_modt: - mov r12, lr - bl ld_r3_tp_adr_i - ldrb r0, [r1, o_MusicPlayerTrack_modT] - cmp r0, r3 - beq _080AE89A - strb r3, [r1, o_MusicPlayerTrack_modT] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xF - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] -_080AE89A: - bx r12 - thumb_func_end ply_modt - - thumb_func_start ply_tune -ply_tune: - mov r12, lr - bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, o_MusicPlayerTrack_tune] - ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx r12 - thumb_func_end ply_tune - - thumb_func_start ply_port -ply_port: - mov r12, lr - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - ldrb r3, [r2] - adds r2, 0x1 - ldr r0, =REG_SOUND1CNT_L @ sound register base address - adds r0, r3 - bl _080AE73A - strb r3, [r0] - bx r12 - .pool - thumb_func_end ply_port - - thumb_func_start m4aSoundVSync -m4aSoundVSync: - ldr r0, lt2_SOUND_INFO_PTR - ldr r0, [r0] - - @ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1. - ldr r2, lt2_ID_NUMBER - ldr r3, [r0, o_SoundInfo_ident] - subs r3, r2 - cmp r3, 0x1 - bhi m4aSoundVSync_Done - - @ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA. - ldrb r1, [r0, o_SoundInfo_pcmDmaCounter] - subs r1, 0x1 - strb r1, [r0, o_SoundInfo_pcmDmaCounter] - bgt m4aSoundVSync_Done - - @ Reload the PCM DMA counter. - ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] - strb r1, [r0, o_SoundInfo_pcmDmaCounter] - - ldr r2, =REG_DMA1 - - ldr r1, [r2, 0x8] @ DMA1CNT - lsls r1, 7 - bcc m4aSoundVSync_SkipDMA1 - - ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4 - str r1, [r2, 0x8] @ DMA1CNT - -m4aSoundVSync_SkipDMA1: - ldr r1, [r2, 0xC + 0x8] @ DMA2CNT - lsls r1, 7 - bcc m4aSoundVSync_SkipDMA2 - ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4 - str r1, [r2, 0xC + 0x8] @ DMA2CNT - -m4aSoundVSync_SkipDMA2: - movs r1, DMA_32BIT >> 8 - lsls r1, 8 - strh r1, [r2, 0xA] @ DMA1CNT_H - strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H - - movs r1, (DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT) >> 8 - lsls r1, 8 @ LSB is 0, so DMA_SRC_INC is used (destination is always fixed in FIFO mode) - strh r1, [r2, 0xA] @ DMA1CNT_H - strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H - -m4aSoundVSync_Done: - bx lr - - .pool - thumb_func_end m4aSoundVSync - - thumb_func_start MPlayMain -MPlayMain: - ldr r2, lt2_ID_NUMBER - ldr r3, [r0, o_MusicPlayerInfo_ident] - cmp r2, r3 - beq _080AE91E - bx lr -_080AE91E: - adds r3, 0x1 - str r3, [r0, o_MusicPlayerInfo_ident] - push {r0,lr} - ldr r3, [r0, o_MusicPlayerInfo_func] - cmp r3, 0 - beq _080AE930 - ldr r0, [r0, o_MusicPlayerInfo_intp] - bl call_r3_2 -_080AE930: - pop {r0} - push {r4-r7} - mov r4, r8 - mov r5, r9 - mov r6, r10 - mov r7, r11 - push {r4-r7} - adds r7, r0, 0 - ldr r0, [r7, o_MusicPlayerInfo_status] - cmp r0, 0 - bge _080AE948 - b _080AEB5C -_080AE948: - ldr r0, lt2_SOUND_INFO_PTR - ldr r0, [r0] - mov r8, r0 - adds r0, r7, 0 - bl FadeOutBody - ldr r0, [r7, o_MusicPlayerInfo_status] - cmp r0, 0 - bge _080AE95C - b _080AEB5C -_080AE95C: - ldrh r0, [r7, o_MusicPlayerInfo_tempoC] - ldrh r1, [r7, o_MusicPlayerInfo_tempoI] - adds r0, r1 - b _080AEAAC -_080AE964: - ldrb r6, [r7, o_MusicPlayerInfo_trackCount] - ldr r5, [r7, o_MusicPlayerInfo_tracks] - movs r3, 0x1 - movs r4, 0 -_080AE96C: - ldrb r0, [r5] - movs r1, 0x80 - tst r1, r0 - bne _080AE976 - b _080AEA88 -_080AE976: - mov r10, r3 - orrs r4, r3 - mov r11, r4 - ldr r4, [r5, o_MusicPlayerTrack_chan] - cmp r4, 0 - beq _080AE9AA -_080AE982: - ldrb r1, [r4] - movs r0, 0xC7 - tst r0, r1 - beq _080AE99E - ldrb r0, [r4, 0x10] - cmp r0, 0 - beq _080AE9A4 - subs r0, 0x1 - strb r0, [r4, 0x10] - bne _080AE9A4 - movs r0, 0x40 - orrs r1, r0 - strb r1, [r4] - b _080AE9A4 -_080AE99E: - adds r0, r4, 0 - bl ClearChain -_080AE9A4: - ldr r4, [r4, 0x34] - cmp r4, 0 - bne _080AE982 -_080AE9AA: - ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x40 - tst r0, r3 - beq _080AEA28 - adds r0, r5, 0 - bl Clear64byte - movs r0, 0x80 - strb r0, [r5] - movs r0, 0x2 - strb r0, [r5, o_MusicPlayerTrack_bendRange] - movs r0, 0x40 - strb r0, [r5, o_MusicPlayerTrack_volX] - movs r0, 0x16 - strb r0, [r5, o_MusicPlayerTrack_lfoSpeed] - movs r0, 0x1 - adds r1, r5, 0x6 - strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6] - b _080AEA28 -_080AE9D0: - ldr r2, [r5, o_MusicPlayerTrack_cmdPtr] - ldrb r1, [r2] - cmp r1, 0x80 - bcs _080AE9DC - ldrb r1, [r5, o_MusicPlayerTrack_runningStatus] - b _080AE9E6 -_080AE9DC: - adds r2, 0x1 - str r2, [r5, o_MusicPlayerTrack_cmdPtr] - cmp r1, 0xBD - bcc _080AE9E6 - strb r1, [r5, o_MusicPlayerTrack_runningStatus] -_080AE9E6: - cmp r1, 0xCF - bcc _080AE9FC - mov r0, r8 - ldr r3, [r0, o_SoundInfo_plynote] - adds r0, r1, 0 - subs r0, 0xCF - adds r1, r7, 0 - adds r2, r5, 0 - bl call_r3_2 - b _080AEA28 -_080AE9FC: - cmp r1, 0xB0 - bls _080AEA1E - adds r0, r1, 0 - subs r0, 0xB1 - strb r0, [r7, o_MusicPlayerInfo_cmd] - mov r3, r8 - ldr r3, [r3, o_SoundInfo_MPlayJumpTable] - lsls r0, 2 - ldr r3, [r3, r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl call_r3_2 - ldrb r0, [r5, o_MusicPlayerTrack_flags] - cmp r0, 0 - beq _080AEA84 - b _080AEA28 -_080AEA1E: - ldr r0, lt_gClockTable - subs r1, 0x80 - adds r1, r0 - ldrb r0, [r1] - strb r0, [r5, o_MusicPlayerTrack_wait] -_080AEA28: - ldrb r0, [r5, o_MusicPlayerTrack_wait] - cmp r0, 0 - beq _080AE9D0 - subs r0, 0x1 - strb r0, [r5, o_MusicPlayerTrack_wait] - ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed] - cmp r1, 0 - beq _080AEA84 - ldrb r0, [r5, o_MusicPlayerTrack_mod] - cmp r0, 0 - beq _080AEA84 - ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC] - cmp r0, 0 - beq _080AEA4A - subs r0, 0x1 - strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] - b _080AEA84 -_080AEA4A: - ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] - adds r0, r1 - strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] - adds r1, r0, 0 - subs r0, 0x40 - lsls r0, 24 - bpl _080AEA5E - lsls r2, r1, 24 - asrs r2, 24 - b _080AEA62 -_080AEA5E: - movs r0, 0x80 - subs r2, r0, r1 -_080AEA62: - ldrb r0, [r5, o_MusicPlayerTrack_mod] - muls r0, r2 - asrs r2, r0, 6 - ldrb r0, [r5, o_MusicPlayerTrack_modM] - eors r0, r2 - lsls r0, 24 - beq _080AEA84 - strb r2, [r5, o_MusicPlayerTrack_modM] - ldrb r0, [r5] - ldrb r1, [r5, o_MusicPlayerTrack_modT] - cmp r1, 0 - bne _080AEA7E - movs r1, 0xC - b _080AEA80 -_080AEA7E: - movs r1, 0x3 -_080AEA80: - orrs r0, r1 - strb r0, [r5, o_MusicPlayerTrack_flags] -_080AEA84: - mov r3, r10 - mov r4, r11 -_080AEA88: - subs r6, 0x1 - ble _080AEA94 - movs r0, 0x50 - adds r5, r0 - lsls r3, 1 - b _080AE96C -_080AEA94: - ldr r0, [r7, o_MusicPlayerInfo_clock] - adds r0, 0x1 - str r0, [r7, o_MusicPlayerInfo_clock] - cmp r4, 0 - bne _080AEAA6 - movs r0, 0x80 - lsls r0, 24 - str r0, [r7, o_MusicPlayerInfo_status] - b _080AEB5C -_080AEAA6: - str r4, [r7, o_MusicPlayerInfo_status] - ldrh r0, [r7, o_MusicPlayerInfo_tempoC] - subs r0, 0x96 -_080AEAAC: - strh r0, [r7, o_MusicPlayerInfo_tempoC] - cmp r0, 0x96 - bcc _080AEAB4 - b _080AE964 -_080AEAB4: - ldrb r2, [r7, o_MusicPlayerInfo_trackCount] - ldr r5, [r7, o_MusicPlayerInfo_tracks] -_080AEAB8: - ldrb r0, [r5, o_MusicPlayerTrack_flags] - movs r1, 0x80 - tst r1, r0 - beq _080AEB52 - movs r1, 0xF - tst r1, r0 - beq _080AEB52 - mov r9, r2 - adds r0, r7, 0 - adds r1, r5, 0 - bl TrkVolPitSet - ldr r4, [r5, o_MusicPlayerTrack_chan] - cmp r4, 0 - beq _080AEB48 -_080AEAD6: - ldrb r1, [r4, o_SoundChannel_status] - movs r0, 0xC7 - tst r0, r1 - bne _080AEAE6 - adds r0, r4, 0 - bl ClearChain - b _080AEB42 -_080AEAE6: - ldrb r0, [r4, o_SoundChannel_type] - movs r6, 0x7 - ands r6, r0 - ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x3 - tst r0, r3 - beq _080AEB04 - bl ChnVolSetAsm - cmp r6, 0 - beq _080AEB04 - ldrb r0, [r4, o_CgbChannel_mo] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] -_080AEB04: - ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0xC - tst r0, r3 - beq _080AEB42 - ldrb r1, [r4, o_SoundChannel_ky] - movs r0, 0x8 - ldrsb r0, [r5, r0] - adds r2, r1, r0 - bpl _080AEB18 - movs r2, 0 -_080AEB18: - cmp r6, 0 - beq _080AEB36 - mov r0, r8 - ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq] - adds r1, r2, 0 - ldrb r2, [r5, o_MusicPlayerTrack_pitM] - adds r0, r6, 0 - bl call_r3_2 - str r0, [r4, o_CgbChannel_fr] - ldrb r0, [r4, o_CgbChannel_mo] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] - b _080AEB42 -_080AEB36: - adds r1, r2, 0 - ldrb r2, [r5, o_MusicPlayerTrack_pitM] - ldr r0, [r4, o_SoundChannel_wav] - bl MidiKeyToFreq - str r0, [r4, o_SoundChannel_freq] -_080AEB42: - ldr r4, [r4, o_SoundChannel_np] - cmp r4, 0 - bne _080AEAD6 -_080AEB48: - ldrb r0, [r5, o_MusicPlayerTrack_flags] - movs r1, 0xF0 - ands r0, r1 - strb r0, [r5, o_MusicPlayerTrack_flags] - mov r2, r9 -_080AEB52: - subs r2, 0x1 - ble _080AEB5C - movs r0, 0x50 - adds r5, r0 - bgt _080AEAB8 -_080AEB5C: - ldr r0, lt2_ID_NUMBER - str r0, [r7, o_MusicPlayerInfo_ident] - pop {r0-r7} - mov r8, r0 - mov r9, r1 - mov r10, r2 - mov r11, r3 - pop {r3} -call_r3_2: - bx r3 - .align 2, 0 - -lt_gClockTable: .word gClockTable -lt2_SOUND_INFO_PTR: .word SOUND_INFO_PTR -lt2_ID_NUMBER: .word ID_NUMBER - thumb_func_end MPlayMain - - thumb_func_start TrackStop -TrackStop: - push {r4-r6,lr} - adds r5, r1, 0 - ldrb r1, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x80 - tst r0, r1 - beq TrackStop_Done - ldr r4, [r5, o_MusicPlayerTrack_chan] - cmp r4, 0 - beq TrackStop_3 - movs r6, 0 -TrackStop_Loop: - ldrb r0, [r4, o_SoundChannel_status] - cmp r0, 0 - beq TrackStop_2 - ldrb r0, [r4, o_SoundChannel_type] - movs r3, 0x7 - ands r0, r3 - beq TrackStop_1 - ldr r3, =SOUND_INFO_PTR - ldr r3, [r3] - ldr r3, [r3, o_SoundInfo_CgbOscOff] - bl call_r3_2 -TrackStop_1: - strb r6, [r4, o_SoundChannel_status] -TrackStop_2: - str r6, [r4, o_SoundChannel_track] - ldr r4, [r4, o_SoundChannel_np] - cmp r4, 0 - bne TrackStop_Loop -TrackStop_3: - str r4, [r5, o_MusicPlayerTrack_chan] -TrackStop_Done: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end TrackStop - - thumb_func_start ChnVolSetAsm -ChnVolSetAsm: - ldrb r1, [r4, 0x12] - movs r0, 0x14 - ldrsb r2, [r4, r0] - movs r3, 0x80 - adds r3, r2 - muls r3, r1 - ldrb r0, [r5, 0x10] - muls r0, r3 - asrs r0, 14 - cmp r0, 0xFF - bls _080AEBD8 - movs r0, 0xFF -_080AEBD8: - strb r0, [r4, 0x2] - movs r3, 0x7F - subs r3, r2 - muls r3, r1 - ldrb r0, [r5, 0x11] - muls r0, r3 - asrs r0, 14 - cmp r0, 0xFF - bls _080AEBEC - movs r0, 0xFF -_080AEBEC: - strb r0, [r4, 0x3] - bx lr - thumb_func_end ChnVolSetAsm - - thumb_func_start ply_note -ply_note: - push {r4-r7,lr} - mov r4, r8 - mov r5, r9 - mov r6, r10 - mov r7, r11 - push {r4-r7} - sub sp, 0x18 - str r1, [sp] - adds r5, r2, 0 - ldr r1, =SOUND_INFO_PTR - ldr r1, [r1] - str r1, [sp, 0x4] - ldr r1, =gClockTable - adds r0, r1 - ldrb r0, [r0] - strb r0, [r5, o_MusicPlayerTrack_gateTime] - ldr r3, [r5, o_MusicPlayerTrack_cmdPtr] - ldrb r0, [r3] - cmp r0, 0x80 - bcs _080AEC36 - strb r0, [r5, o_MusicPlayerTrack_key] - adds r3, 0x1 - ldrb r0, [r3] - cmp r0, 0x80 - bcs _080AEC34 - strb r0, [r5, o_MusicPlayerTrack_velocity] - adds r3, 0x1 - ldrb r0, [r3] - cmp r0, 0x80 - bcs _080AEC34 - ldrb r1, [r5, o_MusicPlayerTrack_gateTime] - adds r1, r0 - strb r1, [r5, o_MusicPlayerTrack_gateTime] - adds r3, 0x1 -_080AEC34: - str r3, [r5, o_MusicPlayerTrack_cmdPtr] -_080AEC36: - movs r0, 0 - str r0, [sp, 0x14] - adds r4, r5, 0 - adds r4, o_MusicPlayerTrack_ToneData_type - ldrb r2, [r4] - movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL - tst r0, r2 - beq _080AEC88 - ldrb r3, [r5, o_MusicPlayerTrack_key] - movs r0, TONEDATA_TYPE_SPL - tst r0, r2 - beq _080AEC56 - ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable] - adds r1, r3 - ldrb r0, [r1] - b _080AEC58 -_080AEC56: - adds r0, r3, 0 -_080AEC58: - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav] - adds r1, r0 - mov r9, r1 - mov r6, r9 - ldrb r1, [r6] - movs r0, 0xC0 - tst r0, r1 - beq _080AEC70 - b _080AEDD6 -_080AEC70: - movs r0, 0x80 - tst r0, r2 - beq _080AEC8C - ldrb r1, [r6, 0x3] - movs r0, 0x80 - tst r0, r1 - beq _080AEC84 - subs r1, 0xC0 - lsls r1, 1 - str r1, [sp, 0x14] -_080AEC84: - ldrb r3, [r6, 0x1] - b _080AEC8C -_080AEC88: - mov r9, r4 - ldrb r3, [r5, 0x5] -_080AEC8C: - str r3, [sp, 0x8] - ldr r6, [sp] - ldrb r1, [r6, 0x9] - ldrb r0, [r5, 0x1D] - adds r0, r1 - cmp r0, 0xFF - bls _080AEC9C - movs r0, 0xFF -_080AEC9C: - str r0, [sp, 0x10] - mov r6, r9 - ldrb r0, [r6] - movs r6, 0x7 - ands r6, r0 - str r6, [sp, 0xC] - beq _080AECDC - ldr r0, [sp, 0x4] - ldr r4, [r0, 0x1C] - cmp r4, 0 - bne _080AECB4 - b _080AEDD6 -_080AECB4: - subs r6, 0x1 - lsls r0, r6, 6 - adds r4, r0 - ldrb r1, [r4] - movs r0, 0xC7 - tst r0, r1 - beq _080AED30 - movs r0, 0x40 - tst r0, r1 - bne _080AED30 - ldrb r1, [r4, 0x13] - ldr r0, [sp, 0x10] - cmp r1, r0 - bcc _080AED30 - beq _080AECD4 - b _080AEDD6 -_080AECD4: - ldr r0, [r4, 0x2C] - cmp r0, r5 - bcs _080AED30 - b _080AEDD6 -_080AECDC: - ldr r6, [sp, 0x10] - adds r7, r5, 0 - movs r2, 0 - mov r8, r2 - ldr r4, [sp, 0x4] - ldrb r3, [r4, 0x6] - adds r4, 0x50 -_080AECEA: - ldrb r1, [r4] - movs r0, 0xC7 - tst r0, r1 - beq _080AED30 - movs r0, 0x40 - tst r0, r1 - beq _080AED04 - cmp r2, 0 - bne _080AED08 - adds r2, 0x1 - ldrb r6, [r4, 0x13] - ldr r7, [r4, 0x2C] - b _080AED22 -_080AED04: - cmp r2, 0 - bne _080AED24 -_080AED08: - ldrb r0, [r4, 0x13] - cmp r0, r6 - bcs _080AED14 - adds r6, r0, 0 - ldr r7, [r4, 0x2C] - b _080AED22 -_080AED14: - bhi _080AED24 - ldr r0, [r4, 0x2C] - cmp r0, r7 - bls _080AED20 - adds r7, r0, 0 - b _080AED22 -_080AED20: - bcc _080AED24 -_080AED22: - mov r8, r4 -_080AED24: - adds r4, 0x40 - subs r3, 0x1 - bgt _080AECEA - mov r4, r8 - cmp r4, 0 - beq _080AEDD6 -_080AED30: - adds r0, r4, 0 - bl ClearChain - movs r1, 0 - str r1, [r4, 0x30] - ldr r3, [r5, 0x20] - str r3, [r4, 0x34] - cmp r3, 0 - beq _080AED44 - str r4, [r3, 0x30] -_080AED44: - str r4, [r5, 0x20] - str r5, [r4, 0x2C] - ldrb r0, [r5, 0x1B] - strb r0, [r5, 0x1C] - cmp r0, r1 - beq _080AED56 - adds r1, r5, 0 - bl clear_modM -_080AED56: - ldr r0, [sp] - adds r1, r5, 0 - bl TrkVolPitSet - ldr r0, [r5, 0x4] - str r0, [r4, 0x10] - ldr r0, [sp, 0x10] - strb r0, [r4, 0x13] - ldr r0, [sp, 0x8] - strb r0, [r4, 0x8] - ldr r0, [sp, 0x14] - strb r0, [r4, 0x14] - mov r6, r9 - ldrb r0, [r6] - strb r0, [r4, 0x1] - ldr r7, [r6, 0x4] - str r7, [r4, 0x24] - ldr r0, [r6, 0x8] - str r0, [r4, 0x4] - ldrh r0, [r5, 0x1E] - strh r0, [r4, 0xC] - bl ChnVolSetAsm - ldrb r1, [r4, 0x8] - movs r0, 0x8 - ldrsb r0, [r5, r0] - adds r3, r1, r0 - bpl _080AED90 - movs r3, 0 -_080AED90: - ldr r6, [sp, 0xC] - cmp r6, 0 - beq _080AEDBE - mov r6, r9 - ldrb r0, [r6, 0x2] - strb r0, [r4, 0x1E] - ldrb r1, [r6, 0x3] - movs r0, 0x80 - tst r0, r1 - bne _080AEDAA - movs r0, 0x70 - tst r0, r1 - bne _080AEDAC -_080AEDAA: - movs r1, 0x8 -_080AEDAC: - strb r1, [r4, 0x1F] - ldrb r2, [r5, 0x9] - adds r1, r3, 0 - ldr r0, [sp, 0xC] - ldr r3, [sp, 0x4] - ldr r3, [r3, 0x30] - bl call_r3_2 - b _080AEDC8 -_080AEDBE: - ldrb r2, [r5, 0x9] - adds r1, r3, 0 - adds r0, r7, 0 - bl MidiKeyToFreq -_080AEDC8: - str r0, [r4, 0x20] - movs r0, 0x80 - strb r0, [r4] - ldrb r1, [r5] - movs r0, 0xF0 - ands r0, r1 - strb r0, [r5] -_080AEDD6: - add sp, 0x18 - pop {r0-r7} - mov r8, r0 - mov r9, r1 - mov r10, r2 - mov r11, r3 - pop {r0} - bx r0 - .pool - thumb_func_end ply_note - - thumb_func_start ply_endtie -ply_endtie: - push {r4,r5} - ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] - ldrb r3, [r2] - cmp r3, 0x80 - bcs _080AEE02 - strb r3, [r1, o_MusicPlayerTrack_key] - adds r2, 0x1 - str r2, [r1, o_MusicPlayerTrack_cmdPtr] - b _080AEE04 -_080AEE02: - ldrb r3, [r1, o_MusicPlayerTrack_key] -_080AEE04: - ldr r1, [r1, o_MusicPlayerTrack_chan] - cmp r1, 0 - beq _080AEE2C - movs r4, 0x83 - movs r5, 0x40 -_080AEE0E: - ldrb r2, [r1, o_SoundChannel_status] - tst r2, r4 - beq _080AEE26 - tst r2, r5 - bne _080AEE26 - ldrb r0, [r1, o_SoundChannel_mk] - cmp r0, r3 - bne _080AEE26 - movs r0, 0x40 - orrs r2, r0 - strb r2, [r1, o_SoundChannel_status] - b _080AEE2C -_080AEE26: - ldr r1, [r1, o_SoundChannel_np] - cmp r1, 0 - bne _080AEE0E -_080AEE2C: - pop {r4,r5} - bx lr - thumb_func_end ply_endtie - - thumb_func_start clear_modM -clear_modM: - movs r2, 0 - strb r2, [r1, o_MusicPlayerTrack_modM] - strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC] - ldrb r2, [r1, o_MusicPlayerTrack_modT] - cmp r2, 0 - bne _080AEE40 - movs r2, 0xC - b _080AEE42 -_080AEE40: - movs r2, 0x3 -_080AEE42: - ldrb r3, [r1, o_MusicPlayerTrack_flags] - orrs r3, r2 - strb r3, [r1, o_MusicPlayerTrack_flags] - bx lr - thumb_func_end clear_modM - - thumb_func_start ld_r3_tp_adr_i_unchecked -ld_r3_tp_adr_i_unchecked: - ldr r2, [r1, 0x40] - adds r3, r2, 0x1 - str r3, [r1, 0x40] - ldrb r3, [r2] - bx lr - thumb_func_end ld_r3_tp_adr_i_unchecked - - thumb_func_start ply_lfos -ply_lfos: - mov r12, lr - bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, o_MusicPlayerTrack_lfoSpeed] - cmp r3, 0 - bne _080AEE68 - bl clear_modM -_080AEE68: - bx r12 - thumb_func_end ply_lfos - - thumb_func_start ply_mod -ply_mod: - mov r12, lr - bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, o_MusicPlayerTrack_mod] - cmp r3, 0 - bne _080AEE7C - bl clear_modM -_080AEE7C: - bx r12 - thumb_func_end ply_mod - - .align 2, 0 @ Don't pad with nop. diff --git a/include/asm/constants/m4a_constants.inc b/include/asm/constants/m4a_constants.inc index 62ca5bb55..ab069ec7d 100644 --- a/include/asm/constants/m4a_constants.inc +++ b/include/asm/constants/m4a_constants.inc @@ -1,12 +1,46 @@ +#ifndef GUARD_CONSTANTS_M4A_CONSTANTS_INC +#define GUARD_CONSTANTS_M4A_CONSTANTS_INC + .equiv ID_NUMBER, 0x68736d53 .equiv PCM_DMA_BUF_SIZE, 1584 + .equiv MAX_DIRECTSOUND_CHANNELS, 12 + + .equiv C_V, 0x40 .equiv TONEDATA_TYPE_CGB, 0x07 .equiv TONEDATA_TYPE_FIX, 0x08 + .equiv TONEDATA_TYPE_REV, 0x10 + .equiv TONEDATA_TYPE_CMP, 0x20 .equiv TONEDATA_TYPE_SPL, 0x40 @ key split .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm + .equiv TONEDATA_P_S_PAN, 0xc0 + + .equiv SOUND_CHANNEL_SF_START, 0x80 + .equiv SOUND_CHANNEL_SF_STOP, 0x40 + .equiv SOUND_CHANNEL_SF_SPECIAL, 0x20 + .equiv SOUND_CHANNEL_SF_LOOP, 0x10 + .equiv SOUND_CHANNEL_SF_IEC, 0x04 + .equiv SOUND_CHANNEL_SF_ENV, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_ATTACK, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_DECAY, 0x02 + .equiv SOUND_CHANNEL_SF_ENV_SUSTAIN, 0x01 + .equiv SOUND_CHANNEL_SF_ENV_RELEASE, 0x00 + .equiv SOUND_CHANNEL_SF_ON, (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + + .equiv CGB_CHANNEL_MO_PIT, 0x02 + .equiv CGB_CHANNEL_MO_VOL, 0x01 + + .equiv WAVE_DATA_FLAG_LOOP, 0xC0 + + .equiv MPT_FLG_VOLSET, 0x01 + .equiv MPT_FLG_VOLCHG, 0x03 + .equiv MPT_FLG_PITSET, 0x04 + .equiv MPT_FLG_PITCHG, 0x0C + .equiv MPT_FLG_START, 0x40 + .equiv MPT_FLG_EXIST, 0x80 + .macro struct_begin .struct 0 .endm @@ -16,6 +50,28 @@ .struct \name + \size .endm + struct_begin + struct_field o_WaveData_type, 2 + struct_field o_WaveData_d1, 1 + struct_field o_WaveData_flags, 1 + struct_field o_WaveData_freq, 4 + struct_field o_WaveData_loopStart, 4 + struct_field o_WaveData_size, 4 + struct_field o_WaveData_data, 0 + struct_field WaveData_size, 0 + + struct_begin + struct_field o_ToneData_type, 1 + struct_field o_ToneData_key, 1 + struct_field o_ToneData_length, 1 + struct_field o_ToneData_pan_sweep, 1 + struct_field o_ToneData_wav, 4 + struct_field o_ToneData_attack, 1 + struct_field o_ToneData_decay, 1 + struct_field o_ToneData_sustain, 1 + struct_field o_ToneData_release, 1 + struct_field ToneData_size, 0 + struct_begin struct_field o_SoundInfo_ident, 4 struct_field o_SoundInfo_pcmDmaCounter, 1 @@ -32,8 +88,8 @@ struct_field o_SoundInfo_pcmFreq, 4 struct_field o_SoundInfo_divFreq, 4 struct_field o_SoundInfo_cgbChans, 4 - struct_field o_SoundInfo_func, 4 - struct_field o_SoundInfo_intp, 4 + struct_field o_SoundInfo_MPlayMainHead, 4 + struct_field o_SoundInfo_musicPlayerHead, 4 struct_field o_SoundInfo_CgbSound, 4 struct_field o_SoundInfo_CgbOscOff, 4 struct_field o_SoundInfo_MidiKeyToCgbFreq, 4 @@ -41,12 +97,12 @@ struct_field o_SoundInfo_plynote, 4 struct_field o_SoundInfo_ExtVolPit, 4 struct_field o_SoundInfo_gap2, 16 - struct_field o_SoundInfo_chans, 768 + struct_field o_SoundInfo_chans, MAX_DIRECTSOUND_CHANNELS * 64 struct_field o_SoundInfo_pcmBuffer, PCM_DMA_BUF_SIZE * 2 struct_field SoundInfo_size, 0 struct_begin - struct_field o_SoundChannel_status, 1 + struct_field o_SoundChannel_statusFlags, 1 struct_field o_SoundChannel_type, 1 struct_field o_SoundChannel_rightVolume, 1 struct_field o_SoundChannel_leftVolume, 1 @@ -54,29 +110,29 @@ struct_field o_SoundChannel_decay, 1 struct_field o_SoundChannel_sustain, 1 struct_field o_SoundChannel_release, 1 - struct_field o_SoundChannel_ky, 1 - struct_field o_SoundChannel_ev, 1 - struct_field o_SoundChannel_er, 1 - struct_field o_SoundChannel_el, 1 - struct_field o_SoundChannel_iev, 1 - struct_field o_SoundChannel_iel, 1 - struct_field o_SoundChannel_d1, 1 - struct_field o_SoundChannel_d2, 1 - struct_field o_SoundChannel_gt, 1 - struct_field o_SoundChannel_mk, 1 - struct_field o_SoundChannel_ve, 1 - struct_field o_SoundChannel_pr, 1 - struct_field o_SoundChannel_rp, 1 - struct_field o_SoundChannel_d3, 3 - struct_field o_SoundChannel_ct, 4 + struct_field o_SoundChannel_key, 1 + struct_field o_SoundChannel_envelopeVolume, 1 + struct_field o_SoundChannel_envelopeVolumeRight, 1 + struct_field o_SoundChannel_envelopeVolumeLeft, 1 + struct_field o_SoundChannel_pseudoEchoVolume, 1 + struct_field o_SoundChannel_pseudoEchoLength, 1 + struct_field o_SoundChannel_dummy1, 1 + struct_field o_SoundChannel_dummy2, 1 + struct_field o_SoundChannel_gateTime, 1 + struct_field o_SoundChannel_midiKey, 1 + struct_field o_SoundChannel_velocity, 1 + struct_field o_SoundChannel_priority, 1 + struct_field o_SoundChannel_rhythmPan, 1 + struct_field o_SoundChannel_dummy3, 3 + struct_field o_SoundChannel_count, 4 struct_field o_SoundChannel_fw, 4 - struct_field o_SoundChannel_freq, 4 + struct_field o_SoundChannel_frequency, 4 struct_field o_SoundChannel_wav, 4 - struct_field o_SoundChannel_cp, 4 + struct_field o_SoundChannel_currentPointer, 4 struct_field o_SoundChannel_track, 4 - struct_field o_SoundChannel_pp, 4 - struct_field o_SoundChannel_np, 4 - struct_field o_SoundChannel_d4, 4 + struct_field o_SoundChannel_prevChannelPointer, 4 + struct_field o_SoundChannel_nextChannelPointer, 4 + struct_field o_SoundChannel_dummy4, 4 struct_field o_SoundChannel_xpi, 2 struct_field o_SoundChannel_xpc, 2 struct_field SoundChannel_size, 0 @@ -112,8 +168,8 @@ struct_field o_MusicPlayerTrack_lfoDelay, 1 struct_field o_MusicPlayerTrack_lfoDelayC, 1 struct_field o_MusicPlayerTrack_priority, 1 - struct_field o_MusicPlayerTrack_echoVolume, 1 - struct_field o_MusicPlayerTrack_echoLength, 1 + struct_field o_MusicPlayerTrack_pseudoEchoVolume, 1 + struct_field o_MusicPlayerTrack_pseudoEchoLength, 1 struct_field o_MusicPlayerTrack_chan, 4 struct_field o_MusicPlayerTrack_ToneData_type, 1 struct_field o_MusicPlayerTrack_ToneData_key, 1 @@ -159,41 +215,43 @@ struct_field MusicPlayerInfo_size, 0 struct_begin - struct_field o_CgbChannel_sf, 1 - struct_field o_CgbChannel_ty, 1 + struct_field o_CgbChannel_statusFlags, 1 + struct_field o_CgbChannel_type, 1 struct_field o_CgbChannel_rightVolume, 1 struct_field o_CgbChannel_leftVolume, 1 - struct_field o_CgbChannel_at, 1 - struct_field o_CgbChannel_de, 1 - struct_field o_CgbChannel_su, 1 - struct_field o_CgbChannel_re, 1 - struct_field o_CgbChannel_ky, 1 - struct_field o_CgbChannel_ev, 1 - struct_field o_CgbChannel_eg, 1 - struct_field o_CgbChannel_ec, 1 - struct_field o_CgbChannel_echoVolume, 1 - struct_field o_CgbChannel_echoLength, 1 - struct_field o_CgbChannel_d1, 1 - struct_field o_CgbChannel_d2, 1 - struct_field o_CgbChannel_gt, 1 - struct_field o_CgbChannel_mk, 1 - struct_field o_CgbChannel_ve, 1 - struct_field o_CgbChannel_pr, 1 - struct_field o_CgbChannel_rp, 1 - struct_field o_CgbChannel_d3, 3 - struct_field o_CgbChannel_d5, 1 - struct_field o_CgbChannel_sg, 1 + struct_field o_CgbChannel_attack, 1 + struct_field o_CgbChannel_decay, 1 + struct_field o_CgbChannel_sustain, 1 + struct_field o_CgbChannel_release, 1 + struct_field o_CgbChannel_key, 1 + struct_field o_CgbChannel_envelopeVolume, 1 + struct_field o_CgbChannel_envelopeGoal, 1 + struct_field o_CgbChannel_envelopeCounter, 1 + struct_field o_CgbChannel_pseudoEchoVolume, 1 + struct_field o_CgbChannel_pseudoEchoLength, 1 + struct_field o_CgbChannel_dummy1, 1 + struct_field o_CgbChannel_dummy2, 1 + struct_field o_CgbChannel_gateTime, 1 + struct_field o_CgbChannel_midiKey, 1 + struct_field o_CgbChannel_velocity, 1 + struct_field o_CgbChannel_priority, 1 + struct_field o_CgbChannel_rhythmPan, 1 + struct_field o_CgbChannel_dummy3, 3 + struct_field o_CgbChannel_dummy5, 1 + struct_field o_CgbChannel_sustainGoal, 1 struct_field o_CgbChannel_n4, 1 struct_field o_CgbChannel_pan, 1 struct_field o_CgbChannel_panMask, 1 - struct_field o_CgbChannel_mo, 1 - struct_field o_CgbChannel_le, 1 - struct_field o_CgbChannel_sw, 1 - struct_field o_CgbChannel_fr, 4 - struct_field o_CgbChannel_wp, 4 - struct_field o_CgbChannel_cp, 4 - struct_field o_CgbChannel_tp, 4 - struct_field o_CgbChannel_pp, 4 - struct_field o_CgbChannel_np, 4 - struct_field o_CgbChannel_d4, 8 + struct_field o_CgbChannel_modify, 1 + struct_field o_CgbChannel_length, 1 + struct_field o_CgbChannel_sweep, 1 + struct_field o_CgbChannel_frequency, 4 + struct_field o_CgbChannel_wavePointer, 4 + struct_field o_CgbChannel_currentPointer, 4 + struct_field o_CgbChannel_track, 4 + struct_field o_CgbChannel_prevChannelPointer, 4 + struct_field o_CgbChannel_nextChannelPointer, 4 + struct_field o_CgbChannel_dummy4, 8 struct_field CgbChannel_size, 0 + +#endif diff --git a/ld_script.txt b/ld_script.txt index 4b5e35bb4..4bf9d509d 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -347,7 +347,7 @@ SECTIONS { asm/ground_effect.o(.text); src/ground_link.o(.text); asm/ground_event.o(.text); - asm/m4a_1.o(.text); + src/m4a_1.o(.text); src/m4a.o(.text); *libagbsyscall.a:CpuSet.o(.text); *libagbsyscall.a:SoundBiasReset.o(.text);