diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-01-07 16:10:24 -0600 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2021-01-09 10:33:29 -0600 |
commit | ec192a8fa80c389c67878d3da9f9faeb07b1451f (patch) | |
tree | ce0ee74fdae92286e4ae091196bb5044c6a1f768 /src/music_pre.c | |
parent | 469212f7ee42d04e3160d357ed1f088f12edd391 (diff) |
5% wooo
Diffstat (limited to 'src/music_pre.c')
-rw-r--r-- | src/music_pre.c | 225 |
1 files changed, 190 insertions, 35 deletions
diff --git a/src/music_pre.c b/src/music_pre.c index 4260ea1..42a8cb0 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -2,24 +2,33 @@ #include "gba/io_reg.h" #include "m4a.h" #include "bg.h" +#include "music.h" -extern void nullsub_19(void); -extern void nullsub_20(u16 songIndex); extern bool8 EnableInterrupts(void); extern bool8 DisableInterrupts(void); -extern bool8 IsBGSong(u32); +extern void SoundBiasReset(); +extern void SoundBiasSet(); +extern void SetInterruptFlag(u16); +extern void nullsub_25(); +extern void nullsub_18(); extern void sub_800C298(u16 r0); -extern u16 sub_800CAE0(u16); -extern u32 gUnknown_202D5F0[]; -extern u16 gUnknown_202D688; -extern u16 gUnknown_202D68A; +typedef void (*IntrCallback)(void); +extern IntrCallback gUnknown_202D5F0[]; + +extern u32 gUnknown_203B0A0; +extern u16 gBGMusicPlayerState; +extern u16 gCurrentBGSong; extern u16 gUnknown_202D68C; extern u16 gUnknown_202D68E; extern u16 gUnknown_202D690; extern u16 gUnknown_202D692; extern u8 gUnknown_202D694; +extern u8 gUnknown_203B099; +extern u8 gUnknown_203B09B; +extern u32 gUnknown_203B09C; +extern u8 gUnknown_203B09A; struct unkStruct_3000FD8 { @@ -40,6 +49,152 @@ extern struct BGControlStruct gUnknown_202D6A8; extern struct BGControlStruct gUnknown_202D6B0; void sub_800BF80(void); +void xxx_update_bg_sound_input(void); + +void sub_800BA5C(void) +{ + if(gUnknown_203B09A != 0) + { + gUnknown_203B09C++; + xxx_update_bg_sound_input(); + } + gUnknown_203B09A = 1; + gUnknown_203B09B = 0; + gUnknown_203B09C = 0; + nullsub_25(); + + while(REG_VCOUNT > 159){} + + gUnknown_203B099 = 1; + VBlankIntrWait(); + nullsub_18(); +} + +#ifdef NONMATCHING +void xxx_update_bg_sound_input(void) +{ + u8 store; + store = gUnknown_203B09B; + if(gUnknown_203B09B != 0){ + gUnknown_203B09C++; + } + else { + gUnknown_203B09B = 1; + gUnknown_203B09A = store; + gUnknown_203B09C = store; + UpdateBGControlRegisters(); + if(gUnknown_203B099 != 0) + UpdateSound(); + UpdateInput(); + gUnknown_203B099 = store; + gUnknown_203B0A4 = gUnknown_203B0A0; + } +} +#else +NAKED +void xxx_update_bg_sound_input(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tldr r1, _0800BACC\n" + "\tldrb r4, [r1]\n" + "\tcmp r4, 0\n" + "\tbeq _0800BAD4\n" + "\tldr r1, _0800BAD0\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstr r0, [r1]\n" + "\tb _0800BAFE\n" + "\t.align 2, 0\n" +"_0800BACC: .4byte gUnknown_203B09B\n" +"_0800BAD0: .4byte gUnknown_203B09C\n" +"_0800BAD4:\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0800BB04\n" + "\tstrb r4, [r0]\n" + "\tldr r0, _0800BB08\n" + "\tstr r4, [r0]\n" + "\tbl UpdateBGControlRegisters\n" + "\tldr r5, _0800BB0C\n" + "\tldrb r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbeq _0800BAF0\n" + "\tbl UpdateSound\n" +"_0800BAF0:\n" + "\tbl UpdateInput\n" + "\tstrb r4, [r5]\n" + "\tldr r0, _0800BB10\n" + "\tldr r1, _0800BB14\n" + "\tldr r1, [r1]\n" + "\tstr r1, [r0]\n" +"_0800BAFE:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0800BB04: .4byte gUnknown_203B09A\n" +"_0800BB08: .4byte gUnknown_203B09C\n" +"_0800BB0C: .4byte gUnknown_203B099\n" +"_0800BB10: .4byte gUnknown_203B0A4\n" +"_0800BB14: .4byte gUnknown_203B0A0"); +} +#endif + +void Timer3Intr(void) +{ + if(gUnknown_202D5F0[4]) + gUnknown_202D5F0[4](); + SetInterruptFlag(INTR_FLAG_TIMER3); +} + +// Unused +u32 sub_800BB34(void) +{ + return gUnknown_203B0A0; +} + +void nullsub_178(void) +{ +} + +// Unused +void sub_800BB44(void) +{ + u16 ie_store; + u16 dispcnt_store; + bool8 interrupt_flag; + + while(REG_KEYINPUT != 0x3ff){} + + interrupt_flag = DisableInterrupts(); + + while(REG_VCOUNT <= 159){} + + dispcnt_store = REG_DISPCNT; + REG_DISPCNT = 0x80; + + *(vu16 *)BG_PLTT = 0x7fff; + + ie_store = REG_IE; + REG_IE = INTR_FLAG_KEYPAD | INTR_FLAG_GAMEPAK; + + REG_KEYCNT = 0x8304; + REG_IME = 1; + + SoundBiasReset(); + asm("swi 0x3"); + SoundBiasSet(); + + REG_IME = 0; + REG_IE = ie_store; + REG_KEYCNT = 0; + REG_DISPCNT = dispcnt_store; + *(vu16 *)BG_PLTT = 0; + + if(interrupt_flag) + EnableInterrupts(); + while(REG_KEYINPUT != 0x3ff){} +} void nullsub_17(void) { @@ -104,9 +259,9 @@ void sub_800BD08(void) m4aSoundInit(); - gUnknown_202D688 = 0; - gUnknown_202D68A = 0x3e7; - gUnknown_202D68C = 0x3e7; + gBGMusicPlayerState = 0; + gCurrentBGSong = 999; + gUnknown_202D68C = 999; gUnknown_202D68E = 0x3e5; gUnknown_202D690 = 0; gUnknown_202D692 = 0; @@ -138,18 +293,18 @@ void sub_800BDDC(void) } -void sub_800BDFC(u16 songIndex) +void StartNewBGM(u16 songIndex) { bool8 interrupt_flag; u16 temp_store; if(!IsBGSong(songIndex)) return; - if(songIndex == 0x3e7) + if(songIndex == 999) return; - if(songIndex == gUnknown_202D68A) + if(songIndex == gCurrentBGSong) { - temp_store = gUnknown_202D688 - 1; + temp_store = gBGMusicPlayerState - 1; if(temp_store <= 1) return; } @@ -159,12 +314,12 @@ void sub_800BDFC(u16 songIndex) return; } interrupt_flag = DisableInterrupts(); - gUnknown_202D68A = songIndex; + gCurrentBGSong = songIndex; gUnknown_202D694 = 1; if(gUnknown_202D690 == 0) { - gUnknown_202D688 = 1; + gBGMusicPlayerState = 1; m4aSongNumStart(songIndex); } if(interrupt_flag) @@ -178,11 +333,11 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) if(!IsBGSong(SongIndex)) return; - if(SongIndex == 0x3e7) + if(SongIndex == 999) return; - if(SongIndex == gUnknown_202D68A) + if(SongIndex == gCurrentBGSong) { - temp_store = gUnknown_202D688 - 1; + temp_store = gBGMusicPlayerState - 1; if((temp_store) <= 1) return; } @@ -201,12 +356,12 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) } interrupt_flag = DisableInterrupts(); - gUnknown_202D68A = SongIndex; + gCurrentBGSong = SongIndex; gUnknown_202D694 = 1; if(gUnknown_202D690 == 0) { - gUnknown_202D688 = 1; + gBGMusicPlayerState = 1; m4aSongNumStart(SongIndex); m4aMPlayImmInit(&gUnknown_20008F0); m4aMPlayVolumeControl(&gUnknown_20008F0, 0xFF, 0); @@ -219,10 +374,10 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) void sub_800BF48(u16 SongIndex) { - u16 preload = gUnknown_202D68A; - if(preload == 0x3e7) + u16 preload = gCurrentBGSong; + if(preload == 999) { - sub_800BDFC(SongIndex); + StartNewBGM(SongIndex); gUnknown_202D68C = preload; return; } @@ -234,13 +389,13 @@ void sub_800BF80(void) bool8 interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { m4aMPlayStop(&gUnknown_20008F0); } } - gUnknown_202D68A = 0x3e7; - gUnknown_202D68C = 0x3e7; + gCurrentBGSong = 999; + gUnknown_202D68C = 999; if(interrupt_flag) EnableInterrupts(); } @@ -267,30 +422,30 @@ void sub_800BFD0(u16 speed) interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { - if(gUnknown_202D688 == 2) + if(gBGMusicPlayerState == 2) { - gUnknown_202D688 = 3; + gBGMusicPlayerState = 3; m4aMPlayFadeOut(&gUnknown_20008F0, speed); } else { - gUnknown_202D68A = 0x3e7; + gCurrentBGSong = 999; m4aMPlayStop(&gUnknown_20008F0); } } } else { - gUnknown_202D68A = 0x3e7; + gCurrentBGSong = 999; } - gUnknown_202D68C = 0x3e7; + gUnknown_202D68C = 999; if(interrupt_flag) EnableInterrupts(); } -u16 sub_800C068(void) +u16 GetCurrentBGSong(void) { - return gUnknown_202D68A; + return gCurrentBGSong; } |