You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Merge pull request #29 from someone2639/shift_segs_2
Shiftable Segments 2.5: I think I actually fixed it this time
This commit is contained in:
18
Makefile
18
Makefile
@@ -780,20 +780,20 @@ $(BUILD_DIR)/libz.a: $(LIBZ_O_FILES)
|
||||
$(V)$(AR) rcs -o $@ $(LIBZ_O_FILES)
|
||||
|
||||
# SS2: Goddard rules to get size
|
||||
$(BUILD_DIR)/goddard.ld: goddard.ld $(BUILD_DIR)/libgoddard.a
|
||||
$(call print,Preprocessing linker script:,$<,$@)
|
||||
$(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $<
|
||||
$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libz.a
|
||||
$(call print,Preprocessing preliminary linker script:,$<,$@)
|
||||
$(V)$(CPP) $(CPPFLAGS) -DPRELIMINARY=1 -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/goddard.elf: $(BUILD_DIR)/goddard.ld
|
||||
@$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $< -Map $(BUILD_DIR)/goddard.map --no-check-sections -o $@ -T tools/hardcoded_syms.txt $(wildcard $(BUILD_DIR)/src/menu/*.o) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib -lgoddard -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
|
||||
$(BUILD_DIR)/sm64_prelim.elf: $(BUILD_DIR)/sm64_prelim.ld
|
||||
@$(PRINT) "$(GREEN)Linking Preliminary ELF file: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $< -Map $(BUILD_DIR)/sm64_prelim.map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
|
||||
|
||||
$(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/goddard.elf
|
||||
$(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/sm64_prelim.elf
|
||||
$(call print,Getting Goddard size...)
|
||||
$(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/goddard.map
|
||||
$(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/sm64_prelim.map $(VERSION)
|
||||
|
||||
# Link SM64 ELF file
|
||||
$(ELF): $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a
|
||||
$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a
|
||||
@$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
|
||||
|
||||
|
||||
46
goddard.ld
46
goddard.ld
@@ -1,46 +0,0 @@
|
||||
OUTPUT_ARCH (mips)
|
||||
|
||||
#define BEGIN_SEG(name, addr) \
|
||||
_##name##SegmentStart = ADDR(.name); \
|
||||
_##name##SegmentRomStart = __romPos; \
|
||||
.name addr : AT(__romPos)
|
||||
|
||||
#define END_SEG(name) \
|
||||
_##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \
|
||||
_##name##SegmentRomEnd = __romPos + SIZEOF(.name); \
|
||||
__romPos += SIZEOF(.name);
|
||||
|
||||
#define BEGIN_NOLOAD(name) \
|
||||
_##name##SegmentBssStart = ADDR(.name.noload); \
|
||||
.name.noload (NOLOAD) :
|
||||
|
||||
#define END_NOLOAD(name) \
|
||||
_##name##SegmentBssEnd = ADDR(.name.noload) + SIZEOF(.name.noload); \
|
||||
_##name##SegmentBssSize = SIZEOF(.name.noload);
|
||||
|
||||
SECTIONS {
|
||||
__romPos = 0;
|
||||
SEG_GODDARD = 0x80345670;
|
||||
BEGIN_SEG(goddard, SEG_GODDARD)
|
||||
{
|
||||
#define LOAD
|
||||
#include "goddard.ld.inc"
|
||||
#undef LOAD
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_SEG(goddard)
|
||||
BEGIN_NOLOAD(goddard) {
|
||||
#define NOLOAD
|
||||
#include "goddard.ld.inc"
|
||||
#undef NOLOAD
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_NOLOAD(goddard)
|
||||
|
||||
GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload);
|
||||
|
||||
/DISCARD/ :
|
||||
{
|
||||
*(*);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
#ifdef LOAD
|
||||
KEEP(BUILD_DIR/src/menu*.o(.text));
|
||||
KEEP(BUILD_DIR/src/menu*.o(.data*));
|
||||
KEEP(BUILD_DIR/src/menu*.o(.rodata*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.text));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef NOLOAD
|
||||
KEEP(BUILD_DIR/src/menu*.o(.bss*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
58
sm64.ld
58
sm64.ld
@@ -190,7 +190,9 @@ SECTIONS
|
||||
lib/PR/hvqm/hvqm2sp1.o(.rodata*);
|
||||
}
|
||||
END_SEG(main)
|
||||
ASSERT((_mainSegmentRomEnd <= 0x101000), "Error: Please shrink your main segment to under 1MB.")
|
||||
#ifndef PRELIMINARY
|
||||
ASSERT((_mainSegmentRomEnd <= 0x101000), "Error: Please shrink your main segment to under 1MB.")
|
||||
#endif
|
||||
BEGIN_NOLOAD(main)
|
||||
{
|
||||
BUILD_DIR/src/game*.o(.*bss*);
|
||||
@@ -247,7 +249,9 @@ SECTIONS
|
||||
|
||||
__expansionRamStart = 0x80400000;
|
||||
#ifndef USE_EXT_RAM
|
||||
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
|
||||
#ifndef PRELIMINARY
|
||||
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
|
||||
#endif
|
||||
#endif
|
||||
|
||||
BEGIN_SEG(entry, 0x10000000)
|
||||
@@ -298,24 +302,60 @@ SECTIONS
|
||||
END_SEG(behavior)
|
||||
|
||||
/* 0x8016F000 21D7D0-255EC0 [386F0] */
|
||||
#ifdef PRELIMINARY
|
||||
BEGIN_SEG(goddard, RAM_END - GODDARD_SIZE)
|
||||
#else
|
||||
BEGIN_SEG(goddard, 0x80345678)
|
||||
#endif
|
||||
{
|
||||
#define LOAD
|
||||
#include "goddard.ld.inc"
|
||||
#undef LOAD
|
||||
KEEP(BUILD_DIR/src/menu*.o(.text));
|
||||
KEEP(BUILD_DIR/src/menu*.o(.data*));
|
||||
KEEP(BUILD_DIR/src/menu*.o(.rodata*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.text));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*));
|
||||
#endif
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_SEG(goddard)
|
||||
BEGIN_NOLOAD(goddard)
|
||||
{
|
||||
#define NOLOAD
|
||||
#include "goddard.ld.inc"
|
||||
#undef NOLOAD
|
||||
KEEP(BUILD_DIR/src/menu*.o(.bss*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*));
|
||||
#endif
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_NOLOAD(goddard)
|
||||
|
||||
ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.")
|
||||
#ifndef PRELIMINARY
|
||||
ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.")
|
||||
#endif
|
||||
#ifdef PRELIMINARY
|
||||
GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload);
|
||||
#endif
|
||||
|
||||
/* 0x268020 0x268020-0 [0] */
|
||||
BEGIN_SEG(intro, 0x14000000)
|
||||
|
||||
@@ -4,7 +4,7 @@ with open(sys.argv[1]) as f:
|
||||
for line in f:
|
||||
if "GODDARD_SIZE" in line:
|
||||
tokens=line.split()
|
||||
with open("build/us/goddard.txt", "w+") as f:
|
||||
with open("build/%s/goddard.txt" % sys.argv[2], "w+") as f:
|
||||
sz = int(tokens[0], 16)
|
||||
sz += 16
|
||||
sz &= 0xFFFFFFF0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user