From b8ca566e422a777dde018346e67f10f9559506cb Mon Sep 17 00:00:00 2001 From: a Date: Sun, 22 Jun 2025 20:09:05 -0400 Subject: [PATCH] Reset goddard segment on load --- include/segment_symbols.h | 4 +++- src/game/memory.c | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 81a7a2c3..2909ec88 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -45,10 +45,12 @@ DECLARE_SEGMENT(framebuffers) extern u8 _goddardSegmentStart[]; extern u8 _engineSegmentStart[]; -extern u8 _engineSegmentNoloadEnd[]; extern u8 _engineSegmentEnd[]; extern u8 _framebuffersSegmentNoloadEnd[]; +extern u8 _goddardSegmentNoloadStart[]; +extern u8 _goddardSegmentNoloadEnd[]; + DECLARE_LEVEL_SEGMENT(menu) DECLARE_LEVEL_SEGMENT(intro) DECLARE_LEVEL_SEGMENT(ending) diff --git a/src/game/memory.c b/src/game/memory.c index 4b0993a7..c9e039e8 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -305,6 +305,10 @@ void *load_to_fixed_pool_addr(u8 *destAddr, u8 *srcStart, u8 *srcEnd) { u32 srcSize = ALIGN16(srcEnd - srcStart); u32 destSize = ALIGN16((u8 *) sPoolListHeadR - destAddr); + if (destAddr == _goddardSegmentStart) { // Clear goddard bss + bzero((u8 *) _goddardSegmentNoloadStart, (u8 *) _goddardSegmentNoloadEnd - (u8 *) _goddardSegmentNoloadStart); + } + if (srcSize <= destSize) { dest = main_pool_alloc(destSize, MEMORY_POOL_RIGHT); if (dest != NULL) {