diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/music.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/music.c b/src/music.c new file mode 100644 index 0000000..b6fed30 --- /dev/null +++ b/src/music.c @@ -0,0 +1,100 @@ +#include "global.h" +#include "gba/m4a_internal.h" + +extern u8 sub_80023E4(u32); +extern void sub_80118C4(u16); +extern void sub_809C730(); + +extern bool8 DisableInterrupts(); +extern bool8 EnableInterrupts(); +extern void m4aSoundVSyncOn(); +extern void m4aSongNumStart(u16); +extern void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); +extern void m4aSoundVSyncOff(); +extern void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo); + +extern u16 sub_800CAE0(u16); +extern u8 sub_800CACC(u32); +extern u8 sub_800CAAC(u32); +extern void sub_800C3F8(u16, u16); + + +extern u16 gUnknown_202D690; +extern u16 gUnknown_202D68A; +extern u16 gUnknown_202D688; +extern u8 gUnknown_202D694; +extern struct MusicPlayerInfo gUnknown_20008F0; + + +void sub_800C93C(void) +{ + bool8 interrupt_flag; + u16 temp; + + sub_800C3F8(0x3e5, 0x10); + sub_800C3F8(0x3e6, 0x10); + + interrupt_flag = DisableInterrupts(); + if(gUnknown_202D690 == 0) + { + if(gUnknown_202D68A != 0x3e7) + { + temp = gUnknown_202D688 - 1; + if(temp <= 1) + { + if(gUnknown_202D688 == 2) + { + gUnknown_202D694 = gUnknown_202D690; + } + else + { + if(gUnknown_202D688 == 1) + { + gUnknown_202D694 = 1; + } + } + gUnknown_202D688 = 4; + } + } + } + m4aMPlayStop(&gUnknown_20008F0); + m4aSoundVSyncOff(); + if(interrupt_flag) + { + EnableInterrupts(); + } +} + +void sub_800C9CC(void) +{ + bool8 interrupt_flag = DisableInterrupts(); + m4aSoundVSyncOn(); + if(gUnknown_202D690 == 0) + { + if(gUnknown_202D68A != 0x3e7) + { + if(gUnknown_202D688 == 4) + { + gUnknown_202D688 = 1; + if(gUnknown_202D694 != 0) + { + m4aSongNumStart(gUnknown_202D68A); + } + else + { + m4aMPlayContinue(&gUnknown_20008F0); + } + } + } + } + if(interrupt_flag) + { + EnableInterrupts(); + } + +} + +void nullsub_179(void) +{ +} + |