From b426b333f7dd6cdf3e6babc052526e53c996f07d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 8 Nov 2020 15:27:37 -0600 Subject: used m4a2s from ipatix to do an initial dump of audio and started working on audio part of pmd --- src/music.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/music.c (limited to 'src/music.c') 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) +{ +} + -- cgit v1.2.3 From 0578f4a0623b0e3078f922c37a587d6bbafdbf4d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 10 Nov 2020 13:54:27 -0600 Subject: more work on music.c and few more funcs --- src/music.c | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 180 insertions(+), 4 deletions(-) (limited to 'src/music.c') diff --git a/src/music.c b/src/music.c index b6fed30..7767f16 100644 --- a/src/music.c +++ b/src/music.c @@ -1,6 +1,8 @@ #include "global.h" #include "gba/m4a_internal.h" +#define NUM_BG_SONGS 128 + extern u8 sub_80023E4(u32); extern void sub_80118C4(u16); extern void sub_809C730(); @@ -13,18 +15,23 @@ 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 void Random(); +extern void sub_800BA5C(); +extern void xxx_update_bg_sound_input(); extern u16 gUnknown_202D690; extern u16 gUnknown_202D68A; extern u16 gUnknown_202D688; extern u8 gUnknown_202D694; +extern u32 gUnknown_203B0B8; +extern u16 gUnknown_203B0BC; extern struct MusicPlayerInfo gUnknown_20008F0; +bool8 IsBGSong(u32); +bool8 sub_800CAAC(u32); +bool8 sub_800CACC(u32); +u16 sub_800CAE0(u16); void sub_800C93C(void) { @@ -98,3 +105,172 @@ void nullsub_179(void) { } +#ifndef NONMATCHING +NAKED +#endif +u8 sub_800CA38(u32 songIndex) +{ +#ifdef NONMATCHING + if(IsBGSong(songIndex)) + { + if(sub_800CAE0(songIndex) == 0) + { + return 1; + } + } + if(sub_800CACC(songIndex)) + { + // TODO compiler gets weird here wanted to skip to next check + if(sub_800CAE0(songIndex) == 1) + { + _0800CA70: + return 1; + } + } + if(sub_800CAAC(songIndex)) + { + if((sub_800CAE0(songIndex) > 1)) + { + goto _0800CA70; + } + } + return 0; +#else + asm_unified("\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tbl IsBGSong\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA54\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA70\n" +"_0800CA54:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_800CACC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA74\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x1\n" + "\tbne _0800CA90\n" +"_0800CA70:\n" + "\tmovs r0, 0x1\n" + "\tb _0800CA92\n" +"_0800CA74:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_800CAAC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA90\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x1\n" + "\tbhi _0800CA70\n" +"_0800CA90:\n" + "\tmovs r0, 0\n" +"_0800CA92:\n" + "\tpop {r4}\n" + "\tpop {r1}\n" + "\tbx r1"); +#endif +} + +void nullsub_19(void) +{ +} + +bool8 IsBGSong(u32 songIndex) +{ + if(songIndex <= NUM_BG_SONGS) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_800CAAC(u32 songIndex) +{ + if(songIndex - 300 <= 639) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_800CACC(u32 songIndex) +{ + if(songIndex - 200 <= 19) + { + return TRUE; + } + return FALSE; +} + +u16 sub_800CAE0(u16 songIndex) +{ + return gSongTable[songIndex].ms; +} + +bool8 sub_800CAF0(u16 songIndex) +{ + // Had to cast this.. m4a_internal header has this as u32 + if((u16)gMPlayTable[songIndex].info->status == 0) + { + return 0; + } + return 1; +} + +void nullsub_20(void) +{ +} + +void nullsub_21(void) +{ +} + +void sub_800CB20(void) +{ + sub_800BA5C(); + gUnknown_203B0B8++; + if((gUnknown_203B0BC & 5) != 0) + { + Random(); + } + Random(); +} + +u32 sub_800CB50(void) +{ + return gUnknown_203B0B8; +} + +void nullsub_180(void) +{ +} + +void xxx_call_update_bg_sound_input(void) +{ + xxx_update_bg_sound_input(); +} + +void nullsub_181(void) +{ +} + +u32 sub_800CB70(void) +{ + return 0; +} + -- cgit v1.2.3 From 6e33dcb93724d51d7f3db1eac0adbfb3cb4f4128 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 17 Nov 2020 22:20:28 -0600 Subject: more work on music functions --- src/music.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/music.c') diff --git a/src/music.c b/src/music.c index 7767f16..13544d9 100644 --- a/src/music.c +++ b/src/music.c @@ -1,5 +1,5 @@ #include "global.h" -#include "gba/m4a_internal.h" +#include "m4a.h" #define NUM_BG_SONGS 128 @@ -9,24 +9,18 @@ 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 void sub_800C3F8(u16, u16); extern void Random(); extern void sub_800BA5C(); extern void xxx_update_bg_sound_input(); -extern u16 gUnknown_202D690; -extern u16 gUnknown_202D68A; extern u16 gUnknown_202D688; +extern u16 gUnknown_202D68A; +extern u16 gUnknown_202D690; extern u8 gUnknown_202D694; extern u32 gUnknown_203B0B8; extern u16 gUnknown_203B0BC; -extern struct MusicPlayerInfo gUnknown_20008F0; bool8 IsBGSong(u32); bool8 sub_800CAAC(u32); @@ -232,7 +226,7 @@ bool8 sub_800CAF0(u16 songIndex) return 1; } -void nullsub_20(void) +void nullsub_20(u16 songIndex) { } -- cgit v1.2.3 From 2c64b5692f3df0c46cfa1610a51cd7de7a0017fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Na=C5=9Bciszewski?= Date: Sun, 13 Dec 2020 19:50:37 +0100 Subject: Fix a lot of nonmatchings, some were plain wrong code --- src/music.c | 61 +++---------------------------------------------------------- 1 file changed, 3 insertions(+), 58 deletions(-) (limited to 'src/music.c') diff --git a/src/music.c b/src/music.c index 13544d9..8997887 100644 --- a/src/music.c +++ b/src/music.c @@ -99,12 +99,8 @@ void nullsub_179(void) { } -#ifndef NONMATCHING -NAKED -#endif u8 sub_800CA38(u32 songIndex) { -#ifdef NONMATCHING if(IsBGSong(songIndex)) { if(sub_800CAE0(songIndex) == 0) @@ -114,70 +110,19 @@ u8 sub_800CA38(u32 songIndex) } if(sub_800CACC(songIndex)) { - // TODO compiler gets weird here wanted to skip to next check if(sub_800CAE0(songIndex) == 1) { - _0800CA70: return 1; } } - if(sub_800CAAC(songIndex)) + else if(sub_800CAAC(songIndex)) { - if((sub_800CAE0(songIndex) > 1)) + if(sub_800CAE0(songIndex) > 1) { - goto _0800CA70; + return 1; } } return 0; -#else - asm_unified("\tpush {r4,lr}\n" - "\tadds r4, r0, 0\n" - "\tbl IsBGSong\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA54\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA70\n" -"_0800CA54:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CACC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA74\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbne _0800CA90\n" -"_0800CA70:\n" - "\tmovs r0, 0x1\n" - "\tb _0800CA92\n" -"_0800CA74:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CAAC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA90\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbhi _0800CA70\n" -"_0800CA90:\n" - "\tmovs r0, 0\n" -"_0800CA92:\n" - "\tpop {r4}\n" - "\tpop {r1}\n" - "\tbx r1"); -#endif } void nullsub_19(void) -- cgit v1.2.3