diff --git a/Makefile b/Makefile index 73c96203b..cd70836a4 100755 --- a/Makefile +++ b/Makefile @@ -243,12 +243,12 @@ libagbsyscall: $(BUILD_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ -$(BUILD_DIR)/sym_ewram2.ld: sym_ewram2.txt - $(RAMSCRGEN) ewram_data $< ENGLISH > $@ - $(BUILD_DIR)/sym_iwram.ld: sym_iwram.txt $(RAMSCRGEN) iwram_data $< ENGLISH > $@ +$(BUILD_DIR)/sym_ewram2.ld: sym_ewram2.txt + $(RAMSCRGEN) ewram_data_2 $< ENGLISH > $@ + $(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_ewram2.ld $(BUILD_DIR)/sym_iwram.ld cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld diff --git a/include/music.h b/include/music.h index df7230d07..dab7729d2 100644 --- a/include/music.h +++ b/include/music.h @@ -49,6 +49,8 @@ void nullsub_20(u16 songIndex); #define STOP_BGM 999 #define MAX_VOLUME 256 +#define NUM_BG_PLAYERS (INDEX_FANFARE - INDEX_BGM) + 1 // 2 +#define NUM_SE_PLAYERS (INDEX_SE6 - INDEX_SE1) + 1 // 6 enum MusicPlayerIndex { diff --git a/ld_script.txt b/ld_script.txt index 7a93d4038..56ef49cb8 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -10,6 +10,7 @@ SECTIONS { ALIGN(4) { ewram_start = .; + data/sound_data.o(.bss); INCLUDE "sym_ewram.ld" src/agb_flash.o(.bss); *libgcc.a:fp-bit.o(.bss); diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 3c2a3f8c3..552bcfcbc 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -1,10 +1,58 @@ + + .equiv TRACK_SIZE, 0x50 + .equiv NUM_TRACKS_BGM, 12 + .equiv NUM_TRACKS_FANFARE, 6 + .equiv NUM_TRACKS_SE1, 1 + .equiv NUM_TRACKS_SE2, 1 + .equiv NUM_TRACKS_SE3, 2 + .equiv NUM_TRACKS_SE4, 2 + .equiv NUM_TRACKS_SE5, 2 + .equiv NUM_TRACKS_SE6, 1 + + .bss + +gMPlayTrack_BGM:: + .space TRACK_SIZE * NUM_TRACKS_BGM + .size gMPlayTrack_BGM, .-gMPlayTrack_BGM + +gMPlayTrack_Fanfare:: + .space TRACK_SIZE * NUM_TRACKS_FANFARE + .size gMPlayTrack_Fanfare, .-gMPlayTrack_Fanfare + +gMPlayTrack_SE1:: + .space TRACK_SIZE * NUM_TRACKS_SE1 + .size gMPlayTrack_SE1, .-gMPlayTrack_SE1 + +gMPlayTrack_SE2:: + .space TRACK_SIZE * NUM_TRACKS_SE2 + .size gMPlayTrack_SE2, .-gMPlayTrack_SE2 + +gMPlayTrack_SE3:: + .space TRACK_SIZE * NUM_TRACKS_SE3 + .size gMPlayTrack_SE3, .-gMPlayTrack_SE3 + +gMPlayTrack_SE4:: + .space TRACK_SIZE * NUM_TRACKS_SE4 + .size gMPlayTrack_SE4, .-gMPlayTrack_SE4 + +gMPlayTrack_SE5:: + .space TRACK_SIZE * NUM_TRACKS_SE5 + .size gMPlayTrack_SE5, .-gMPlayTrack_SE5 + +gMPlayTrack_SE6:: + .space TRACK_SIZE * NUM_TRACKS_SE6 + .size gMPlayTrack_SE6, .-gMPlayTrack_SE6 + + .section .rodata + .align 2 gMPlayTable:: @ 9E8665C - music_player gMPlayInfo_BGM, gMPlayTrack_BGM, 12, 0 - music_player gMPlayInfo_Fanfare, gMPlayTrack_Fanfare, 6, 0 - music_player gMPlayInfo_SE1, gMPlayTrack_SE1, 1, 0 - music_player gMPlayInfo_SE2, gMPlayTrack_SE2, 1, 0 - music_player gMPlayInfo_SE3, gMPlayTrack_SE3, 2, 0 - music_player gMPlayInfo_SE4, gMPlayTrack_SE4, 2, 0 - music_player gMPlayInfo_SE5, gMPlayTrack_SE5, 2, 0 - music_player gMPlayInfo_SE6, gMPlayTrack_SE6, 1, 0 + music_player gMPlayInfo_BGM, gMPlayTrack_BGM, NUM_TRACKS_BGM, 0 + music_player gMPlayInfo_Fanfare, gMPlayTrack_Fanfare, NUM_TRACKS_FANFARE, 0 + music_player gMPlayInfo_SE1, gMPlayTrack_SE1, NUM_TRACKS_SE1, 0 + music_player gMPlayInfo_SE2, gMPlayTrack_SE2, NUM_TRACKS_SE2, 0 + music_player gMPlayInfo_SE3, gMPlayTrack_SE3, NUM_TRACKS_SE3, 0 + music_player gMPlayInfo_SE4, gMPlayTrack_SE4, NUM_TRACKS_SE4, 0 + music_player gMPlayInfo_SE5, gMPlayTrack_SE5, NUM_TRACKS_SE5, 0 + music_player gMPlayInfo_SE6, gMPlayTrack_SE6, NUM_TRACKS_SE6, 0 + diff --git a/src/code_80001DC.c b/src/code_80001DC.c index 6bcdcc9bc..da97e8e06 100644 --- a/src/code_80001DC.c +++ b/src/code_80001DC.c @@ -1,6 +1,7 @@ +#include "gba/defines.h" #include "global.h" -extern u32 gUnknown_3004000; +IWRAM_DATA u32 gUnknown_3004000 = {0}; // unused, returns stack pointer u32 sub_80001DC() { diff --git a/src/code_8023144.c b/src/code_8023144.c index ef1fdff54..8ea1fa449 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -34,7 +34,7 @@ struct unkStruct_3001B5C u8 unk3F8[4]; }; -extern struct unkStruct_3001B5C *gUnknown_3001B5C; +IWRAM_DATA struct unkStruct_3001B5C *gUnknown_3001B5C; extern u32 gUnknown_203B298; extern u16 gUnknown_203B29C; diff --git a/src/flash.c b/src/flash.c index 0ef93e7c6..e7b020565 100644 --- a/src/flash.c +++ b/src/flash.c @@ -3,7 +3,7 @@ #include "flash.h" #include "memory.h" -EWRAM_DATA u8 gFlashEnabled; +u8 gFlashEnabled; extern FlashIntrFunc *GetInterruptHandler(s32); diff --git a/src/ground_map.c b/src/ground_map.c index 0f882332a..ff5926406 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -3,12 +3,12 @@ #include "debug.h" #include "ground_script.h" -extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C; +IWRAM_DATA struct GroundScript_ExecutePP_1 *gUnknown_3001B6C = {0}; // iwram +IWRAM_DATA u8 *gUnknown_3001B70 = {0}; extern struct DebugLocation gUnknown_8117538[]; extern u8 gUnknown_811736C[]; -extern u8 *gUnknown_3001B70; extern void sub_809D600(void *, u8 *, u32, u32, u32); extern void GroundMap_Reset(void); diff --git a/src/ground_map_2.c b/src/ground_map_2.c index 34bd1d1ce..458b89541 100644 --- a/src/ground_map_2.c +++ b/src/ground_map_2.c @@ -17,12 +17,12 @@ struct unkStruct_3001B74 u32 unk20; }; -extern struct unkStruct_3001B74 *gUnknown_3001B74; +IWRAM_DATA struct unkStruct_3001B74 *gUnknown_3001B74 = {0}; // iwram extern u16 gUnknown_2026E4E; // size: 0x55C -extern u8 *gUnknown_3001B78; +IWRAM_DATA u8 *gUnknown_3001B78 = {0}; // iwram extern u8 gUnknown_8117784[]; extern s16 gUnknown_811E5F4[][2]; diff --git a/src/m4a.c b/src/m4a.c index 3c96c88c7..37ab0afde 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1,9 +1,19 @@ +#include "gba/defines.h" #include "gba/m4a_internal.h" #include "global.h" extern const u8 gCgb3Vol[]; -extern char SoundMainRAM_Buffer[0x400]; +IWRAM_DATA char SoundMainRAM_Buffer[0x400] = {0}; + +extern struct MusicPlayerInfo gMPlayInfo_SE4; +extern struct MusicPlayerInfo gMPlayInfo_SE5; +extern struct MusicPlayerInfo gMPlayInfo_BGM; // BGM?? +extern struct MusicPlayerInfo gMPlayInfo_SE6; +extern struct MusicPlayerInfo gMPlayInfo_Fanfare; +extern struct MusicPlayerInfo gMPlayInfo_SE1; +extern struct MusicPlayerInfo gMPlayInfo_SE3; +extern struct MusicPlayerInfo gMPlayInfo_SE2; extern struct SoundInfo gSoundInfo; diff --git a/src/music.c b/src/music.c index 394052eaa..2e5ad1907 100644 --- a/src/music.c +++ b/src/music.c @@ -12,8 +12,10 @@ EWRAM_DATA u16 gMusicTransitionCounter; EWRAM_DATA bool8 gRestartBGM; extern struct MusicPlayerInfo gMPlayInfo_BGM; // BGM?? -extern struct PMDMusicPlayer gUnknown_3000FD8[8]; -extern struct PMDMusicPlayer gUnknown_3000FE8[8]; + +// IWRAM +IWRAM_DATA struct PMDMusicPlayer gBGMusicPlayers[NUM_BG_PLAYERS] = {0}; +IWRAM_DATA struct PMDMusicPlayer gSEMusicPlayers[NUM_SE_PLAYERS] = {0}; extern bool8 EnableInterrupts(void); extern bool8 DisableInterrupts(void); @@ -40,7 +42,7 @@ void InitMusic(void) gMusicTransitionCounter = 0; gRestartBGM = FALSE; - for(playerIndex = INDEX_BGM, musicPlayer = &gUnknown_3000FD8[0]; playerIndex < INDEX_SE6 + 1; playerIndex++, musicPlayer++) + for(playerIndex = INDEX_BGM, musicPlayer = &gBGMusicPlayers[0]; playerIndex < INDEX_SE6 + 1; playerIndex++, musicPlayer++) { musicPlayer->unk0 = 0; musicPlayer->songIndex = STOP_SOUND_EFFECT; @@ -293,7 +295,7 @@ void PlayFanfareSE(u16 songIndex, u16 volume) if (!IsSoundEffect(songIndex)) return; playerIndex = GetMusicPlayerIndex(songIndex); - musicPlayer = &gUnknown_3000FD8[playerIndex]; // need to load this before comparison to match + musicPlayer = &gBGMusicPlayers[playerIndex]; // need to load this before comparison to match if (playerIndex < INDEX_SE1) nullsub_20(songIndex); else @@ -331,7 +333,7 @@ void SetSoundEffectVolume(u16 songIndex, u16 volume) if ((!IsFanfare(songIndex)) && (IsSoundEffect(songIndex))) { playerIndex = GetMusicPlayerIndex(songIndex); info = gMPlayTable[playerIndex].info; - musicPlayer = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gBGMusicPlayers[playerIndex]; if (playerIndex >= INDEX_SE1) { interrupt_flag = DisableInterrupts(); if (musicPlayer->songIndex == songIndex) { @@ -360,7 +362,7 @@ void StopFanfareSE(u16 songIndex) if (songIndex == STOP_SOUND_EFFECT) { cVar1 = DisableInterrupts(); - for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) + for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gSEMusicPlayers[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) { m4aMPlayStop(gMPlayTable[playerIndex2].info); musicPlayer1->unk0 = 0; @@ -376,7 +378,7 @@ void StopFanfareSE(u16 songIndex) { playerIndex = GetMusicPlayerIndex(songIndex); info = gMPlayTable[playerIndex].info; - musicPlayer = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gBGMusicPlayers[playerIndex]; if (playerIndex < INDEX_SE1) { nullsub_21(songIndex); } @@ -450,7 +452,7 @@ void FadeOutFanfareSE(u16 songIndex, u16 speed) if (songIndex == STOP_SOUND_EFFECT) { cVar1 = DisableInterrupts(); - for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) + for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gSEMusicPlayers[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) { if (musicPlayer1->songIndex != STOP_SOUND_EFFECT) { if (IsMusicPlayerPlaying(playerIndex2)) { @@ -471,7 +473,7 @@ void FadeOutFanfareSE(u16 songIndex, u16 speed) } else if (IsSoundEffect(songIndex)) { playerIndex = GetMusicPlayerIndex(songIndex); - musicPlayer = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gBGMusicPlayers[playerIndex]; playerInfo = gMPlayTable[playerIndex].info; cVar2 = DisableInterrupts(); if (musicPlayer->songIndex != STOP_SOUND_EFFECT) { @@ -546,7 +548,7 @@ bool8 IsFanfareSEPlaying(u16 songIndex) { if (IsSoundEffect(songIndex_u32)) { playerIndex = GetMusicPlayerIndex(songIndex_u32); - musicPlayer = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gBGMusicPlayers[playerIndex]; if ((INDEX_SE1 <= playerIndex) && (musicPlayer->songIndex == songIndex_u32_2)) { return TRUE; } @@ -701,7 +703,7 @@ void UpdateSound(void) } } - for(musicPlayerIndex = INDEX_SE1, musicPlayer = &gUnknown_3000FE8[0]; musicPlayerIndex < INDEX_SE6; musicPlayerIndex++, musicPlayer++) + for(musicPlayerIndex = INDEX_SE1, musicPlayer = &gSEMusicPlayers[0]; musicPlayerIndex < INDEX_SE6; musicPlayerIndex++, musicPlayer++) { if (musicPlayer->songIndex != STOP_SOUND_EFFECT) { diff --git a/sym_ewram.txt b/sym_ewram.txt index e23ab3003..db77488b0 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,26 +1,3 @@ -gMPlayTrack_BGM: /* 2000000 */ - .space 0x3C0 - -gMPlayTrack_Fanfare: /* 20003C0 */ - .space 0x1E0 - -gMPlayTrack_SE1: /* 20005A0 */ - .space 0x50 - -gMPlayTrack_SE2: /* 20005F0 */ - .space 0x50 - -gMPlayTrack_SE3: /* 2000640 */ - .space 0xA0 - -gMPlayTrack_SE4: /* 20006E0 */ - .space 0xA0 - -gMPlayTrack_SE5: /* 2000780 */ - .space 0xA0 - -gMPlayTrack_SE6: /* 2000820 */ - .space 0x50 gMPlayInfo_SE4: /* 2000870 */ .space 0x40 diff --git a/sym_iwram.txt b/sym_iwram.txt index f67fd614a..f415157eb 100644 --- a/sym_iwram.txt +++ b/sym_iwram.txt @@ -1,5 +1,4 @@ -SoundMainRAM_Buffer: /* 3000000 */ - .space 0x400 +.include "src/m4a.o" gUnknown_3000400: /* 3000400 */ .space 0x800 @@ -10,11 +9,7 @@ gUnknown_3000C00: /* 3000C00 */ gUnknown_3000E94: /* 3000E94 */ .space 0x144 -gUnknown_3000FD8: /* 3000FD8 */ - .space 0x10 - -gUnknown_3000FE8: /* 3000FE8 */ - .space 0x30 +.include "src/music.o" gUnknown_3001018: /* 3001018 */ .space 0x180 @@ -44,17 +39,8 @@ gUnknown_3001B64: /* 3001B64 */ gUnknown_3001B68: /* 3001B68 */ .space 0x4 -gUnknown_3001B6C: /* 3001B6C */ - .space 0x4 - -gUnknown_3001B70: /* 3001B70 */ - .space 0x4 - -gUnknown_3001B74: /* 3001B74 */ - .space 0x4 - -gUnknown_3001B78: /* 3001B78 */ - .space 0x4 +.include "src/ground_map.o" +.include "src/ground_map_2.o" gUnknown_3001B7C: /* 3001B7C */ .space 0x4 @@ -74,4 +60,4 @@ gUnknown_3001B8C: /* 3001B8C */ gUnknown_3001B90: /* 3001B90 */ .space 0x2470 -gUnknown_3004000: /* 3004000 */ +.include "src/code_80001DC.o"