summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/music.s83
-rw-r--r--include/m4a.h1
-rw-r--r--src/music_pre.c147
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;
+}