Sync Makefile and common syms (#676)

This commit is contained in:
GriffinR
2024-11-26 12:46:12 -05:00
committed by GitHub
parent b76867fc3b
commit 2a3e92e10f
89 changed files with 271 additions and 535 deletions
+51 -57
View File
@@ -150,12 +150,20 @@ ifneq (,$(MAKECMDGOALS))
endif endif
endif endif
.SHELLSTATUS ?= 0
ifeq ($(SETUP_PREREQS),1) ifeq ($(SETUP_PREREQS),1)
# If set on: Default target or a rule requiring a scan # If set on: Default target or a rule requiring a scan
# Forcibly execute `make tools` since we need them for what we are doing. # Forcibly execute `make tools` since we need them for what we are doing.
$(call infoshell, $(MAKE) -f make_tools.mk) $(foreach line, $(shell $(MAKE) -f make_tools.mk | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
ifneq ($(.SHELLSTATUS),0)
$(error Errors occurred while building tools. See error messages above for more details)
endif
# Oh and also generate mapjson sources before we use `SCANINC`. # Oh and also generate mapjson sources before we use `SCANINC`.
$(call infoshell, $(MAKE) generated) $(foreach line, $(shell $(MAKE) generated | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
ifneq ($(.SHELLSTATUS),0)
$(error Errors occurred while generating map-related sources. See error messages above for more details)
endif
endif endif
# Collect sources # Collect sources
@@ -237,7 +245,10 @@ include spritesheet_rules.mk
include json_data_rules.mk include json_data_rules.mk
include audio_rules.mk include audio_rules.mk
# NOTE: Tools must have been built prior (FIXME)
# so you can't really call this rule directly
generated: $(AUTO_GEN_TARGETS) generated: $(AUTO_GEN_TARGETS)
@: # Silence the "Nothing to be done for `generated'" message, which some people were confusing for an error.
%.s: ; %.s: ;
%.png: ; %.png: ;
@@ -252,8 +263,6 @@ generated: $(AUTO_GEN_TARGETS)
%.lz: % ; $(GFX) $< $@ %.lz: % ; $(GFX) $< $@
%.rl: % ; $(GFX) $< $@ %.rl: % ; $(GFX) $< $@
# NOTE: Tools must have been built prior (FIXME)
generated: tools $(AUTO_GEN_TARGETS)
clean-generated: clean-generated:
-rm -f $(AUTO_GEN_TARGETS) -rm -f $(AUTO_GEN_TARGETS)
@@ -287,69 +296,52 @@ endif
# As a side effect, they're evaluated immediately instead of when the rule is invoked. # As a side effect, they're evaluated immediately instead of when the rule is invoked.
# It doesn't look like $(shell) can be deferred so there might not be a better way (Icedude_907: there is soon). # It doesn't look like $(shell) can be deferred so there might not be a better way (Icedude_907: there is soon).
# For C dependencies. $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c
# Args: $1 = Output file without extension (build/assets/src/data), $2 = Input file (src/data.c)
define C_DEP
$(call C_DEP_IMPL,$1,$2,$1)
endef
# Internal implementation details.
# $1: Output file without extension, $2 input file, $3 temp path (if keeping)
define C_DEP_IMPL
$1.o: $2
ifneq ($(KEEP_TEMPS),1) ifneq ($(KEEP_TEMPS),1)
@echo "$$(CC1) <flags> -o $$@ $$<" @echo "$(CC1) <flags> -o $@ $<"
@$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
else else
@$$(CPP) $$(CPPFLAGS) $$< -o $3.i @$(CPP) $(CPPFLAGS) $< -o $*.i
@$$(PREPROC) $3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $3.s @$(PREPROC) $*.i charmap.txt | $(CC1) $(CFLAGS) -o $*.s
@echo -e ".text\n\t.align\t2, 0 @ Don't pad with nop\n" >> $3.s @echo -e ".text\n\t.align\t2, 0\n" >> $*.s
$$(AS) $$(ASFLAGS) -o $$@ $3.s $(AS) $(ASFLAGS) -o $@ $*.s
endif endif
$(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.c
$(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $<
ifneq ($(NODEP),1) ifneq ($(NODEP),1)
$1.d: $2 -include $(addprefix $(OBJ_DIR)/,$(C_SRCS:.c=.d))
$(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $2
-include $1.d
endif
endef
# Create generic rules if no dependency scanning, else create the real rules
ifeq ($(NODEP),1)
$(eval $(call C_DEP,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.c))
else
$(foreach src,$(C_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src))))
endif endif
# Similar methodology for Assembly files $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s
# $1: Output path without extension, $2: Input file (`*.s`) $(AS) $(ASFLAGS) -o $@ $<
define ASM_DEP
$1.o: $2 $(ASM_BUILDDIR)/%.d: $(ASM_SUBDIR)/%.s
$$(AS) $$(ASFLAGS) -o $$@ $$< $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $<
$(call ASM_SCANINC,$1,$2)
endef
# As above but first doing a preprocessor pass
define ASM_DEP_PREPROC
$1.o: $2
$$(PREPROC) $$< charmap.txt | $$(CPP) $(INCLUDE_SCANINC_ARGS) - | $$(PREPROC) -ie $$< charmap.txt | $$(AS) $$(ASFLAGS) -o $$@
$(call ASM_SCANINC,$1,$2)
endef
define ASM_SCANINC
ifneq ($(NODEP),1) ifneq ($(NODEP),1)
$1.d: $2 -include $(addprefix $(OBJ_DIR)/,$(ASM_SRCS:.s=.d))
$(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2
-include $1.d
endif endif
endef
# Dummy rules or real rules $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s
ifeq ($(NODEP),1) $(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@
$(eval $(call ASM_DEP,$(ASM_BUILDDIR)/%,$(ASM_SUBDIR)/%.s))
$(eval $(call ASM_DEP_PREPROC,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.s)) $(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.s
$(eval $(call ASM_DEP_PREPROC,$(DATA_ASM_BUILDDIR)/%,$(DATA_ASM_SUBDIR)/%.s)) $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $<
else
$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(src:%.s=$(OBJ_DIR)/%),$(src)))) ifneq ($(NODEP),1)
$(foreach src, $(C_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) -include $(addprefix $(OBJ_DIR)/,$(C_ASM_SRCS:.s=.d))
$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) endif
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s
$(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@
$(DATA_ASM_BUILDDIR)/%.d: $(DATA_ASM_SUBDIR)/%.s
$(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $<
ifneq ($(NODEP),1)
-include $(addprefix $(OBJ_DIR)/,$(REGULAR_DATA_ASM_SRCS:.s=.d))
endif endif
$(OBJ_DIR)/sym_bss.ld: sym_bss.txt $(OBJ_DIR)/sym_bss.ld: sym_bss.txt
@@ -373,8 +365,10 @@ endif
# Final rules # Final rules
# Elf from object files # Elf from object files
LDFLAGS = -Map ../../$(MAP)
$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS)
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat
@echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ <objs> <libs> | cat"
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent
# Builds the rom from the elf file # Builds the rom from the elf file
-1
View File
@@ -1 +0,0 @@
lman
-10
View File
@@ -1,10 +0,0 @@
gFlashTimeoutFlag
PollFlashStatus
WaitForFlashWrite
ProgramFlashSector
gFlash
ProgramFlashByte
gFlashNumRemainingBytes
EraseFlashChip
EraseFlashSector
gFlashMaxTime
-3
View File
@@ -1,3 +0,0 @@
gMonShrinkDuration
gMonShrinkDelta
gMonShrinkDistance
@@ -1 +0,0 @@
gPokedudeBattlerStates
-9
View File
@@ -1,9 +0,0 @@
gPreBattleCallback1
gBattleMainFunc
gBattleResults
gLeveledUpInBattle
gBattlerControllerFuncs
gHealthboxSpriteIds
gMultiUsePlayerCursor
gNumberOfMovesToChoose
gBattleControllerData
-4
View File
@@ -1,4 +0,0 @@
gMultibootStart
gMultibootStatus
gMultibootSize
gMultibootParam
-1
View File
@@ -1 +0,0 @@
gWindowTileAutoAllocEnabled
-1
View File
@@ -1 +0,0 @@
UnusedVarNeededToMatch
-1
View File
@@ -1 +0,0 @@
gEReaderData
-1
View File
@@ -1 +0,0 @@
gLastQuestLogStoredFlagOrVarIdx
-1
View File
@@ -1 +0,0 @@
gCB2_AfterEvolution
-2
View File
@@ -1,2 +0,0 @@
gFameChecker_ListMenuTemplate
gIconDescriptionBoxIsOpen
-3
View File
@@ -1,3 +0,0 @@
gFieldCamera
gTotalCameraPixelOffsetY
gTotalCameraPixelOffsetX
-1
View File
@@ -1 +0,0 @@
gFieldInputRecord
-2
View File
@@ -1,2 +0,0 @@
sFieldSpecialsListMenuTemplate
sFieldSpecialsListMenuScrollBuffer
-1
View File
@@ -1 +0,0 @@
VMap
-2
View File
@@ -1,2 +0,0 @@
gHelpSystemState
gHelpContextIdBackup
-1
View File
@@ -1 +0,0 @@
gHelpSystemEnabled
-10
View File
@@ -1,10 +0,0 @@
gCanvasColumnStart
gCanvasPixels
gCanvasRowEnd
gCanvasHeight
gCanvasColumnEnd
gCanvasRowStart
gCanvasMonPersonality
gCanvasWidth
gCanvasPalette
gCanvasPaletteStart
-5
View File
@@ -1,5 +0,0 @@
gRfuSlotStatusUNI
gRfuSlotStatusNI
gRfuLinkStatus
gRfuStatic
gRfuFixed
-1
View File
@@ -1 +0,0 @@
gRfuSIO32Id
-1
View File
@@ -1 +0,0 @@
gSTWIStatus
-35
View File
@@ -1,35 +0,0 @@
gLinkPartnersHeldKeys
gLinkDebugSeed
gLocalLinkPlayerBlock
gLinkErrorOccurred
gLinkDebugFlags
gLinkFiller1
gRemoteLinkPlayersNotReceived
gBlockReceivedStatus
gLinkFiller2
gLinkHeldKeys
gRecvCmds
gLinkStatus
gLinkDummy1
gLinkDummy2
gReadyToExitStandby
gReadyToCloseLink
gReadyCloseLinkType
gSuppressLinkErrorMessage
gWirelessCommType
gSavedLinkPlayerCount
gSendCmd
gSavedMultiplayerId
gReceivedRemoteLinkPlayers
gLinkTestBGInfo
gLinkCallback
gShouldAdvanceLinkState
gLinkTestBlockChecksums
gBlockRequestType
gLinkFiller3
gLinkFiller4
gLinkFiller5
gLastSendQueueCount
gLink
gLastRecvQueueCount
gLinkSavedIme
-3
View File
@@ -1,3 +0,0 @@
gHostRfuGameData
gRfu
gHostRfuUsername
-2
View File
@@ -1,2 +0,0 @@
gListMenuOverride
gMultiuseListMenuTemplate
-4
View File
@@ -1,4 +0,0 @@
gFlashMemoryPresent
gSaveBlock1Ptr
gSaveBlock2Ptr
gPokemonStoragePtr
-12
View File
@@ -1,12 +0,0 @@
gSoundInfo
gPokemonCrySongs
gPokemonCryMusicPlayers
gMPlayJumpTable
gCgbChans
gPokemonCryTracks
gPokemonCrySong
gMPlayInfo_BGM
gMPlayInfo_SE1
gMPlayInfo_SE2
gMPlayMemAccArea
gMPlayInfo_SE3
-12
View File
@@ -1,12 +0,0 @@
gKeyRepeatStartDelay
gLinkTransferringData
gMain
gKeyRepeatContinueDelay
gSoftResetDisabled
gIntrTable
sVcountAfterSound
gLinkVSyncDisabled
IntrMain_Buffer
sVcountAtIntr
sVcountBeforeSound
gPcmDmaCounter
-8
View File
@@ -1,8 +0,0 @@
gBGTilemapBuffers1
gBGTilemapBuffers2
gBGTilemapBuffers3
gFieldCallback
gFieldCallback2
gHeldKeyCodeToSend
gLocalLinkPlayerId
gFieldLinkPlayerCount
-1
View File
@@ -1 +0,0 @@
gItemUseCB
-4
View File
@@ -1,4 +0,0 @@
gQuestLogPlaybackState
sMaxActionsInScene
gQuestLogFieldInput
sCurSceneActions
-1
View File
@@ -1 +0,0 @@
gRngValue
-12
View File
@@ -1,12 +0,0 @@
gLastWrittenSector
gLastSaveCounter
gLastKnownGoodSector
gDamagedSaveSectors
gSaveCounter
gSaveDataBufferPtr
gIncrementalSectorId
gSaveUnusedVar
gSaveFileStatus
gGameContinueCallback
gRamSaveSectorLocations
gSaveAttemptStatus
-1
View File
@@ -1 +0,0 @@
sIsInSaveFailedScreen
-2
View File
@@ -1,2 +0,0 @@
sQuestLogScriptContextPtr
gSelectedObjectEvent
-1
View File
@@ -1 +0,0 @@
gDisableMusic
-2
View File
@@ -1,2 +0,0 @@
gOamMatrixAllocBitmap
gReservedSpritePaletteCount
-1
View File
@@ -1 +0,0 @@
gTasks
-1
View File
@@ -1 +0,0 @@
gTextFlags
-2
View File
@@ -1,2 +0,0 @@
gFonts
gGlyphInfo
-2
View File
@@ -1,2 +0,0 @@
gWindowClearTile
gWindowBgTilemapBuffers
+1
View File
@@ -13,6 +13,7 @@
#define IWRAM_DATA __attribute__((section("iwram_data"))) #define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data")))
#endif #endif
#define COMMON_DATA __attribute__((section("common_data")))
#if MODERN #if MODERN
#define NOINLINE __attribute__((noinline)) #define NOINLINE __attribute__((noinline))
+1
View File
@@ -38,6 +38,7 @@ SECTIONS {
/* COMMON starts at 0x30030E0 */ /* COMMON starts at 0x30030E0 */
INCLUDE "sym_common.ld" INCLUDE "sym_common.ld"
src/*.o(COMMON);
*libc.a:sbrkr.o(COMMON); *libc.a:sbrkr.o(COMMON);
end = .; end = .;
+1
View File
@@ -30,6 +30,7 @@ SECTIONS {
/* COMMON starts at 0x30022A8 */ /* COMMON starts at 0x30022A8 */
*(COMMON); *(COMMON);
*(common_data);
end = .; end = .;
__end__ = .; __end__ = .;
} > IWRAM } > IWRAM
+1 -1
View File
@@ -14,7 +14,7 @@
#define FSP_ON 0x01 #define FSP_ON 0x01
#define FSP_START 0x02 #define FSP_START 0x02
LINK_MANAGER lman; COMMON_DATA LINK_MANAGER lman = {0};
static void rfu_LMAN_clearVariables(void); static void rfu_LMAN_clearVariables(void);
static void rfu_LMAN_settingPCSWITCH(u32 rand); static void rfu_LMAN_settingPCSWITCH(u32 rand);
+10 -10
View File
@@ -6,16 +6,16 @@ static u16 sTimerCount;
static vu16 *sTimerReg; static vu16 *sTimerReg;
static u16 sSavedIme; static u16 sSavedIme;
u8 gFlashTimeoutFlag; COMMON_DATA u8 gFlashTimeoutFlag = 0;
u8 (*PollFlashStatus)(u8 *); COMMON_DATA u8 (*PollFlashStatus)(u8 *) = NULL;
u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); COMMON_DATA u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData) = NULL;
u16 (*ProgramFlashSector)(u16 sectorNum, void *src); COMMON_DATA u16 (*ProgramFlashSector)(u16 sectorNum, void *src) = NULL;
const struct FlashType *gFlash; COMMON_DATA const struct FlashType *gFlash = NULL;
u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); COMMON_DATA u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data) = NULL;
u16 gFlashNumRemainingBytes; COMMON_DATA u16 gFlashNumRemainingBytes = 0;
u16 (*EraseFlashChip)(); COMMON_DATA u16 (*EraseFlashChip)() = NULL;
u16 (*EraseFlashSector)(u16 sectorNum); COMMON_DATA u16 (*EraseFlashSector)(u16 sectorNum) = NULL;
const u16 *gFlashMaxTime; COMMON_DATA const u16 *gFlashMaxTime = NULL;
void SetReadFlash1(u16 *dest); void SetReadFlash1(u16 *dest);
+3 -3
View File
@@ -30,9 +30,9 @@
#define TAG_PARTICLES_LUXURYBALL 55030 #define TAG_PARTICLES_LUXURYBALL 55030
#define TAG_PARTICLES_PREMIERBALL 55031 #define TAG_PARTICLES_PREMIERBALL 55031
u32 gMonShrinkDuration; COMMON_DATA u32 gMonShrinkDuration = 0;
u16 gMonShrinkDelta; COMMON_DATA u16 gMonShrinkDelta = 0;
u16 gMonShrinkDistance; COMMON_DATA u16 gMonShrinkDistance = 0;
static void AnimTask_UnusedLevelUpHealthBox_Step(u8); static void AnimTask_UnusedLevelUpHealthBox_Step(u8);
static void AnimTask_FlashHealthboxOnLevelUp_Step(u8); static void AnimTask_FlashHealthboxOnLevelUp_Step(u8);
+1 -1
View File
@@ -2424,7 +2424,7 @@ static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[
[TTVSCR_CATCHING] = sParties_Catching, [TTVSCR_CATCHING] = sParties_Catching,
}; };
struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT]; COMMON_DATA struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT] = {0};
static void PokedudeSimulateInputChooseAction(void) static void PokedudeSimulateInputChooseAction(void)
{ {
+9 -9
View File
@@ -220,15 +220,15 @@ EWRAM_DATA u16 gBattleMovePower = 0;
EWRAM_DATA u16 gMoveToLearn = 0; EWRAM_DATA u16 gMoveToLearn = 0;
EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0};
void (*gPreBattleCallback1)(void); COMMON_DATA void (*gPreBattleCallback1)(void) = NULL;
void (*gBattleMainFunc)(void); COMMON_DATA void (*gBattleMainFunc)(void) = NULL;
struct BattleResults gBattleResults; COMMON_DATA struct BattleResults gBattleResults = {0};
u8 gLeveledUpInBattle; COMMON_DATA u8 gLeveledUpInBattle = 0;
void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); COMMON_DATA void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void) = {0};
u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; COMMON_DATA u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT] = {0};
u8 gMultiUsePlayerCursor; COMMON_DATA u8 gMultiUsePlayerCursor = 0;
u8 gNumberOfMovesToChoose; COMMON_DATA u8 gNumberOfMovesToChoose = 0;
u8 gBattleControllerData[MAX_BATTLERS_COUNT]; COMMON_DATA u8 gBattleControllerData[MAX_BATTLERS_COUNT] = {0};
static const struct ScanlineEffectParams sIntroScanlineParams16Bit = static const struct ScanlineEffectParams sIntroScanlineParams16Bit =
{ {
+4 -4
View File
@@ -32,10 +32,10 @@ enum {
STATE_RETRY, STATE_RETRY,
}; };
const void *gMultibootStart; COMMON_DATA const void *gMultibootStart = NULL;
int gMultibootStatus; COMMON_DATA int gMultibootStatus = 0;
size_t gMultibootSize; COMMON_DATA size_t gMultibootSize = 0;
struct MultiBootParam gMultibootParam; COMMON_DATA struct MultiBootParam gMultibootParam = {0};
static void CB2_BerryFix(void); static void CB2_BerryFix(void);
static void Task_BerryFixMain(u8 taskId); static void Task_BerryFixMain(u8 taskId);
+1 -1
View File
@@ -43,7 +43,7 @@ static struct BgConfig2 sGpuBgConfigs2[4];
static u32 sDmaBusyBitfield[4]; static u32 sDmaBusyBitfield[4];
static u8 gpu_tile_allocation_map_bg[0x100]; static u8 gpu_tile_allocation_map_bg[0x100];
bool32 gWindowTileAutoAllocEnabled; COMMON_DATA bool32 gWindowTileAutoAllocEnabled = 0;
static const struct BgConfig sZeroedBgControlStruct = { 0 }; static const struct BgConfig sZeroedBgControlStruct = { 0 };
+1 -1
View File
@@ -27,7 +27,7 @@
#include "constants/field_weather.h" #include "constants/field_weather.h"
#include "constants/maps.h" #include "constants/maps.h"
u32 UnusedVarNeededToMatch[8]; COMMON_DATA u32 UnusedVarNeededToMatch[8] = {0};
static void Task_LinkupStart(u8 taskId); static void Task_LinkupStart(u8 taskId);
static void Task_LinkupAwaitConnection(u8 taskId); static void Task_LinkupAwaitConnection(u8 taskId);
+1 -1
View File
@@ -41,7 +41,7 @@ struct EReaderData
static void Task_EReader(u8); static void Task_EReader(u8);
struct EReaderData gEReaderData; COMMON_DATA struct EReaderData gEReaderData = {0};
extern const u8 gMultiBootProgram_EReader_Start[]; extern const u8 gMultiBootProgram_EReader_Start[];
extern const u8 gMultiBootProgram_EReader_End[]; extern const u8 gMultiBootProgram_EReader_End[];
+1 -1
View File
@@ -35,7 +35,7 @@ EWRAM_DATA u16 gSpecialVar_PrevTextColor = 0;
EWRAM_DATA u16 gSpecialVar_0x8014 = 0; EWRAM_DATA u16 gSpecialVar_0x8014 = 0;
EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {}; EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {};
u16 gLastQuestLogStoredFlagOrVarIdx; COMMON_DATA u16 gLastQuestLogStoredFlagOrVarIdx = 0;
extern u16 *const gSpecialVars[]; extern u16 *const gSpecialVars[];
+1 -1
View File
@@ -43,7 +43,7 @@ static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL;
static EWRAM_DATA u16 *sBgAnimPal = NULL; static EWRAM_DATA u16 *sBgAnimPal = NULL;
// IWRAM common // IWRAM common
void (*gCB2_AfterEvolution)(void); COMMON_DATA void (*gCB2_AfterEvolution)(void) = NULL;
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move #define sEvoCursorPos gBattleCommunication[1] // when learning a new move
#define sEvoGraphicsTaskId gBattleCommunication[2] #define sEvoGraphicsTaskId gBattleCommunication[2]
+2 -2
View File
@@ -57,8 +57,8 @@ static EWRAM_DATA struct FameCheckerData * sFameCheckerData = NULL;
static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL; static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL;
static EWRAM_DATA s32 sLastMenuIdx = 0; static EWRAM_DATA s32 sLastMenuIdx = 0;
struct ListMenuTemplate gFameChecker_ListMenuTemplate; COMMON_DATA struct ListMenuTemplate gFameChecker_ListMenuTemplate = {0};
u8 gIconDescriptionBoxIsOpen; COMMON_DATA u8 gIconDescriptionBoxIsOpen = 0;
static void MainCB2_LoadFameChecker(void); static void MainCB2_LoadFameChecker(void);
static void LoadUISpriteSheetsAndPalettes(void); static void LoadUISpriteSheetsAndPalettes(void);
+3 -3
View File
@@ -37,9 +37,9 @@ static s16 sVerticalCameraPan;
static u8 sBikeCameraPanFlag; static u8 sBikeCameraPanFlag;
static void (*sFieldCameraPanningCallback)(void); static void (*sFieldCameraPanningCallback)(void);
struct CameraObject gFieldCamera; COMMON_DATA struct CameraObject gFieldCamera = {0};
u16 gTotalCameraPixelOffsetY; COMMON_DATA u16 gTotalCameraPixelOffsetY = 0;
u16 gTotalCameraPixelOffsetX; COMMON_DATA u16 gTotalCameraPixelOffsetX = 0;
// text // text
static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset) static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset)
+1 -1
View File
@@ -71,7 +71,7 @@ static bool8 TryDoorWarp(struct MapPosition * position, u16 metatileBehavior, u8
static s8 GetWarpEventAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z); static s8 GetWarpEventAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
static const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z); static const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
struct FieldInput gFieldInputRecord; COMMON_DATA struct FieldInput gFieldInputRecord = {0};
void FieldClearPlayerInput(struct FieldInput *input) void FieldClearPlayerInput(struct FieldInput *input)
{ {
+2 -2
View File
@@ -50,8 +50,8 @@ static EWRAM_DATA u16 sListMenuLastScrollPosition = 0;
static EWRAM_DATA u8 sPCBoxToSendMon = 0; static EWRAM_DATA u8 sPCBoxToSendMon = 0;
static EWRAM_DATA u8 sBrailleTextCursorSpriteID = 0; static EWRAM_DATA u8 sBrailleTextCursorSpriteID = 0;
struct ListMenuTemplate sFieldSpecialsListMenuTemplate; COMMON_DATA struct ListMenuTemplate sFieldSpecialsListMenuTemplate = {0};
u16 sFieldSpecialsListMenuScrollBuffer; COMMON_DATA u16 sFieldSpecialsListMenuScrollBuffer = 0;
static void Task_AnimatePcTurnOn(u8 taskId); static void Task_AnimatePcTurnOn(u8 taskId);
static void PcTurnOnUpdateMetatileId(bool16 flag); static void PcTurnOnUpdateMetatileId(bool16 flag);
+1 -1
View File
@@ -14,7 +14,7 @@ struct ConnectionFlags
u8 east:1; u8 east:1;
}; };
struct BackupMapLayout VMap; COMMON_DATA struct BackupMapLayout VMap = {0};
EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {}; EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {};
EWRAM_DATA struct MapHeader gMapHeader = {}; EWRAM_DATA struct MapHeader gMapHeader = {};
EWRAM_DATA struct Camera gCamera = {}; EWRAM_DATA struct Camera gCamera = {};
+2 -2
View File
@@ -51,8 +51,8 @@ struct HelpSystemState
u8 scrollSub; u8 scrollSub;
}; };
struct HelpSystemState gHelpSystemState; COMMON_DATA struct HelpSystemState gHelpSystemState = {0};
u16 gHelpContextIdBackup; COMMON_DATA u16 gHelpContextIdBackup = 0;
static bool32 IsCurrentMapInArray(const u16 * mapIdxs); static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+1 -1
View File
@@ -10,7 +10,7 @@
#define ZERO 0 #define ZERO 0
bool8 gHelpSystemEnabled; COMMON_DATA bool8 gHelpSystemEnabled = 0;
struct HelpSystemVideoState struct HelpSystemVideoState
{ {
+10 -10
View File
@@ -2,16 +2,16 @@
#include "image_processing_effects.h" #include "image_processing_effects.h"
// IWRAM common // IWRAM common
u8 gCanvasColumnStart; COMMON_DATA u8 gCanvasColumnStart = 0;
u16 (*gCanvasPixels)[][32]; COMMON_DATA u16 (*gCanvasPixels)[][32] = {0};
u8 gCanvasRowEnd; COMMON_DATA u8 gCanvasRowEnd = 0;
u8 gCanvasHeight; COMMON_DATA u8 gCanvasHeight = 0;
u8 gCanvasColumnEnd; COMMON_DATA u8 gCanvasColumnEnd = 0;
u8 gCanvasRowStart; COMMON_DATA u8 gCanvasRowStart = 0;
u8 gCanvasMonPersonality; COMMON_DATA u8 gCanvasMonPersonality = 0;
u8 gCanvasWidth; COMMON_DATA u8 gCanvasWidth = 0;
u16 *gCanvasPalette; COMMON_DATA u16 *gCanvasPalette = NULL;
u16 gCanvasPaletteStart; COMMON_DATA u16 gCanvasPaletteStart = 0;
static void ApplyImageEffect_Pointillism(void); static void ApplyImageEffect_Pointillism(void);
static void ApplyImageEffect_Blur(void); static void ApplyImageEffect_Blur(void);
+5 -5
View File
@@ -68,11 +68,11 @@ static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, con
static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *);
static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *);
struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; COMMON_DATA struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX] = {0};
struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; COMMON_DATA struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX] = {0};
struct RfuLinkStatus *gRfuLinkStatus; COMMON_DATA struct RfuLinkStatus *gRfuLinkStatus = NULL;
struct RfuStatic *gRfuStatic; COMMON_DATA struct RfuStatic *gRfuStatic = NULL;
struct RfuFixed *gRfuFixed; COMMON_DATA struct RfuFixed *gRfuFixed = NULL;
static const struct LLSFStruct llsf_struct[2] = { static const struct LLSFStruct llsf_struct[2] = {
[MODE_CHILD] = { [MODE_CHILD] = {
+1 -1
View File
@@ -15,7 +15,7 @@ struct RfuSIO32Id
u16 lastId; u16 lastId;
}; };
struct RfuSIO32Id gRfuSIO32Id; COMMON_DATA struct RfuSIO32Id gRfuSIO32Id = {0};
static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO
static const char Sio32IDLib_Var[] = "Sio32ID_030820"; static const char Sio32IDLib_Var[] = "Sio32ID_030820";
+1 -1
View File
@@ -8,7 +8,7 @@ static void STWI_stop_timer(void);
static s32 STWI_restart_Command(void); static s32 STWI_restart_Command(void);
static s32 STWI_reset_ClockCounter(void); static s32 STWI_reset_ClockCounter(void);
struct STWIStatus *gSTWIStatus; COMMON_DATA struct STWIStatus *gSTWIStatus = NULL;
void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam)
{ {
+35 -35
View File
@@ -62,41 +62,41 @@ static u16 sRecvNonzeroCheck;
static u8 sChecksumAvailable; static u8 sChecksumAvailable;
static u8 sHandshakePlayerCount; static u8 sHandshakePlayerCount;
u16 gLinkPartnersHeldKeys[6]; COMMON_DATA u16 gLinkPartnersHeldKeys[6] = {0};
u32 gLinkDebugSeed; COMMON_DATA u32 gLinkDebugSeed = 0;
struct LinkPlayerBlock gLocalLinkPlayerBlock; COMMON_DATA struct LinkPlayerBlock gLocalLinkPlayerBlock = {0};
bool8 gLinkErrorOccurred; COMMON_DATA bool8 gLinkErrorOccurred = 0;
u32 gLinkDebugFlags; COMMON_DATA u32 gLinkDebugFlags = 0;
u32 gLinkFiller1; COMMON_DATA u32 gLinkFiller1 = 0;
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; COMMON_DATA bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS] = {0};
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; COMMON_DATA u8 gBlockReceivedStatus[MAX_LINK_PLAYERS] = {0};
u32 gLinkFiller2; COMMON_DATA u32 gLinkFiller2 = 0;
u16 gLinkHeldKeys; COMMON_DATA u16 gLinkHeldKeys = 0;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; COMMON_DATA u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH] = {0};
u32 gLinkStatus; COMMON_DATA u32 gLinkStatus = 0;
bool8 gLinkDummy1; // Never read COMMON_DATA bool8 gLinkDummy1 = 0; // Never read
bool8 gLinkDummy2; // Never read COMMON_DATA bool8 gLinkDummy2 = 0; // Never read
bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; COMMON_DATA bool8 gReadyToExitStandby[MAX_LINK_PLAYERS] = {0};
bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; COMMON_DATA bool8 gReadyToCloseLink[MAX_LINK_PLAYERS] = {0};
u16 gReadyCloseLinkType; COMMON_DATA u16 gReadyCloseLinkType = 0;
u8 gSuppressLinkErrorMessage; COMMON_DATA u8 gSuppressLinkErrorMessage = 0;
u8 gWirelessCommType; COMMON_DATA u8 gWirelessCommType = 0;
u8 gSavedLinkPlayerCount; COMMON_DATA u8 gSavedLinkPlayerCount = 0;
u16 gSendCmd[CMD_LENGTH]; COMMON_DATA u16 gSendCmd[CMD_LENGTH] = {0};
u8 gSavedMultiplayerId; COMMON_DATA u8 gSavedMultiplayerId = 0;
bool8 gReceivedRemoteLinkPlayers; COMMON_DATA bool8 gReceivedRemoteLinkPlayers = 0;
struct LinkTestBGInfo gLinkTestBGInfo; COMMON_DATA struct LinkTestBGInfo gLinkTestBGInfo = {0};
void (*gLinkCallback)(void); COMMON_DATA void (*gLinkCallback)(void) = NULL;
u8 gShouldAdvanceLinkState; COMMON_DATA u8 gShouldAdvanceLinkState = 0;
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; COMMON_DATA u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS] = {0};
u8 gBlockRequestType; COMMON_DATA u8 gBlockRequestType = 0;
u32 gLinkFiller3; // file COMMON_DATA u32 gLinkFiller3 = 0; // file
u32 gLinkFiller4; // boundary COMMON_DATA u32 gLinkFiller4 = 0; // boundary
u32 gLinkFiller5; // here? COMMON_DATA u32 gLinkFiller5 = 0; // here?
u8 gLastSendQueueCount; COMMON_DATA u8 gLastSendQueueCount = 0;
struct Link gLink; COMMON_DATA struct Link gLink = {0};
u8 gLastRecvQueueCount; COMMON_DATA u8 gLastRecvQueueCount = 0;
u16 gLinkSavedIme; COMMON_DATA u16 gLinkSavedIme = 0;
static EWRAM_DATA bool8 sLinkTestDebugValuesEnabled = FALSE; static EWRAM_DATA bool8 sLinkTestDebugValuesEnabled = FALSE;
static EWRAM_DATA bool8 sDummyFlag = FALSE; static EWRAM_DATA bool8 sDummyFlag = FALSE;
+3 -3
View File
@@ -75,9 +75,9 @@ static u32 sRfuAPIBuffer[RFU_API_BUFF_SIZE_RAM / 4];
static u8 sResendBlock8[CMD_LENGTH * 2]; static u8 sResendBlock8[CMD_LENGTH * 2];
static u16 sResendBlock16[CMD_LENGTH]; static u16 sResendBlock16[CMD_LENGTH];
struct RfuGameData gHostRfuGameData; COMMON_DATA struct RfuGameData gHostRfuGameData = {0};
struct RfuManager gRfu; COMMON_DATA struct RfuManager gRfu = {0};
u8 gHostRfuUsername[PLAYER_NAME_LENGTH + 1]; COMMON_DATA u8 gHostRfuUsername[PLAYER_NAME_LENGTH + 1] = {0};
static void InitChildRecvBuffers(void); static void InitChildRecvBuffers(void);
static void InitParentSendData(void); static void InitParentSendData(void);
+2 -2
View File
@@ -39,8 +39,8 @@ struct MoveMenuInfoIcon
static EWRAM_DATA struct MysteryGiftLinkMenuStruct sMysteryGiftLinkMenu = {0}; static EWRAM_DATA struct MysteryGiftLinkMenuStruct sMysteryGiftLinkMenu = {0};
struct ListMenuOverride gListMenuOverride; COMMON_DATA struct ListMenuOverride gListMenuOverride = {0};
struct ListMenuTemplate gMultiuseListMenuTemplate; COMMON_DATA struct ListMenuTemplate gMultiuseListMenuTemplate = {0};
static u8 ListMenuInitInternal(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove); static u8 ListMenuInitInternal(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown); static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
+4 -4
View File
@@ -37,10 +37,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
EWRAM_DATA u32 gLastEncryptionKey = 0; EWRAM_DATA u32 gLastEncryptionKey = 0;
// IWRAM common // IWRAM common
bool32 gFlashMemoryPresent; COMMON_DATA bool32 gFlashMemoryPresent = 0;
struct SaveBlock1 *gSaveBlock1Ptr; COMMON_DATA struct SaveBlock1 *gSaveBlock1Ptr = NULL;
struct SaveBlock2 *gSaveBlock2Ptr; COMMON_DATA struct SaveBlock2 *gSaveBlock2Ptr = NULL;
struct PokemonStorage *gPokemonStoragePtr; COMMON_DATA struct PokemonStorage *gPokemonStoragePtr = NULL;
void CheckForFlashMemory(void) void CheckForFlashMemory(void)
{ {
+12 -12
View File
@@ -7,18 +7,18 @@ extern const u8 gCgb3Vol[];
BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0};
struct SoundInfo gSoundInfo; COMMON_DATA struct SoundInfo gSoundInfo = {0};
struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; COMMON_DATA struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES] = {0};
struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; COMMON_DATA struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES] = {0};
MPlayFunc gMPlayJumpTable[36]; COMMON_DATA MPlayFunc gMPlayJumpTable[36] = {0};
struct CgbChannel gCgbChans[4]; COMMON_DATA struct CgbChannel gCgbChans[4] = {0};
struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; COMMON_DATA struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2] = {0};
struct PokemonCrySong gPokemonCrySong; COMMON_DATA struct PokemonCrySong gPokemonCrySong = {0};
struct MusicPlayerInfo gMPlayInfo_BGM; COMMON_DATA struct MusicPlayerInfo gMPlayInfo_BGM = {0};
struct MusicPlayerInfo gMPlayInfo_SE1; COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE1 = {0};
struct MusicPlayerInfo gMPlayInfo_SE2; COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE2 = {0};
struct MusicPlayerInfo gMPlayInfo_SE3; COMMON_DATA u8 gMPlayMemAccArea[0x10] = {0};
u8 gMPlayMemAccArea[0x10]; COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE3 = {0};
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
{ {
+12 -15
View File
@@ -58,21 +58,18 @@ const IntrFunc gIntrTableTemplate[] =
#define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc))) #define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc)))
u16 gKeyRepeatStartDelay; COMMON_DATA u16 gKeyRepeatStartDelay = 0;
u8 gLinkTransferringData; COMMON_DATA u8 gLinkTransferringData = 0;
struct Main gMain; COMMON_DATA struct Main gMain = {0};
u16 gKeyRepeatContinueDelay; COMMON_DATA u16 gKeyRepeatContinueDelay = 0;
u8 gSoftResetDisabled; COMMON_DATA u8 gSoftResetDisabled = 0;
IntrFunc gIntrTable[INTR_COUNT]; COMMON_DATA IntrFunc gIntrTable[INTR_COUNT] = {0};
bool8 gLinkVSyncDisabled; COMMON_DATA u8 sVcountAfterSound = 0;
u32 IntrMain_Buffer[0x200]; COMMON_DATA bool8 gLinkVSyncDisabled = 0;
u8 gPcmDmaCounter; COMMON_DATA u32 IntrMain_Buffer[0x200] = {0};
COMMON_DATA u8 sVcountAtIntr = 0;
// These variables are not defined in RS or Emerald, and are never read. COMMON_DATA u8 sVcountBeforeSound = 0;
// They were likely used to debug the audio engine and VCount interrupt. COMMON_DATA u8 gPcmDmaCounter = 0;
u8 sVcountAfterSound;
u8 sVcountAtIntr;
u8 sVcountBeforeSound;
static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7; static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7;
+8 -8
View File
@@ -106,14 +106,14 @@ static EWRAM_DATA s16 sCreditsOverworld_CmdIndex = 0;
EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {}; EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {};
u16 *gBGTilemapBuffers1; COMMON_DATA u16 *gBGTilemapBuffers1 = NULL;
u16 *gBGTilemapBuffers2; COMMON_DATA u16 *gBGTilemapBuffers2 = NULL;
u16 *gBGTilemapBuffers3; COMMON_DATA u16 *gBGTilemapBuffers3 = NULL;
void (*gFieldCallback)(void); COMMON_DATA void (*gFieldCallback)(void) = NULL;
bool8 (*gFieldCallback2)(void); COMMON_DATA bool8 (*gFieldCallback2)(void) = NULL;
u16 gHeldKeyCodeToSend; COMMON_DATA u16 gHeldKeyCodeToSend = 0;
u8 gLocalLinkPlayerId; COMMON_DATA u8 gLocalLinkPlayerId = 0;
u8 gFieldLinkPlayerCount; COMMON_DATA u8 gFieldLinkPlayerCount = 0;
static u8 sPlayerLinkStates[MAX_LINK_PLAYERS]; static u8 sPlayerLinkStates[MAX_LINK_PLAYERS];
static KeyInterCB sPlayerKeyInterceptCallback; static KeyInterCB sPlayerKeyInterceptCallback;
+1 -1
View File
@@ -414,7 +414,7 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
static EWRAM_DATA u16 sPartyMenuItemId = ITEM_NONE; static EWRAM_DATA u16 sPartyMenuItemId = ITEM_NONE;
ALIGNED(4) EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on ALIGNED(4) EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on
void (*gItemUseCB)(u8, TaskFunc); COMMON_DATA void (*gItemUseCB)(u8, TaskFunc) = NULL;
#include "data/pokemon/tutor_learnsets.h" #include "data/pokemon/tutor_learnsets.h"
#include "data/party_menu.h" #include "data/party_menu.h"
+4 -4
View File
@@ -67,10 +67,10 @@ struct FlagOrVarRecord
u16 value; u16 value;
}; };
u8 gQuestLogPlaybackState; COMMON_DATA u8 gQuestLogPlaybackState = 0;
u16 sMaxActionsInScene; COMMON_DATA u16 sMaxActionsInScene = 0;
struct FieldInput gQuestLogFieldInput; COMMON_DATA struct FieldInput gQuestLogFieldInput = {0};
struct QuestLogAction * sCurSceneActions; COMMON_DATA struct QuestLogAction * sCurSceneActions = NULL;
static struct FlagOrVarRecord * sFlagOrVarRecords; static struct FlagOrVarRecord * sFlagOrVarRecords;
static u16 sNumFlagsOrVars; static u16 sNumFlagsOrVars;
+1 -1
View File
@@ -4,7 +4,7 @@
// The number 1103515245 comes from the example implementation // The number 1103515245 comes from the example implementation
// of rand and srand in the ISO C standard. // of rand and srand in the ISO C standard.
u32 gRngValue; COMMON_DATA u32 gRngValue = 0;
u16 Random(void) u16 Random(void)
{ {
+12 -12
View File
@@ -77,18 +77,18 @@ STATIC_ASSERT(sizeof(struct SaveBlock1) <= SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLO
STATIC_ASSERT(sizeof(struct PokemonStorage) <= SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1), PokemonStorageFreeSpace); STATIC_ASSERT(sizeof(struct PokemonStorage) <= SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1), PokemonStorageFreeSpace);
// Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?)
u16 gLastWrittenSector; COMMON_DATA u16 gLastWrittenSector = 0;
u32 gLastSaveCounter; COMMON_DATA u32 gLastSaveCounter = 0;
u16 gLastKnownGoodSector; COMMON_DATA u16 gLastKnownGoodSector = 0;
u32 gDamagedSaveSectors; COMMON_DATA u32 gDamagedSaveSectors = 0;
u32 gSaveCounter; COMMON_DATA u32 gSaveCounter = 0;
struct SaveSector *gSaveDataBufferPtr; // the pointer is in fast IWRAM but points to the slower EWRAM. COMMON_DATA struct SaveSector *gSaveDataBufferPtr = NULL; // the pointer is in fast IWRAM but points to the slower EWRAM.
u16 gIncrementalSectorId; COMMON_DATA u16 gIncrementalSectorId = 0;
u16 gSaveUnusedVar; COMMON_DATA u16 gSaveUnusedVar = 0;
u16 gSaveFileStatus; COMMON_DATA u16 gSaveFileStatus = 0;
void (*gGameContinueCallback)(void); COMMON_DATA void (*gGameContinueCallback)(void) = NULL;
struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT]; COMMON_DATA struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT] = {0};
u16 gSaveAttemptStatus; COMMON_DATA u16 gSaveAttemptStatus = 0;
EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; EWRAM_DATA struct SaveSector gSaveDataBuffer = {0};
EWRAM_DATA u32 gSaveUnusedVar2 = 0; EWRAM_DATA u32 gSaveUnusedVar2 = 0;
+1 -1
View File
@@ -7,7 +7,7 @@
#include "save.h" #include "save.h"
#include "strings.h" #include "strings.h"
bool32 sIsInSaveFailedScreen; COMMON_DATA bool32 sIsInSaveFailedScreen = 0;
static EWRAM_DATA u16 sSaveType = SAVE_NORMAL; static EWRAM_DATA u16 sSaveType = SAVE_NORMAL;
static EWRAM_DATA u16 sUnused = 0; static EWRAM_DATA u16 sUnused = 0;
+2 -2
View File
@@ -54,8 +54,8 @@ static EWRAM_DATA u16 sMovingNpcMapGroup = 0;
static EWRAM_DATA u16 sMovingNpcMapNum = 0; static EWRAM_DATA u16 sMovingNpcMapNum = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0;
struct ScriptContext * sQuestLogScriptContextPtr; COMMON_DATA struct ScriptContext * sQuestLogScriptContextPtr = NULL;
u8 gSelectedObjectEvent; COMMON_DATA u8 gSelectedObjectEvent = 0;
// This is defined in here so the optimizer can't see its value when compiling // This is defined in here so the optimizer can't see its value when compiling
// script.c. // script.c.
+1 -1
View File
@@ -30,7 +30,7 @@ static u8 sMapMusicFadeInSpeed;
static u16 sFanfareCounter; static u16 sFanfareCounter;
// iwram common // iwram common
bool8 gDisableMusic; COMMON_DATA bool8 gDisableMusic = 0;
extern u32 gBattleTypeFlags; extern u32 gBattleTypeFlags;
extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_BGM;
+2 -2
View File
@@ -270,8 +270,8 @@ static u16 sSpriteTileRanges[MAX_SPRITES * 2];
static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT];
static u16 sSpritePaletteTags[16]; static u16 sSpritePaletteTags[16];
u32 gOamMatrixAllocBitmap; COMMON_DATA u32 gOamMatrixAllocBitmap = 0;
u8 gReservedSpritePaletteCount; COMMON_DATA u8 gReservedSpritePaletteCount = 0;
EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0};
EWRAM_DATA u16 gSpritePriorities[MAX_SPRITES] = {0}; EWRAM_DATA u16 gSpritePriorities[MAX_SPRITES] = {0};
+1 -1
View File
@@ -4,7 +4,7 @@
#define HEAD_SENTINEL 0xFE #define HEAD_SENTINEL 0xFE
#define TAIL_SENTINEL 0xFF #define TAIL_SENTINEL 0xFF
struct Task gTasks[NUM_TASKS]; COMMON_DATA struct Task gTasks[NUM_TASKS] = {0};
static void InsertTask(u8 newTaskId); static void InsertTask(u8 newTaskId);
static u8 FindFirstActiveTask(); static u8 FindFirstActiveTask();
+1 -1
View File
@@ -24,7 +24,7 @@ static s32 GetGlyphWidth_Male(u16 glyphId, bool32 isJapanese);
static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese); static s32 GetGlyphWidth_Female(u16 glyphId, bool32 isJapanese);
static void SpriteCB_TextCursor(struct Sprite *sprite); static void SpriteCB_TextCursor(struct Sprite *sprite);
TextFlags gTextFlags; COMMON_DATA TextFlags gTextFlags = {0};
static const u8 sDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp"); static const u8 sDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp");
static const u8 sDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_RS.4bpp"); static const u8 sDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_RS.4bpp");
+2 -2
View File
@@ -10,8 +10,8 @@ static u16 sLastTextBgColor;
static u16 sLastTextFgColor; static u16 sLastTextFgColor;
static u16 sLastTextShadowColor; static u16 sLastTextShadowColor;
const struct FontInfo *gFonts; COMMON_DATA const struct FontInfo *gFonts = NULL;
struct GlyphInfo gGlyphInfo; COMMON_DATA struct GlyphInfo gGlyphInfo = {0};
static const u8 sFontHalfRowOffsets[] = static const u8 sFontHalfRowOffsets[] =
{ {
+2 -2
View File
@@ -1,8 +1,8 @@
#include "global.h" #include "global.h"
#include "gflib.h" #include "gflib.h"
u8 gWindowClearTile; COMMON_DATA u8 gWindowClearTile = {0};
void *gWindowBgTilemapBuffers[4]; COMMON_DATA void *gWindowBgTilemapBuffers[4] = {0};
EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
+37 -92
View File
@@ -1,7 +1,6 @@
#include <cstdio> #include <cstdio>
#include <cstring> #include <cstring>
#include <cstdint> #include <cstdint>
#include <map>
#include <vector> #include <vector>
#include <string> #include <string>
#include "ramscrgen.h" #include "ramscrgen.h"
@@ -22,6 +21,7 @@ static int s_shstrtabIndex;
static std::uint32_t s_symtabOffset; static std::uint32_t s_symtabOffset;
static std::uint32_t s_strtabOffset; static std::uint32_t s_strtabOffset;
static std::uint32_t s_pseudoCommonSectionIndex;
static std::uint32_t s_symbolCount; static std::uint32_t s_symbolCount;
static std::uint32_t s_elfFileOffset; static std::uint32_t s_elfFileOffset;
@@ -101,18 +101,6 @@ static void VerifyElfIdent()
FATAL_ERROR("error: \"%s\" not little-endian ELF\n", s_elfPath.c_str()); FATAL_ERROR("error: \"%s\" not little-endian ELF\n", s_elfPath.c_str());
} }
static void VerifyAr()
{
char expectedMagic[8] = {'!', '<', 'a', 'r', 'c', 'h', '>', '\n'};
char magic[8];
if (std::fread(magic, 8, 1, s_file) != 1)
FATAL_ERROR("error: failed to read AR magic from \"%s\"\n", s_archiveFilePath.c_str());
if (std::memcmp(magic, expectedMagic, 8) != 0)
FATAL_ERROR("error: AR magic did not match in \"%s\"\n", s_archiveFilePath.c_str());
}
static void ReadElfHeader() static void ReadElfHeader()
{ {
Seek(0x20); Seek(0x20);
@@ -123,40 +111,6 @@ static void ReadElfHeader()
s_shstrtabIndex = ReadInt16(); s_shstrtabIndex = ReadInt16();
} }
static void FindArObj()
{
char file_ident[17] = {0};
char filesize_s[11] = {0};
char expectedEndMagic[2] = { 0x60, 0x0a };
char end_magic[2];
std::size_t filesize;
Seek(8);
while (!std::feof(s_file)) {
if (std::fread(file_ident, 16, 1, s_file) != 1)
FATAL_ERROR("error: failed to read file ident in \"%s\"\n", s_archiveFilePath.c_str());
Skip(32);
if (std::fread(filesize_s, 10, 1, s_file) != 1)
FATAL_ERROR("error: failed to read filesize in \"%s\"\n", s_archiveFilePath.c_str());
if (std::fread(end_magic, 2, 1, s_file) != 1)
FATAL_ERROR("error: failed to read end sentinel in \"%s\"\n", s_archiveFilePath.c_str());
if (std::memcmp(end_magic, expectedEndMagic, 2) != 0)
FATAL_ERROR("error: corrupted archive header in \"%s\" at \"%s\"\n", s_archiveFilePath.c_str(), file_ident);
char * ptr = std::strchr(file_ident, '/');
if (ptr != nullptr)
*ptr = 0;
filesize = std::strtoul(filesize_s, nullptr, 10);
if (std::strncmp(s_archiveObjectPath.c_str(), file_ident, 16) == 0) {
s_elfFileOffset = std::ftell(s_file);
return;
}
Skip(filesize);
}
FATAL_ERROR("error: could not find object \"%s\" in archive \"%s\"\n", s_archiveObjectPath.c_str(), s_archiveFilePath.c_str());
}
static std::string GetSectionName(std::uint32_t shstrtabOffset, int index) static std::string GetSectionName(std::uint32_t shstrtabOffset, int index)
{ {
Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * index); Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * index);
@@ -169,6 +123,7 @@ static void FindTableOffsets()
{ {
s_symtabOffset = 0; s_symtabOffset = 0;
s_strtabOffset = 0; s_strtabOffset = 0;
s_pseudoCommonSectionIndex = 0;
Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * s_shstrtabIndex + 0x10); Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * s_shstrtabIndex + 0x10);
std::uint32_t shstrtabOffset = ReadInt32(); std::uint32_t shstrtabOffset = ReadInt32();
@@ -192,6 +147,11 @@ static void FindTableOffsets()
FATAL_ERROR("error: mutiple .strtab sections found in \"%s\"\n", s_elfPath.c_str()); FATAL_ERROR("error: mutiple .strtab sections found in \"%s\"\n", s_elfPath.c_str());
Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * i + 0x10); Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * i + 0x10);
s_strtabOffset = ReadInt32(); s_strtabOffset = ReadInt32();
} else if (name == "common_data") {
if (s_pseudoCommonSectionIndex) {
FATAL_ERROR("error: mutiple common_data sections found in \"%s\"\n", s_elfPath.c_str());
}
s_pseudoCommonSectionIndex = i;
} }
} }
@@ -202,65 +162,50 @@ static void FindTableOffsets()
FATAL_ERROR("error: couldn't find .strtab section in \"%s\"\n", s_elfPath.c_str()); FATAL_ERROR("error: couldn't find .strtab section in \"%s\"\n", s_elfPath.c_str());
} }
static std::map<std::string, std::uint32_t> GetCommonSymbols_Shared() static std::vector<std::pair<std::string, std::uint32_t>> GetCommonSymbols_Shared()
{ {
VerifyElfIdent(); VerifyElfIdent();
ReadElfHeader(); ReadElfHeader();
FindTableOffsets(); FindTableOffsets();
std::map<std::string, std::uint32_t> commonSymbols; std::vector<std::pair<std::string, std::uint32_t>> commonSymbols;
std::vector<Symbol> commonSymbolVec; if (s_pseudoCommonSectionIndex) {
std::vector<Symbol> commonSymbolVec;
Seek(s_symtabOffset);
Seek(s_symtabOffset);
for (std::uint32_t i = 0; i < s_symbolCount; i++)
{ for (std::uint32_t i = 0; i < s_symbolCount; i++)
Symbol sym; {
sym.nameOffset = ReadInt32(); Symbol sym;
Skip(4); sym.nameOffset = ReadInt32();
sym.size = ReadInt32(); Skip(4);
Skip(2); sym.size = ReadInt32();
std::uint16_t sectionIndex = ReadInt16(); Skip(2);
if (sectionIndex == SHN_COMMON) std::uint16_t sectionIndex = ReadInt16();
commonSymbolVec.push_back(sym); if (sectionIndex == s_pseudoCommonSectionIndex)
} commonSymbolVec.push_back(sym);
}
for (const Symbol& sym : commonSymbolVec)
{ for (const Symbol& sym : commonSymbolVec)
Seek(s_strtabOffset + sym.nameOffset); {
std::string name = ReadString(); Seek(s_strtabOffset + sym.nameOffset);
commonSymbols[name] = sym.size; std::string name = ReadString();
if (name == "$d" || name == "") {
continue;
}
commonSymbols.emplace_back(name, sym.size);
}
} }
return commonSymbols; return commonSymbols;
} }
std::map<std::string, std::uint32_t> GetCommonSymbolsFromLib(std::string sourcePath, std::string libpath) std::vector<std::pair<std::string, std::uint32_t>> GetCommonSymbols(std::string sourcePath, std::string path)
{
std::size_t colonPos = libpath.find(':');
if (colonPos == std::string::npos)
FATAL_ERROR("error: missing colon separator in libfile \"%s\"\n", s_elfPath.c_str());
s_archiveObjectPath = libpath.substr(colonPos + 1);
s_archiveFilePath = sourcePath + "/" + libpath.substr(1, colonPos - 1);
s_elfPath = sourcePath + "/" + libpath.substr(1);
s_file = std::fopen(s_archiveFilePath.c_str(), "rb");
if (s_file == NULL)
FATAL_ERROR("error: failed to open \"%s\" for reading\n", s_archiveFilePath.c_str());
VerifyAr();
FindArObj();
return GetCommonSymbols_Shared();
}
std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path)
{ {
s_elfFileOffset = 0; s_elfFileOffset = 0;
if (path[0] == '*') if (path[0] == '*')
return GetCommonSymbolsFromLib(sourcePath, path); FATAL_ERROR("error: library common syms are unsupported (filename: \"%s\")\n", path.c_str());
s_elfPath = sourcePath + "/" + path; s_elfPath = sourcePath + "/" + path;
s_file = std::fopen(s_elfPath.c_str(), "rb"); s_file = std::fopen(s_elfPath.c_str(), "rb");
+2 -2
View File
@@ -22,9 +22,9 @@
#define ELF_H #define ELF_H
#include <cstdint> #include <cstdint>
#include <map> #include <vector>
#include <string> #include <string>
std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path); std::vector<std::pair<std::string, std::uint32_t>> GetCommonSymbols(std::string sourcePath, std::string path);
#endif // ELF_H #endif // ELF_H
+10 -45
View File
@@ -28,54 +28,19 @@
void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang) void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang)
{ {
auto commonSymbols = GetCommonSymbols(sourcePath, filename); auto commonSymbols = GetCommonSymbols(sourcePath, filename);
std::size_t dotIndex;
if (filename[0] == '*') { for (const auto& commonSym : commonSymbols)
dotIndex = filename.find_last_of(':');
filename = filename.substr(dotIndex + 1);
}
dotIndex = filename.find_last_of('.');
if (dotIndex == std::string::npos)
FATAL_ERROR("error: \"%s\" doesn't have a file extension\n", filename.c_str());
std::string symOrderFilename = filename.substr(0, dotIndex + 1) + "txt";
SymFile symFile(symOrderPath + "/" + symOrderFilename);
while (!symFile.IsAtEnd())
{ {
symFile.HandleLangConditional(lang); unsigned long size = commonSym.second;
std::string label = symFile.GetLabel(false); int alignment = 4;
if (size > 4)
if (label.length() == 0) alignment = 8;
{ if (size > 8)
unsigned long length; alignment = 16;
if (symFile.ReadInteger(length)) printf(". = ALIGN(%d);\n", alignment);
{ printf("%s = .;\n", commonSym.first.c_str());
if (length & 3) printf(". += 0x%lX;\n", size);
symFile.RaiseWarning("gap length %d is not multiple of 4", length);
printf(". += 0x%lX;\n", length);
}
}
else
{
if (commonSymbols.count(label) == 0)
symFile.RaiseError("no common symbol named \"%s\"", label.c_str());
unsigned long size = commonSymbols[label];
int alignment = 4;
if (size > 4)
alignment = 8;
if (size > 8)
alignment = 16;
printf(". = ALIGN(%d);\n", alignment);
printf("%s = .;\n", label.c_str());
printf(". += 0x%lX;\n", size);
}
symFile.ExpectEmptyRestOfLine();
} }
} }