1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-13 04:24:14 +00:00

[iQue] Match remaining src/boot files (#2417)

* [iQue] Match remaining src/boot files

* Fix debug ROM

* Use -funsigned-char

* Sort ique before gc in LNx macros
This commit is contained in:
cadmic 2025-01-10 09:47:55 -08:00 committed by GitHub
parent 26f91bd3bb
commit e4ad4e5eee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 83 additions and 70 deletions

View file

@ -569,7 +569,7 @@ ifeq ($(PLATFORM),IQUE)
# Some files are compiled with EGCS on iQue # Some files are compiled with EGCS on iQue
EGCS_O_FILES += $(BUILD_DIR)/src/boot/boot_main.o EGCS_O_FILES += $(BUILD_DIR)/src/boot/boot_main.o
EGCS_O_FILES += $(BUILD_DIR)/src/boot/idle.o EGCS_O_FILES += $(BUILD_DIR)/src/boot/idle.o
EGCS_O_FILES += $(BUILD_DIR)/src/boot/inflate.o EGCS_O_FILES += $(BUILD_DIR)/src/boot/is_debug_ique.o
EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_locale.o EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_locale.o
EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_std_dma.o EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_std_dma.o
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_actor.o # EGCS_O_FILES += $(BUILD_DIR)/src/code/z_actor.o
@ -589,7 +589,7 @@ EGCS_O_FILES += $(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.o
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.o EGCS_O_FILES += $(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.o
$(EGCS_O_FILES): CC := $(EGCS_CC) $(EGCS_O_FILES): CC := $(EGCS_CC)
$(EGCS_O_FILES): CFLAGS := $(EGCS_CFLAGS) -mno-abicalls $(EGCS_O_FILES): CFLAGS := $(EGCS_CFLAGS) -mno-abicalls -funsigned-char
$(EGCS_O_FILES): MIPS_VERSION := $(EGCS_O_FILES): MIPS_VERSION :=
endif endif

View file

@ -9,9 +9,6 @@ void Main_ThreadEntry(void* arg);
void Idle_ThreadEntry(void* arg); void Idle_ThreadEntry(void* arg);
void ViConfig_UpdateVi(u32 black); void ViConfig_UpdateVi(u32 black);
void ViConfig_UpdateBlack(void); void ViConfig_UpdateBlack(void);
void* Yaz0_FirstDMA(void);
void* Yaz0_NextDMA(u8* curSrcPos);
void Yaz0_DecompressImpl(u8* src, u8* dst);
#if !PLATFORM_IQUE #if !PLATFORM_IQUE
void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size); void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size);
#else #else

View file

@ -52,16 +52,16 @@
#define LN2(ntsc_1_0, ntsc_1_1, other) \ #define LN2(ntsc_1_0, ntsc_1_1, other) \
LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other, other) LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other, other)
// NTSC 1.0, Gamecube, and all the other versions // NTSC 1.0, iQue, GameCube, and all the other versions
#define LN3(ntsc_1_0, other, gc) \ #define LN3(ntsc_1_0, other, ique, gc) \
LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, gc) LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique)
// NTSC 1.0, NTSC 1.1, Gamecube, and all the other versions // NTSC 1.0, NTSC 1.1, iQue, GameCube, and all the other versions
#define LN4(ntsc_1_0, ntsc_1_1, other, gc, ique) \ #define LN4(ntsc_1_0, ntsc_1_1, other, ique, gc) \
LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique) LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique)
// NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, Gamecube US/JP, Gamecube EU, and Gamecube CE // NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, iQue, Gamecube US/JP, Gamecube EU, and Gamecube CE
#define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, gc_ntsc, gc_eu, gc_jp_ce) \ #define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, ique, gc_ntsc, gc_eu, gc_jp_ce) \
LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce, gc_jp_ce) LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce, ique)
#endif #endif

4
spec
View file

