diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-11-18 00:44:35 -0600 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2020-11-18 00:44:35 -0600 |
commit | 578522b3d344866c38e6e2e01e6b26ba6a5c0107 (patch) | |
tree | 4686f6173b9e2354cb5d351c3e8fc502baba67dd | |
parent | 1b46057bb8a3e8e04484c14eebf26f2f7126b940 (diff) |
match another function and fix nonmatching
-rw-r--r-- | asm/music.s | 83 | ||||
-rw-r--r-- | include/m4a.h | 1 | ||||
-rw-r--r-- | src/music_pre.c | 147 |
3 files changed, 54 insertions, 177 deletions
diff --git a/asm/music.s b/asm/music.s index 006ddff..78ff17d 100644 --- a/asm/music.s +++ b/asm/music.s @@ -5,89 +5,6 @@ .text - thumb_func_start sub_800BFD0 -sub_800BFD0: - push {r4,r5,lr} - lsls r1, r0, 16 - movs r0, 0x80 - lsls r0, 17 - cmp r1, r0 - bls _0800BFE0 - movs r4, 0x10 - b _0800BFE8 -_0800BFE0: - lsrs r4, r1, 20 - cmp r4, 0 - bne _0800BFE8 - movs r4, 0x1 -_0800BFE8: - bl DisableInterrupts - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0800C018 - ldrh r0, [r0] - cmp r0, 0 - bne _0800C03C - ldr r3, _0800C01C - ldrh r0, [r3] - ldr r2, _0800C020 - cmp r0, r2 - beq _0800C044 - ldr r1, _0800C024 - ldrh r0, [r1] - cmp r0, 0x2 - bne _0800C02C - movs r0, 0x3 - strh r0, [r1] - ldr r0, _0800C028 - adds r1, r4, 0 - bl m4aMPlayFadeOut - b _0800C044 - .align 2, 0 -_0800C018: .4byte gUnknown_202D690 -_0800C01C: .4byte gUnknown_202D68A -_0800C020: .4byte 0x000003e7 -_0800C024: .4byte gUnknown_202D688 -_0800C028: .4byte gUnknown_20008F0 -_0800C02C: - strh r2, [r3] - ldr r0, _0800C038 - bl m4aMPlayStop - b _0800C044 - .align 2, 0 -_0800C038: .4byte gUnknown_20008F0 -_0800C03C: - ldr r1, _0800C05C - ldr r2, _0800C060 - adds r0, r2, 0 - strh r0, [r1] -_0800C044: - ldr r1, _0800C064 - ldr r2, _0800C060 - adds r0, r2, 0 - strh r0, [r1] - cmp r5, 0 - beq _0800C054 - bl EnableInterrupts -_0800C054: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800C05C: .4byte gUnknown_202D68A -_0800C060: .4byte 0x000003e7 -_0800C064: .4byte gUnknown_202D68C - thumb_func_end sub_800BFD0 - - thumb_func_start sub_800C068 -sub_800C068: - ldr r0, _0800C070 - ldrh r0, [r0] - bx lr - .align 2, 0 -_0800C070: .4byte gUnknown_202D68A - thumb_func_end sub_800C068 - thumb_func_start sub_800C074 sub_800C074: push {r4-r7,lr} diff --git a/include/m4a.h b/include/m4a.h index 17b8605..fb05110 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -18,6 +18,7 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo); void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo); +void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); extern struct MusicPlayerInfo gUnknown_20008F0; // BGM?? diff --git a/src/music_pre.c b/src/music_pre.c index 54f60d3..45afc01 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -115,13 +115,8 @@ void sub_800BDFC(u16 songIndex) EnableInterrupts(); } -#ifndef NONMATCHING -NAKED -#endif void FadeInNewBGM(u16 SongIndex, u16 speed) { -#ifdef NONMATCHING - // TODO regswap memes bool8 interrupt_flag; u16 temp_store; @@ -136,14 +131,14 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) return; } - if((speed > 0x80 << 1)) + if((speed > 256)) { - speed = 0x10; + speed = 16; } else { - if(speed >> 4 == 0) + if((speed >>= 4) == 0) { speed = 1; } @@ -164,92 +159,6 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) } if(interrupt_flag) EnableInterrupts(); -#else - asm_unified("\tpush {r4-r7,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tlsls r4, r1, 16\n" - "\tlsrs r5, r4, 16\n" - "\tadds r0, r6, 0\n" - "\tbl IsBGSong\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800BF2E\n" - "\tldr r0, _0800BECC\n" - "\tcmp r6, r0\n" - "\tbeq _0800BF2E\n" - "\tldr r0, _0800BED0\n" - "\tldrh r0, [r0]\n" - "\tcmp r6, r0\n" - "\tbne _0800BEBE\n" - "\tldr r0, _0800BED4\n" - "\tldrh r0, [r0]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbls _0800BF2E\n" -"_0800BEBE:\n" - "\tmovs r0, 0x80\n" - "\tlsls r0, 1\n" - "\tcmp r5, r0\n" - "\tbls _0800BED8\n" - "\tmovs r5, 0x10\n" - "\tb _0800BEE0\n" - "\t.align 2, 0\n" -"_0800BECC: .4byte 0x000003e7\n" -"_0800BED0: .4byte gUnknown_202D68A\n" -"_0800BED4: .4byte gUnknown_202D688\n" -"_0800BED8:\n" - "\tlsrs r5, r4, 20\n" - "\tcmp r5, 0\n" - "\tbne _0800BEE0\n" - "\tmovs r5, 0x1\n" -"_0800BEE0:\n" - "\tbl DisableInterrupts\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r0, _0800BF34\n" - "\tstrh r6, [r0]\n" - "\tldr r1, _0800BF38\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tldr r0, _0800BF3C\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _0800BF26\n" - "\tldr r0, _0800BF40\n" - "\tmovs r1, 0x1\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r6, 0\n" - "\tbl m4aSongNumStart\n" - "\tldr r4, _0800BF44\n" - "\tadds r0, r4, 0\n" - "\tbl m4aMPlayImmInit\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0xFF\n" - "\tmovs r2, 0\n" - "\tbl m4aMPlayVolumeControl\n" - "\tadds r0, r6, 0\n" - "\tbl m4aSongNumStop\n" - "\tadds r0, r4, 0\n" - "\tadds r1, r5, 0\n" - "\tbl m4aMPlayFadeIn\n" -"_0800BF26:\n" - "\tcmp r7, 0\n" - "\tbeq _0800BF2E\n" - "\tbl EnableInterrupts\n" -"_0800BF2E:\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0800BF34: .4byte gUnknown_202D68A\n" -"_0800BF38: .4byte gUnknown_202D694\n" -"_0800BF3C: .4byte gUnknown_202D690\n" -"_0800BF40: .4byte gUnknown_202D688\n" -"_0800BF44: .4byte gUnknown_20008F0"); -#endif } void sub_800BF48(u16 SongIndex) @@ -279,3 +188,53 @@ void sub_800BF80(void) if(interrupt_flag) EnableInterrupts(); } + +void sub_800BFD0(u16 speed) +{ + + u32 comparison; + bool8 interrupt_flag; + + // TODO clean this comparison up + comparison = 0x80 << 17; // 16777216 + if((speed * 65536) > comparison) + { + speed = 16; + } + else + { + if((speed >>= 4) == 0) + { + speed = 1; + } + } + interrupt_flag = DisableInterrupts(); + if(gUnknown_202D690 == 0) + { + if(gUnknown_202D68A != 0x3e7) + { + if(gUnknown_202D688 == 2) + { + gUnknown_202D688 = 3; + m4aMPlayFadeOut(&gUnknown_20008F0, speed); + } + else + { + gUnknown_202D68A = 0x3e7; + m4aMPlayStop(&gUnknown_20008F0); + } + } + } + else + { + gUnknown_202D68A = 0x3e7; + } + gUnknown_202D68C = 0x3e7; + if(interrupt_flag) + EnableInterrupts(); +} + +u16 sub_800C068(void) +{ + return gUnknown_202D68A; +} |