diff --git a/sm64.ld b/sm64.ld index 63506f42..a6b1254a 100755 --- a/sm64.ld +++ b/sm64.ld @@ -60,7 +60,7 @@ SECTIONS ULTRA_BUILD_DIR/libgultra_rom.a:*.o(.data*); BUILD_DIR/src/audio/external.o(.data*); BUILD_DIR/lib/rsp.o(.data*); - + BUILD_DIR/asm/entry.o(.rodata*); BUILD_DIR/asm/decompress.o(.rodata*); BUILD_DIR/src/game*.o(.rodata*); @@ -68,6 +68,11 @@ SECTIONS ULTRA_BUILD_DIR/libgultra_rom.a:*.o(.rodata*); BUILD_DIR/src/audio/external.o(.rodata*); BUILD_DIR/lib/rsp.o(.rodata*); +#ifdef LIBDRAGON_IPL3 + BUILD_DIR/src/engine*.o(.text); + BUILD_DIR/src/engine*.o(.data*); + BUILD_DIR/src/engine*.o(.rodata*); +#endif . = ALIGN(0x10); } END_SEG(main) @@ -93,8 +98,14 @@ SECTIONS CREATE_LO_HI_PAIR(_mainSegmentNoloadSize, SIZEOF (.main.noload)) . = _mainSegmentNoloadEnd; - . = ALIGN(0x10); +#ifndef LIBDRAGON_IPL3 + . = ALIGN(0x10); +#else + . = ALIGN(0x40); +#endif + +#ifndef LIBDRAGON_IPL3 BEGIN_SEG(engine, .) { BUILD_DIR/src/engine*.o(.text); @@ -105,6 +116,7 @@ SECTIONS END_SEG(engine) . = _engineSegmentEnd; +#endif BEGIN_NOLOAD(framebuffers) { @@ -338,7 +350,11 @@ SECTIONS } ASSERT((_goddardSegmentNoloadEnd <= SEG_POOL_START + POOL_SIZE), "Error: menu segment extended past pool end") +#ifndef LIBDRAGON_IPL3 ASSERT((_mainSegmentNoloadEnd <= _engineSegmentStart), "Error: main segment extended into engine.") ASSERT((_engineSegmentEnd <= _framebuffersSegmentNoloadStart), "Error: engine segment extended into framebuffers.") +#else + ASSERT((_mainSegmentNoloadEnd <= _framebuffersSegmentNoloadStart), "Error: main segment extended into framebuffers.") +#endif ASSERT((_framebuffersSegmentNoloadEnd <= RAM_END), "Error: framebuffers segment extended past RDRAM end") } diff --git a/src/game/main.c b/src/game/main.c index 10bdd412..e4a70264 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -334,7 +334,9 @@ extern void crash_screen_init(void); void thread3_main(UNUSED void *arg) { setup_mesg_queues(); alloc_pool(); +#ifndef LIBDRAGON_IPL3 load_engine_code_segment(); +#endif crash_screen_init(); diff --git a/src/game/memory.c b/src/game/memory.c index c9e039e8..fa12ae0d 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -370,6 +370,7 @@ void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd) { return gDecompressionHeap; } +#ifndef LIBDRAGON_IPL3 void load_engine_code_segment(void) { void *startAddr = (void *) _engineSegmentStart; u32 totalSize = _engineSegmentEnd - _engineSegmentStart; @@ -382,6 +383,7 @@ void load_engine_code_segment(void) { osInvalDCache(startAddr, totalSize); } #endif +#endif /** * Allocate an allocation-only pool from the main pool. This pool doesn't