@ -35,7 +35,11 @@ beginseg
#if DEBUG_FEATURES #if DEBUG_FEATURES
include "$(BUILD_DIR)/src/boot/assert.o" include "$(BUILD_DIR)/src/boot/assert.o"
#endif #endif
#if !PLATFORM_IQUE
include "$(BUILD_DIR)/src/boot/is_debug.o" include "$(BUILD_DIR)/src/boot/is_debug.o"
#else
include "$(BUILD_DIR)/src/boot/is_debug_ique.o"
#endif
include "$(BUILD_DIR)/src/boot/driverominit.o" include "$(BUILD_DIR)/src/boot/driverominit.o"
include "$(BUILD_DIR)/src/boot/mio0.o" include "$(BUILD_DIR)/src/boot/mio0.o"
include "$(BUILD_DIR)/src/libu64/stackcheck.o" include "$(BUILD_DIR)/src/libu64/stackcheck.o"

8
src/boot/is_debug_ique.c Normal file
View file

@ -0,0 +1,8 @@
void osSyncPrintfUnused() {
}
void osSyncPrintf() {
}
void rmonPrintf() {
}

View file

@ -7,7 +7,7 @@
s32 gCurrentRegion = 0; s32 gCurrentRegion = 0;
void Locale_Init(void) { void Locale_Init(void) {
#if PLATFORM_N64 #if !PLATFORM_GC
ALIGNED(4) u8 regionInfo[4]; ALIGNED(4) u8 regionInfo[4];
u8 countryCode; u8 countryCode;
@ -24,6 +24,7 @@ void Locale_Init(void) {
countryCode = sCartInfo.countryCode; countryCode = sCartInfo.countryCode;
#endif #endif
#if !PLATFORM_IQUE
switch (countryCode) { switch (countryCode) {
case 'J': // "NTSC-J (Japan)" case 'J': // "NTSC-J (Japan)"
gCurrentRegion = REGION_JP; gCurrentRegion = REGION_JP;
@ -40,13 +41,16 @@ void Locale_Init(void) {
PRINTF_COLOR_ERROR(); PRINTF_COLOR_ERROR();
PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n", PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n",
"z_locale_init: Can't tell if it's for Japan or America\n")); "z_locale_init: Can't tell if it's for Japan or America\n"));
LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, 118, UNK_LINE)); LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, UNK_LINE, 118));
PRINTF_RST(); PRINTF(VT_RST);
break; break;
} }
PRINTF(T("z_locale_init:日本用かアメリカ用か3コンで判断させる\n", PRINTF(T("z_locale_init:日本用かアメリカ用か3コンで判断させる\n",
"z_locale_init: Determine whether it is for Japan or America using 3 controls\n")); "z_locale_init: Determine whether it is for Japan or America using 3 controls\n"));
#else
gCurrentRegion = REGION_US;
#endif
} }
void Locale_ResetRegion(void) { void Locale_ResetRegion(void) {

View file

@ -53,11 +53,20 @@ const char* sDmaMgrFileNames[] = {
#include "tables/dmadata_table.h" #include "tables/dmadata_table.h"
}; };
#endif
#undef DEFINE_DMA_ENTRY #undef DEFINE_DMA_ENTRY
#if PLATFORM_N64 || DEBUG_FEATURES #endif
#define SET_IOMSG(ioMsg, queue, rom, ram, buffSize) \
do { \
(ioMsg).hdr.pri = OS_MESG_PRI_NORMAL; \
(ioMsg).hdr.retQueue = (queue); \
(ioMsg).devAddr = (rom); \
(ioMsg).dramAddr = (ram); \
(ioMsg).size = (buffSize); \
} while (0)
#if !PLATFORM_GC || DEBUG_FEATURES
/** /**
* Compares `str1` and `str2`. * Compares `str1` and `str2`.
* *
@ -103,6 +112,9 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
OSMesg msg; OSMesg msg;
s32 ret; s32 ret;
size_t buffSize = gDmaMgrDmaBuffSize; size_t buffSize = gDmaMgrDmaBuffSize;
#if DEBUG_FEATURES
UNUSED s32 pad;
#endif
if (buffSize == 0) { if (buffSize == 0) {
buffSize = DMAMGR_DEFAULT_BUFSIZE; buffSize = DMAMGR_DEFAULT_BUFSIZE;
@ -116,13 +128,7 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
// The system avoids large DMAs as these would stall the PI for too long, potentially causing issues with // The system avoids large DMAs as these would stall the PI for too long, potentially causing issues with
// audio. To allow audio to continue to DMA whenever it needs to, other DMAs are split into manageable chunks. // audio. To allow audio to continue to DMA whenever it needs to, other DMAs are split into manageable chunks.
if (1) {} // Necessary to match SET_IOMSG(ioMsg, &queue, rom, ram, buffSize);
ioMsg.hdr.pri = OS_MESG_PRI_NORMAL;
ioMsg.hdr.retQueue = &queue;
ioMsg.devAddr = rom;
ioMsg.dramAddr = ram;
ioMsg.size = buffSize;
if (gDmaMgrVerbose == 10) { if (gDmaMgrVerbose == 10) {
PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"), PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"),
@ -151,15 +157,9 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
ram = (u8*)ram + buffSize; ram = (u8*)ram + buffSize;
} }
if (1) { // Also necessary to match SET_IOMSG(ioMsg, &queue, rom, ram, size);
s32 pad[2];
}
ioMsg.hdr.pri = OS_MESG_PRI_NORMAL; { UNUSED s32 pad2; }
ioMsg.hdr.retQueue = &queue;
ioMsg.devAddr = rom;
ioMsg.dramAddr = ram;
ioMsg.size = size;
if (gDmaMgrVerbose == 10) { if (gDmaMgrVerbose == 10) {
PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"), PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"),
@ -242,11 +242,7 @@ void DmaMgr_DmaFromDriveRom(void* ram, uintptr_t rom, size_t size) {
osInvalDCache(ram, size); osInvalDCache(ram, size);
osCreateMesgQueue(&queue, &msg, 1); osCreateMesgQueue(&queue, &msg, 1);
ioMsg.hdr.retQueue = &queue; SET_IOMSG(ioMsg, &queue, rom, ram, size);
ioMsg.hdr.pri = OS_MESG_PRI_NORMAL;
ioMsg.devAddr = rom;
ioMsg.dramAddr = ram;
ioMsg.size = size;
handle->transferInfo.cmdType = 2; handle->transferInfo.cmdType = 2;
osEPiStartDma(handle, &ioMsg, OS_READ); osEPiStartDma(handle, &ioMsg, OS_READ);
@ -350,7 +346,7 @@ const char* DmaMgr_GetFileName(uintptr_t vrom) {
return ret; return ret;
#elif PLATFORM_GC #elif PLATFORM_GC
return ""; return "";
#elif PLATFORM_N64 #else
return "??"; return "??";
#endif #endif
} }
@ -380,20 +376,17 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
if (vrom >= iter->file.vromStart && vrom < iter->file.vromEnd) { if (vrom >= iter->file.vromStart && vrom < iter->file.vromEnd) {
// Found the region this request falls into // Found the region this request falls into
#if PLATFORM_N64
// Based on the MM Debug ROM, these strings are part of the condition for the empty if statement below,
// as `... && DmaMgr_StrCmp("", "kanji") != 0 && DmaMgr_StrCmp("", "link_animetion") != 0`
(void)"";
(void)"kanji";
(void)"";
(void)"link_animetion";
#endif
if (0) { if (0) {
#if !PLATFORM_GC
// Based on the MM Debug ROM, these strings are part of the condition for the empty if statement below
if (DmaMgr_StrCmp("", "kanji") != 0 && DmaMgr_StrCmp("", "link_animetion") != 0)
#endif
{
// The string is defined in .rodata of debug builds but not used, suggesting a debug print is here // The string is defined in .rodata of debug builds but not used, suggesting a debug print is here
// but was optimized out in some way. // but was optimized out in some way.
PRINTF("DMA ROM:%08X RAM:%08X SIZE:%08X %s\n", vrom, ram, size, filename); PRINTF("DMA ROM:%08X RAM:%08X SIZE:%08X %s\n", vrom, ram, size, filename);
} }
}
if (iter->romEnd == 0) { if (iter->romEnd == 0) {
// romEnd of 0 indicates that the file is uncompressed. Files that are stored uncompressed can have // romEnd of 0 indicates that the file is uncompressed. Files that are stored uncompressed can have
@ -405,10 +398,10 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Segment Alignment Error", DMA_ERROR(req, filename, "Segment Alignment Error",
T("セグメント境界をまたがってDMA転送することはできません", T("セグメント境界をまたがってDMA転送することはできません",
"DMA transfers cannot cross segment boundaries"), "DMA transfers cannot cross segment boundaries"),
"../z_std_dma.c", LN3(575, 578, 726)); "../z_std_dma.c", LN3(575, 578, 595, 726));
} }
DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size); DmaMgr_DmaRomToRam(iter->romStart + vrom - iter->file.vromStart, ram, size);
found = true; found = true;
if (0) { if (0) {
@ -417,16 +410,16 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
} else { } else {
// File is compressed. Files that are stored compressed must be loaded into RAM all at once. // File is compressed. Files that are stored compressed must be loaded into RAM all at once.
romStart = iter->romStart;
romSize = iter->romEnd - iter->romStart; romSize = iter->romEnd - iter->romStart;
romStart = iter->romStart;
if (vrom != iter->file.vromStart) { if (iter->file.vromStart != vrom) {
// Error, requested vrom is not the start of a file // Error, requested vrom is not the start of a file
DMA_ERROR(req, filename, "Can't Transfer Segment", DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの途中からはDMA転送することはできません", T("圧縮されたセグメントの途中からはDMA転送することはできません",
"DMA transfer cannot be performed from the middle of a compressed segment"), "DMA transfer cannot be performed from the middle of a compressed segment"),
"../z_std_dma.c", LN3(595, 598, 746)); "../z_std_dma.c", LN3(595, 598, 615, 746));
} }
if (size != iter->file.vromEnd - iter->file.vromStart) { if (size != iter->file.vromEnd - iter->file.vromStart) {
@ -435,7 +428,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment", DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの一部だけをDMA転送することはできません", T("圧縮されたセグメントの一部だけをDMA転送することはできません",
"It is not possible to DMA only part of a compressed segment"), "It is not possible to DMA only part of a compressed segment"),
"../z_std_dma.c", LN3(601, 604, 752)); "../z_std_dma.c", LN3(601, 604, 621, 752));
} }
// Reduce the thread priority and decompress the file, the decompression routine handles the DMA // Reduce the thread priority and decompress the file, the decompression routine handles the DMA
@ -458,7 +451,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
break; break;
} }
#if PLATFORM_N64 #if !PLATFORM_GC
if (i != 0) { if (i != 0) {
i += 4; i += 4;
} }
@ -475,11 +468,12 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, NULL, "DATA DON'T EXIST", DMA_ERROR(req, NULL, "DATA DON'T EXIST",
T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c",
LN3(621, 624, 771)); LN3(621, 624, 641, 771));
return; return;
} else { } else {
// ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem // ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem
DmaMgr_DmaRomToRam(vrom, ram, size); romStart = vrom;
DmaMgr_DmaRomToRam(romStart, ram, size);
if (0) { if (0) {
PRINTF(T("No Press ROM:%08X RAM:%08X SIZE:%08X (非公式)\n", PRINTF(T("No Press ROM:%08X RAM:%08X SIZE:%08X (非公式)\n",
@ -540,6 +534,10 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
OSMesg msg) { OSMesg msg) {
static s32 sDmaMgrQueueFullLogged = 0; static s32 sDmaMgrQueueFullLogged = 0;
#if PLATFORM_IQUE
PRINTF("dmacopy_bg(%x, %x, %x, %x, %x, %x, %x)\n", req, ram, vrom, size, unk, queue, msg);
#endif
#if DEBUG_FEATURES #if DEBUG_FEATURES
if ((ram == NULL) || (osMemSize < OS_K0_TO_PHYSICAL(ram) + size) || (vrom & 1) || (vrom > 0x4000000) || if ((ram == NULL) || (osMemSize < OS_K0_TO_PHYSICAL(ram) + size) || (vrom & 1) || (vrom > 0x4000000) ||
(size == 0) || (size & 1)) { (size == 0) || (size & 1)) {
@ -614,9 +612,10 @@ void DmaMgr_Init(void) {
// DMA the dma data table to RAM // DMA the dma data table to RAM
DmaMgr_DmaRomToRam((uintptr_t)_dmadataSegmentRomStart, _dmadataSegmentStart, DmaMgr_DmaRomToRam((uintptr_t)_dmadataSegmentRomStart, _dmadataSegmentStart,
(u32)(_dmadataSegmentRomEnd - _dmadataSegmentRomStart)); (u32)(_dmadataSegmentRomEnd - _dmadataSegmentRomStart));
PRINTF("dma_rom_ad[]\n");
#if DEBUG_FEATURES #if DEBUG_FEATURES
PRINTF("dma_rom_ad[]\n");
name = sDmaMgrFileNames; name = sDmaMgrFileNames;
iter = gDmaDataTable; iter = gDmaDataTable;
idx = 0; idx = 0;
@ -647,7 +646,7 @@ void DmaMgr_Init(void) {
PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart, PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
gDmaDataTable[0].file.vromEnd); gDmaDataTable[0].file.vromEnd);
//! @bug The main code file where fault.c resides is not yet loaded //! @bug The main code file where fault.c resides is not yet loaded
Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 1055)); Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 859, 1055));
} }
// Start the DMA manager // Start the DMA manager

View file

@ -380,7 +380,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL); PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n") PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n")
VT_RST); VT_RST);
Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1070, 1067)); Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1067, 1070));
} }
if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) { if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) {
@ -388,7 +388,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL); PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE) PRINTF(VT_COL(RED, WHITE)
T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST); T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST);
Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1076, 1073)); Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1073, 1076));
} }
} }
@ -481,7 +481,7 @@ void Graph_ThreadEntry(void* arg0) {
sprintf(faultMsg, "CLASS SIZE= %d bytes", size); sprintf(faultMsg, "CLASS SIZE= %d bytes", size);
Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg); Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg);
#else #else
Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1200, 1197)); Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1197, 1200));
#endif #endif
} }

View file

@ -327,7 +327,7 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) {
default: default:
// Unknown error response // Unknown error response
LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396); LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396);
Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397)); Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397, 397));
break; break;
} }

View file

@ -34,7 +34,7 @@ void SysCfb_Init(s32 n64dd) {
PRINTF("RAM4M mode\n"); PRINTF("RAM4M mode\n");
sSysCfbEnd = 0x80400000; sSysCfbEnd = 0x80400000;
} else { } else {
LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 354, 341)); LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 341, 354));
} }
screenSize = SCREEN_WIDTH * SCREEN_HEIGHT; screenSize = SCREEN_WIDTH * SCREEN_HEIGHT;

View file

@ -177,7 +177,7 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) {
break; break;
default: default:
HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2287, 2290, 2293)); HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2282, 2287, 2290, 2293));
break; break;
} }
} }

View file

@ -5,7 +5,7 @@ offset,vram,.text
4D0,80000920,src/boot/z_std_dma 4D0,80000920,src/boot/z_std_dma
B50,80000FA0,src/boot/inflate B50,80000FA0,src/boot/inflate
2830,80002C80,src/boot/z_locale 2830,80002C80,src/boot/z_locale
2870,80002CC0,src/boot/is_debug 2870,80002CC0,src/boot/is_debug_ique
2890,80002CE0,src/boot/driverominit 2890,80002CE0,src/boot/driverominit
2A70,80002EC0,src/boot/mio0 2A70,80002EC0,src/boot/mio0
2B20,80002F70,src/libu64/stackcheck 2B20,80002F70,src/libu64/stackcheck

1 offset vram .text
5 4D0 80000920 src/boot/z_std_dma
6 B50 80000FA0 src/boot/inflate
7 2830 80002C80 src/boot/z_locale
8 2870 80002CC0 src/boot/is_debug src/boot/is_debug_ique
9 2890 80002CE0 src/boot/driverominit
10 2A70 80002EC0 src/boot/mio0
11 2B20 80002F70 src/libu64/stackcheck

View file

@ -11,6 +11,7 @@ D_0F000000 = 0x0F000000;
D_06000000 = 0x06000000; D_06000000 = 0x06000000;
#if PLATFORM_IQUE #if PLATFORM_IQUE
gzip_decompress = 0x80002C3C;
__divdi3 = 0x80008010; __divdi3 = 0x80008010;
__moddi3 = 0x800085F0; __moddi3 = 0x800085F0;
__udivdi3 = 0x80008B80; __udivdi3 = 0x80008B80;