2020-10-03 15:22:44 +00:00
|
|
|
|
#include "global.h"
|
|
|
|
|
#include "vt.h"
|
|
|
|
|
#include "alloca.h"
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
// data
|
|
|
|
|
const char* sExceptionNames[] = {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
"Interrupt",
|
|
|
|
|
"TLB modification",
|
|
|
|
|
"TLB exception on load",
|
|
|
|
|
"TLB exception on store",
|
|
|
|
|
"Address error on load",
|
|
|
|
|
"Address error on store",
|
|
|
|
|
"Bus error on inst.",
|
|
|
|
|
"Bus error on data",
|
|
|
|
|
"System call exception",
|
|
|
|
|
"Breakpoint exception",
|
|
|
|
|
"Reserved instruction",
|
|
|
|
|
"Coprocessor unusable",
|
|
|
|
|
"Arithmetic overflow",
|
|
|
|
|
"Trap exception",
|
|
|
|
|
"Virtual coherency on inst.",
|
|
|
|
|
"Floating point exception",
|
|
|
|
|
"Watchpoint exception",
|
|
|
|
|
"Virtual coherency on data",
|
|
|
|
|
"Unimplemented operation",
|
|
|
|
|
"Invalid operation",
|
|
|
|
|
"Division by zero",
|
|
|
|
|
"Overflow",
|
|
|
|
|
"Underflow",
|
|
|
|
|
"Inexact operation",
|
|
|
|
|
};
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
// bss
|
2020-04-13 23:03:10 +00:00
|
|
|
|
extern FaultThreadStruct* sFaultStructPtr;
|
|
|
|
|
extern u8 sFaultIsWaitingForInput;
|
|
|
|
|
extern char sFaultStack[0x600];
|
|
|
|
|
extern StackEntry sFaultThreadInfo;
|
|
|
|
|
extern FaultThreadStruct gFaultStruct;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_SleepImpl(u32 duration) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
u64 value = (duration * OS_CPU_COUNTER) / 1000ull;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-04-08 16:36:15 +00:00
|
|
|
|
Sleep_Cycles(value);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-02-14 00:49:40 +00:00
|
|
|
|
void Fault_ClientProcessThread(void* arg) {
|
|
|
|
|
FaultClientContext* ctx = (FaultClientContext*)arg;
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (ctx->callback != 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
ctx->ret = ctx->callback(ctx->param0, ctx->param1);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (ctx->queue != NULL) {
|
2021-11-07 16:58:50 +00:00
|
|
|
|
osSendMesg(ctx->queue, ctx->msg, OS_MESG_BLOCK);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_ProcessClientContext(FaultClientContext* ctx) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
OSMesgQueue queue;
|
|
|
|
|
OSMesg msg;
|
|
|
|
|
OSMesg recMsg;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
OSThread* thread;
|
|
|
|
|
OSTimer timer;
|
|
|
|
|
u32 timerMsgVal;
|
|
|
|
|
|
|
|
|
|
timerMsgVal = 666;
|
|
|
|
|
thread = NULL;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
osCreateMesgQueue(&queue, &msg, 1);
|
|
|
|
|
ctx->queue = &queue;
|
|
|
|
|
ctx->msg = NULL;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (sFaultStructPtr->currClientThreadSp != 0) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
thread = alloca(sizeof(OSThread));
|
2020-10-03 15:22:44 +00:00
|
|
|
|
osCreateThread(thread, 2, Fault_ClientProcessThread, ctx, sFaultStructPtr->currClientThreadSp,
|
|
|
|
|
OS_PRIORITY_APPMAX - 1);
|
2020-03-18 00:09:21 +00:00
|
|
|
|
osStartThread(thread);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
Fault_ClientProcessThread(ctx);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (true) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
osSetTimer(&timer, OS_USEC_TO_CYCLES(1000000), 0, &queue, (OSMesg)timerMsgVal);
|
2021-11-07 16:58:50 +00:00
|
|
|
|
osRecvMesg(&queue, &recMsg, OS_MESG_BLOCK);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (recMsg != (OSMesg)666) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
break;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (!sFaultIsWaitingForInput) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
ctx->ret = -1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
osStopTimer(&timer);
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (thread != NULL) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
osStopThread(thread);
|
|
|
|
|
osDestroyThread(thread);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
u32 Fault_ProcessClient(u32 callback, u32 param0, u32 param1) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultClientContext a;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
a.callback = callback;
|
|
|
|
|
a.param0 = param0;
|
|
|
|
|
a.param1 = param1;
|
|
|
|
|
a.ret = 0;
|
|
|
|
|
Fault_ProcessClientContext(&a);
|
|
|
|
|
return a.ret;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_AddClient(FaultClient* client, void* callback, void* param0, void* param1) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
OSIntMask mask;
|
2020-09-14 17:57:17 +00:00
|
|
|
|
s32 alreadyExists = false;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
|
|
|
|
mask = osSetIntMask(1);
|
|
|
|
|
|
2020-09-14 17:57:17 +00:00
|
|
|
|
{
|
|
|
|
|
FaultClient* iter = sFaultStructPtr->clients;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-09-14 17:57:17 +00:00
|
|
|
|
while (iter != NULL) {
|
|
|
|
|
if (iter == client) {
|
|
|
|
|
alreadyExists = true;
|
|
|
|
|
goto end;
|
|
|
|
|
}
|
|
|
|
|
iter = iter->next;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
client->callback = callback;
|
|
|
|
|
client->param1 = param0;
|
|
|
|
|
client->param2 = param1;
|
|
|
|
|
client->next = sFaultStructPtr->clients;
|
|
|
|
|
sFaultStructPtr->clients = client;
|
|
|
|
|
|
|
|
|
|
end:
|
|
|
|
|
osSetIntMask(mask);
|
2020-03-23 23:11:21 +00:00
|
|
|
|
if (alreadyExists) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf(VT_COL(RED, WHITE) "fault_AddClient: %08x は既にリスト中にある\n" VT_RST, client);
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Fault_RemoveClient(FaultClient* client) {
|
|
|
|
|
FaultClient* iter;
|
|
|
|
|
FaultClient* lastIter;
|
|
|
|
|
OSIntMask mask;
|
|
|
|
|
u32 listIsEmpty;
|
|
|
|
|
|
|
|
|
|
iter = sFaultStructPtr->clients;
|
|
|
|
|
listIsEmpty = 0;
|
|
|
|
|
lastIter = NULL;
|
|
|
|
|
|
|
|
|
|
mask = osSetIntMask(1);
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
while (iter != NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
if (iter == client) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (lastIter != NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
lastIter->next = client->next;
|
|
|
|
|
} else {
|
|
|
|
|
sFaultStructPtr->clients = client;
|
|
|
|
|
if (sFaultStructPtr->clients) {
|
|
|
|
|
sFaultStructPtr->clients = client->next;
|
|
|
|
|
} else {
|
|
|
|
|
listIsEmpty = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lastIter = iter;
|
|
|
|
|
iter = iter->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
osSetIntMask(mask);
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (listIsEmpty) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf(VT_COL(RED, WHITE) "fault_RemoveClient: %08x リスト不整合です\n" VT_RST, client);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
void Fault_AddAddrConvClient(FaultAddrConvClient* client, void* callback, void* param) {
|
|
|
|
|
OSIntMask mask;
|
2020-09-14 17:57:17 +00:00
|
|
|
|
u32 alreadyExists = false;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
|
|
|
|
|
mask = osSetIntMask(1);
|
|
|
|
|
|
2020-09-14 17:57:17 +00:00
|
|
|
|
{
|
|
|
|
|
FaultAddrConvClient* iter = sFaultStructPtr->addrConvClients;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-09-14 17:57:17 +00:00
|
|
|
|
while (iter != NULL) {
|
|
|
|
|
if (iter == client) {
|
|
|
|
|
alreadyExists = true;
|
|
|
|
|
goto end;
|
|
|
|
|
}
|
|
|
|
|
iter = iter->next;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
client->callback = callback;
|
|
|
|
|
client->param = param;
|
|
|
|
|
client->next = sFaultStructPtr->addrConvClients;
|
|
|
|
|
sFaultStructPtr->addrConvClients = client;
|
|
|
|
|
|
|
|
|
|
end:
|
|
|
|
|
osSetIntMask(mask);
|
|
|
|
|
if (alreadyExists) {
|
|
|
|
|
osSyncPrintf(VT_COL(RED, WHITE) "fault_AddressConverterAddClient: %08x は既にリスト中にある\n" VT_RST, client);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) {
|
|
|
|
|
FaultAddrConvClient* iter;
|
|
|
|
|
FaultAddrConvClient* lastIter;
|
|
|
|
|
OSIntMask mask;
|
|
|
|
|
u32 listIsEmpty;
|
|
|
|
|
|
|
|
|
|
iter = sFaultStructPtr->addrConvClients;
|
|
|
|
|
listIsEmpty = 0;
|
|
|
|
|
lastIter = NULL;
|
|
|
|
|
|
|
|
|
|
mask = osSetIntMask(1);
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
while (iter != NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
if (iter == client) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (lastIter != NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
lastIter->next = client->next;
|
|
|
|
|
} else {
|
|
|
|
|
sFaultStructPtr->addrConvClients = client;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (sFaultStructPtr->addrConvClients != NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->addrConvClients = client->next;
|
|
|
|
|
} else {
|
|
|
|
|
listIsEmpty = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lastIter = iter;
|
|
|
|
|
iter = iter->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
osSetIntMask(mask);
|
|
|
|
|
|
|
|
|
|
if (listIsEmpty) {
|
2020-03-22 21:19:43 +00:00
|
|
|
|
osSyncPrintf(VT_COL(RED, WHITE) "fault_AddressConverterRemoveClient: %08x は既にリスト中にある\n" VT_RST,
|
|
|
|
|
client);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
u32 Fault_ConvertAddress(FaultAddrConvClient* client) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
u32 ret;
|
|
|
|
|
FaultAddrConvClient* iter = sFaultStructPtr->addrConvClients;
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
while (iter != NULL) {
|
|
|
|
|
if (iter->callback != 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
ret = Fault_ProcessClient(iter->callback, client, iter->param);
|
2021-02-14 00:49:40 +00:00
|
|
|
|
if ((s32)ret == -1) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_RemoveAddrConvClient(iter);
|
2020-07-18 09:55:35 +00:00
|
|
|
|
} else if (ret != 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
return ret;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
iter = iter->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_Sleep(u32 duration) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_SleepImpl(duration);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_PadCallback(Input* input) {
|
2020-06-05 17:18:39 +00:00
|
|
|
|
//! @bug This function is not called correctly and thus will crash from reading a bad pointer at 0x800C7E4C
|
2020-04-14 17:17:25 +00:00
|
|
|
|
PadMgr_RequestPadData(input, 0);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_UpdatePadImpl() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->padCallback(&sFaultStructPtr->padInput);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
u32 Fault_WaitForInputImpl() {
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
Input* input = &sFaultStructPtr->padInput;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
s32 count = 600;
|
|
|
|
|
u32 kDown;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (true) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
Fault_Sleep(0x10);
|
|
|
|
|
Fault_UpdatePadImpl();
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
kDown = input->press.button;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_L) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
sFaultStructPtr->faultActive = !sFaultStructPtr->faultActive;
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
if (sFaultStructPtr->faultActive) {
|
2020-03-23 23:11:21 +00:00
|
|
|
|
if (count-- < 1) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
return false;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-07-18 09:55:35 +00:00
|
|
|
|
} else {
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_A || kDown == BTN_DRIGHT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DLEFT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DUP) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
FaultDrawer_SetOsSyncPrintfEnabled(true);
|
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DDOWN) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
FaultDrawer_SetOsSyncPrintfEnabled(false);
|
|
|
|
|
}
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_WaitForInput() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultIsWaitingForInput = 1;
|
|
|
|
|
Fault_WaitForInputImpl();
|
|
|
|
|
sFaultIsWaitingForInput = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_DrawRec(s32 x, s32 y, s32 w, s32 h, u16 color) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_DrawRecImpl(x, y, x + w - 1, y + h - 1, color);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_FillScreenBlack() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_SetForeColor(0xFFFF);
|
|
|
|
|
FaultDrawer_SetBackColor(1);
|
|
|
|
|
FaultDrawer_FillScreen();
|
|
|
|
|
FaultDrawer_SetBackColor(0);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_FillScreenRed() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_SetForeColor(0xFFFF);
|
|
|
|
|
FaultDrawer_SetBackColor(0xF001);
|
|
|
|
|
FaultDrawer_FillScreen();
|
|
|
|
|
FaultDrawer_SetBackColor(0);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_DrawCornerRec(u16 color) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_DrawRec(0x16, 0x10, 8, 1, color);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_PrintFReg(s32 idx, f32* value) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
u32 raw = *(u32*)value;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
s32 v0 = ((raw & 0x7F800000) >> 0x17) - 0x7F;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if ((v0 >= -0x7E && v0 < 0x80) || raw == 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("F%02d:%14.7e ", idx, *value);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("F%02d: %08x(16) ", idx, raw);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_LogFReg(s32 idx, f32* value) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
u32 raw = *(u32*)value;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
s32 v0 = ((raw & 0x7F800000) >> 0x17) - 0x7F;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if ((v0 >= -0x7E && v0 < 0x80) || raw == 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("F%02d:%14.7e ", idx, *value);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
osSyncPrintf("F%02d: %08x(16) ", idx, *(u32*)value);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_PrintFPCR(u32 value) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
s32 i;
|
|
|
|
|
u32 flag = 0x20000;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("FPCSR:%08xH ", value);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
for (i = 0; i < 6; i++) {
|
|
|
|
|
if (value & flag) {
|
|
|
|
|
FaultDrawer_Printf("(%s)", sExceptionNames[i + 18]);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
flag >>= 1;
|
|
|
|
|
}
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_LogFPCR(u32 value) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
s32 i;
|
|
|
|
|
u32 flag = 0x20000;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("FPCSR:%08xH ", value);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
for (i = 0; i < 6; i++) {
|
|
|
|
|
if (value & flag) {
|
|
|
|
|
osSyncPrintf("(%s)\n", sExceptionNames[i + 18]);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
flag >>= 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_PrintThreadContext(OSThread* t) {
|
|
|
|
|
__OSThreadContext* ctx;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1F) << 0x10) >> 0x10;
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (causeStrIdx == 0x17) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
causeStrIdx = 0x10;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if (causeStrIdx == 0x1F) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
causeStrIdx = 0x11;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
FaultDrawer_FillScreen();
|
|
|
|
|
FaultDrawer_SetCharPad(-2, 4);
|
|
|
|
|
FaultDrawer_SetCursor(0x16, 0x14);
|
|
|
|
|
|
|
|
|
|
ctx = &t->context;
|
|
|
|
|
FaultDrawer_Printf("THREAD:%d (%d:%s)\n", t->id, causeStrIdx, sExceptionNames[causeStrIdx]);
|
|
|
|
|
FaultDrawer_SetCharPad(-1, 0);
|
|
|
|
|
|
|
|
|
|
FaultDrawer_Printf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)ctx->pc, (u32)ctx->sr, (u32)ctx->badvaddr);
|
|
|
|
|
FaultDrawer_Printf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)ctx->at, (u32)ctx->v0, (u32)ctx->v1);
|
|
|
|
|
FaultDrawer_Printf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2);
|
|
|
|
|
FaultDrawer_Printf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)ctx->a3, (u32)ctx->t0, (u32)ctx->t1);
|
|
|
|
|
FaultDrawer_Printf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)ctx->t2, (u32)ctx->t3, (u32)ctx->t4);
|
|
|
|
|
FaultDrawer_Printf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)ctx->t5, (u32)ctx->t6, (u32)ctx->t7);
|
|
|
|
|
FaultDrawer_Printf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)ctx->s0, (u32)ctx->s1, (u32)ctx->s2);
|
|
|
|
|
FaultDrawer_Printf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)ctx->s3, (u32)ctx->s4, (u32)ctx->s5);
|
|
|
|
|
FaultDrawer_Printf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)ctx->s6, (u32)ctx->s7, (u32)ctx->t8);
|
|
|
|
|
FaultDrawer_Printf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)ctx->t9, (u32)ctx->gp, (u32)ctx->sp);
|
|
|
|
|
FaultDrawer_Printf("S8:%08xH RA:%08xH LO:%08xH\n\n", (u32)ctx->s8, (u32)ctx->ra, (u32)ctx->lo);
|
|
|
|
|
|
|
|
|
|
Fault_PrintFPCR(ctx->fpcsr);
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(0, &ctx->fp0.f.f_even);
|
|
|
|
|
Fault_PrintFReg(2, &ctx->fp2.f.f_even);
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(4, &ctx->fp4.f.f_even);
|
|
|
|
|
Fault_PrintFReg(6, &ctx->fp6.f.f_even);
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(8, &ctx->fp8.f.f_even);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_PrintFReg(0xA, &ctx->fp10.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("\n");
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_PrintFReg(0xC, &ctx->fp12.f.f_even);
|
|
|
|
|
Fault_PrintFReg(0xE, &ctx->fp14.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(0x10, &ctx->fp16.f.f_even);
|
|
|
|
|
Fault_PrintFReg(0x12, &ctx->fp18.f.f_even);
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(0x14, &ctx->fp20.f.f_even);
|
|
|
|
|
Fault_PrintFReg(0x16, &ctx->fp22.f.f_even);
|
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
Fault_PrintFReg(0x18, &ctx->fp24.f.f_even);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_PrintFReg(0x1A, &ctx->fp26.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("\n");
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_PrintFReg(0x1C, &ctx->fp28.f.f_even);
|
|
|
|
|
Fault_PrintFReg(0x1E, &ctx->fp30.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("\n");
|
|
|
|
|
FaultDrawer_SetCharPad(0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_LogThreadContext(OSThread* t) {
|
|
|
|
|
__OSThreadContext* ctx;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1F) << 0x10) >> 0x10;
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (causeStrIdx == 0x17) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
causeStrIdx = 0x10;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if (causeStrIdx == 0x1F) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
causeStrIdx = 0x11;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
ctx = &t->context;
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
osSyncPrintf("THREAD ID:%d (%d:%s)\n", t->id, causeStrIdx, sExceptionNames[causeStrIdx]);
|
|
|
|
|
|
|
|
|
|
osSyncPrintf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)ctx->pc, (u32)ctx->sr, (u32)ctx->badvaddr);
|
|
|
|
|
osSyncPrintf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)ctx->at, (u32)ctx->v0, (u32)ctx->v1);
|
|
|
|
|
osSyncPrintf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2);
|
|
|
|
|
osSyncPrintf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)ctx->a3, (u32)ctx->t0, (u32)ctx->t1);
|
|
|
|
|
osSyncPrintf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)ctx->t2, (u32)ctx->t3, (u32)ctx->t4);
|
|
|
|
|
osSyncPrintf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)ctx->t5, (u32)ctx->t6, (u32)ctx->t7);
|
|
|
|
|
osSyncPrintf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)ctx->s0, (u32)ctx->s1, (u32)ctx->s2);
|
|
|
|
|
osSyncPrintf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)ctx->s3, (u32)ctx->s4, (u32)ctx->s5);
|
|
|
|
|
osSyncPrintf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)ctx->s6, (u32)ctx->s7, (u32)ctx->t8);
|
|
|
|
|
osSyncPrintf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)ctx->t9, (u32)ctx->gp, (u32)ctx->sp);
|
|
|
|
|
osSyncPrintf("S8:%08xH RA:%08xH LO:%08xH\n", (u32)ctx->s8, (u32)ctx->ra, (u32)ctx->lo);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFPCR(ctx->fpcsr);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(0, &ctx->fp0.f.f_even);
|
|
|
|
|
Fault_LogFReg(2, &ctx->fp2.f.f_even);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(4, &ctx->fp4.f.f_even);
|
|
|
|
|
Fault_LogFReg(6, &ctx->fp6.f.f_even);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(8, &ctx->fp8.f.f_even);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_LogFReg(0xA, &ctx->fp10.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("\n");
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_LogFReg(0xC, &ctx->fp12.f.f_even);
|
|
|
|
|
Fault_LogFReg(0xE, &ctx->fp14.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(0x10, &ctx->fp16.f.f_even);
|
|
|
|
|
Fault_LogFReg(0x12, &ctx->fp18.f.f_even);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(0x14, &ctx->fp20.f.f_even);
|
|
|
|
|
Fault_LogFReg(0x16, &ctx->fp22.f.f_even);
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_LogFReg(0x18, &ctx->fp24.f.f_even);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_LogFReg(0x1A, &ctx->fp26.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("\n");
|
2021-10-03 03:17:09 +00:00
|
|
|
|
Fault_LogFReg(0x1C, &ctx->fp28.f.f_even);
|
|
|
|
|
Fault_LogFReg(0x1E, &ctx->fp30.f.f_even);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
OSThread* Fault_FindFaultedThread() {
|
2020-04-19 01:40:27 +00:00
|
|
|
|
OSThread* iter = __osGetActiveQueue();
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (iter->priority != -1) {
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if (iter->priority > 0 && iter->priority < 0x7F && (iter->flags & 3)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
return iter;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
iter = iter->tlnext;
|
|
|
|
|
}
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_Wait5Seconds(void) {
|
|
|
|
|
OSTime start[2]; // to make the function allocate 0x28 bytes of stack instead of 0x20
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
start[0] = osGetTime();
|
2020-03-22 21:19:43 +00:00
|
|
|
|
do {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Sleep(0x10);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
} while ((osGetTime() - start[0]) < OS_USEC_TO_CYCLES(5000000) + 1);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
sFaultStructPtr->faultActive = true;
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
void Fault_WaitForButtonCombo() {
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
Input* input = &sFaultStructPtr->padInput;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
s32 state;
|
|
|
|
|
u32 s1;
|
|
|
|
|
u32 s2;
|
|
|
|
|
u32 kDown;
|
|
|
|
|
u32 kCur;
|
|
|
|
|
|
2020-08-23 21:50:30 +00:00
|
|
|
|
if (1) {}
|
|
|
|
|
if (1) {}
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
osSyncPrintf(
|
|
|
|
|
VT_FGCOL(WHITE) "KeyWaitB (LRZ " VT_FGCOL(WHITE) "上" VT_FGCOL(YELLOW) "下 " VT_FGCOL(YELLOW) "上" VT_FGCOL(WHITE) "下 " VT_FGCOL(WHITE) "左" VT_FGCOL(
|
2020-08-23 21:50:30 +00:00
|
|
|
|
YELLOW) "左 " VT_FGCOL(YELLOW) "右" VT_FGCOL(WHITE) "右 " VT_FGCOL(GREEN) "B" VT_FGCOL(BLUE) "A" VT_FGCOL(RED) "START" VT_FGCOL(WHITE) ")" VT_RST
|
|
|
|
|
"\n");
|
2020-07-18 09:55:35 +00:00
|
|
|
|
osSyncPrintf(VT_FGCOL(WHITE) "KeyWaitB'(LR左" VT_FGCOL(YELLOW) "右 +" VT_FGCOL(RED) "START" VT_FGCOL(
|
|
|
|
|
WHITE) ")" VT_RST "\n");
|
|
|
|
|
|
|
|
|
|
FaultDrawer_SetForeColor(0xFFFF);
|
|
|
|
|
FaultDrawer_SetBackColor(1);
|
|
|
|
|
|
|
|
|
|
state = 0;
|
|
|
|
|
s1 = 0;
|
|
|
|
|
s2 = 1;
|
|
|
|
|
|
|
|
|
|
while (state != 11) {
|
|
|
|
|
Fault_Sleep(0x10);
|
|
|
|
|
Fault_UpdatePadImpl();
|
|
|
|
|
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
kDown = input->press.button;
|
|
|
|
|
kCur = input->cur.button;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
|
2020-08-23 21:50:30 +00:00
|
|
|
|
if ((kCur == 0) && (s1 == s2)) {
|
|
|
|
|
s1 = 0;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
} else if (kDown != 0) {
|
|
|
|
|
if (s1 == s2) {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (state) {
|
|
|
|
|
case 0:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kCur == (BTN_Z | BTN_L | BTN_R) && kDown == BTN_Z) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = s2;
|
|
|
|
|
s1 = s2;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DUP) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 2;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_CDOWN) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 3;
|
|
|
|
|
s1 = s2;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_CUP) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 4;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DDOWN) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 5;
|
|
|
|
|
s1 = s2;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DLEFT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 6;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_CLEFT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 7;
|
|
|
|
|
s1 = s2;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_CRIGHT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 8;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 8:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_DRIGHT) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 9;
|
|
|
|
|
s1 = s2;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 9:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == (BTN_A | BTN_B)) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 10;
|
2020-10-03 15:22:44 +00:00
|
|
|
|
} else if (kDown == BTN_A) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 0x5B;
|
2020-10-03 15:22:44 +00:00
|
|
|
|
} else if (kDown == BTN_B) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 0x5C;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 0x5B:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_B) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 10;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 0x5C:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_A) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 10;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 10:
|
2020-10-03 15:22:44 +00:00
|
|
|
|
if (kDown == BTN_START) {
|
2020-07-18 09:55:35 +00:00
|
|
|
|
state = 11;
|
|
|
|
|
} else {
|
|
|
|
|
state = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
osWritebackDCacheAll();
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3) {
|
|
|
|
|
u32* alignedAddr;
|
|
|
|
|
u32* writeAddr;
|
|
|
|
|
s32 y;
|
|
|
|
|
s32 x;
|
|
|
|
|
|
|
|
|
|
alignedAddr = addr;
|
|
|
|
|
|
|
|
|
|
if (alignedAddr < (u32*)0x80000000) {
|
|
|
|
|
alignedAddr = (u32*)0x80000000;
|
|
|
|
|
}
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if (alignedAddr > (u32*)0x807FFF00) {
|
|
|
|
|
alignedAddr = (u32*)0x807FFF00;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
alignedAddr = (u32*)((u32)alignedAddr & ~3);
|
|
|
|
|
writeAddr = alignedAddr;
|
|
|
|
|
Fault_FillScreenBlack();
|
|
|
|
|
FaultDrawer_SetCharPad(-2, 0);
|
|
|
|
|
|
2021-10-03 03:17:09 +00:00
|
|
|
|
FaultDrawer_DrawText(0x24, 0x12, "%s %08x", title != NULL ? title : "PrintDump", alignedAddr);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
if (alignedAddr >= (u32*)0x80000000 && alignedAddr < (u32*)0xC0000000) {
|
|
|
|
|
for (y = 0x1C; y != 0xE2; y += 9) {
|
|
|
|
|
FaultDrawer_DrawText(0x18, y, "%06x", writeAddr);
|
|
|
|
|
for (x = 0x52; x != 0x122; x += 0x34) {
|
|
|
|
|
FaultDrawer_DrawText(x, y, "%08x", *writeAddr++);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FaultDrawer_SetCharPad(0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
Input* input = &sFaultStructPtr->padInput;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
u32 addr = pc;
|
2020-08-15 17:23:29 +00:00
|
|
|
|
s32 count;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
u32 off;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
do {
|
|
|
|
|
count = 0;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
if (addr < 0x80000000) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr = 0x80000000;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2021-10-03 03:17:09 +00:00
|
|
|
|
if (addr > 0x807FFF00) {
|
|
|
|
|
addr = 0x807FFF00;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
addr &= ~0xF;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
Fault_DrawMemDumpPage("Dump", (u32*)addr, 0);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
count = 600;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (sFaultStructPtr->faultActive) {
|
2020-03-23 23:11:21 +00:00
|
|
|
|
if (count == 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
return;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
|
|
|
|
count--;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Sleep(0x10);
|
|
|
|
|
Fault_UpdatePadImpl();
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_L)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->faultActive = false;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
do {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Sleep(0x10);
|
|
|
|
|
Fault_UpdatePadImpl();
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
} while (input->press.button == 0);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->cur.button, BTN_A)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
return;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
off = 0x10;
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->cur.button, BTN_Z)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
off = 0x100;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-08-15 17:23:29 +00:00
|
|
|
|
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->cur.button, BTN_B)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
off <<= 8;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-08-15 17:23:29 +00:00
|
|
|
|
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr -= off;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
addr += off;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr = pc;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr = sp;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr = unk0;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
addr = unk1;
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy
* Fix merge
* Some more progress
* Fix merge
* More z_message_PAL
* Small progress
* More small progress
* message_data_static files OK
* Prepare z_message_tables
* Matched another function, small updates
* Attempt to use asm-processor static-symbols branch
* Refactor text id declarations
* Begin large text codes parser function
* Fix merge
* Refactor done
* Build OK, add color and highscore names
* Remove encoded text headers and automatically encode during build
* Fix kanfont
* Various cleanups
* DISP macros
* Another match aside data
* Further progress
* Small improvements
* Deduplicate magic values for text control codes, small improvements
* Tiny progress
* Minor cleanups
* Clean up z_message_PAL comment
* Progress on large functions
* Further progress on large functions
* Changes to mkldscript to link .data in the .rodata section
* data OK
* Few improvements
* Use gDPLoadTextureBlock macros where appropriate
* rm z_message_tables, progress on large functions
* 2 more matches
* Improvements
* Small progress
* More progress on big function
* progress
* match func_80107980
* match Message_Update
* match func_8010BED8
* done
* Progress on remaining large functions
* Small progress on largest function
* Another match, extract text and move to assets, improve text build system
* Small nonmatchings improvements
* docs wip
* Largest function maybe equivalent
* Fix merge
* Document do_action values, largest function is almost instruction-matching
* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice
* Fix merge
* one match
* Last function is instruction-matching
* Fix
* Improvements thanks to engineer124
* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup
* More variables labeled, use text state enum everywhere
* More labels and names
* Fix
* Actor_IsTalking -> Actor_TalkRequested
* Match func_8010C39C and remove unused asm
* More docs
* Mostly ocarina related docs
* All msgModes named
* Fix assetclean
* Cleanup
* Extraction fixes and headers
* Suggestions
* Review suggestions
* Change text extraction again, only extract if the headers do not already exist
* Fix
* Use ast for charmap, fix assetclean for real this time
* Review suggestions
* BGM ids and ran formatter
* Review comments
* rename include_readonly to include_data_with_rodata
* Remove leading 0s in number directives
* Review suggestions for message_data_static
* textbox pos enum comments, rename several enum names from Message to TextBox
Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-23 01:20:30 +00:00
|
|
|
|
} while (!CHECK_BTN_ALL(input->press.button, BTN_L));
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->faultActive = true;
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
void Fault_WalkStack(u32* spPtr, u32* pcPtr, u32* raPtr) {
|
|
|
|
|
u32 sp = *spPtr;
|
|
|
|
|
u32 pc = *pcPtr;
|
|
|
|
|
u32 ra = *raPtr;
|
|
|
|
|
s32 count = 0x10000;
|
|
|
|
|
u32 lastOpc;
|
|
|
|
|
u32 opc;
|
|
|
|
|
u16 opcHi;
|
|
|
|
|
s16 opcLo;
|
|
|
|
|
u32 imm;
|
|
|
|
|
|
|
|
|
|
if (sp & 3 || sp < 0x80000000 || sp >= 0xA0000000 || ra & 3 || ra < 0x80000000 || ra >= 0xA0000000) {
|
|
|
|
|
*spPtr = 0;
|
|
|
|
|
*pcPtr = 0;
|
|
|
|
|
*raPtr = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pc & 3 || pc < 0x80000000 || pc >= 0xA0000000) {
|
|
|
|
|
*pcPtr = ra;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lastOpc = 0;
|
|
|
|
|
while (true) {
|
|
|
|
|
opc = HW_REG(pc, u32);
|
|
|
|
|
opcHi = opc >> 16;
|
|
|
|
|
opcLo = opc & 0xFFFF;
|
|
|
|
|
imm = opcLo;
|
|
|
|
|
if (opcHi == 0x8FBF) {
|
|
|
|
|
ra = HW_REG(sp + imm, u32);
|
|
|
|
|
} else if (opcHi == 0x27BD) {
|
|
|
|
|
sp += imm;
|
|
|
|
|
} else if (opc == 0x42000018) {
|
|
|
|
|
sp = 0;
|
|
|
|
|
pc = 0;
|
|
|
|
|
ra = 0;
|
|
|
|
|
goto end;
|
|
|
|
|
}
|
|
|
|
|
if (lastOpc == 0x3E00008) {
|
|
|
|
|
pc = ra;
|
|
|
|
|
goto end;
|
|
|
|
|
} else if (lastOpc >> 26 == 2) {
|
|
|
|
|
pc = pc >> 28 << 28 | lastOpc << 6 >> 4;
|
|
|
|
|
goto end;
|
|
|
|
|
}
|
|
|
|
|
lastOpc = opc;
|
|
|
|
|
pc += 4;
|
|
|
|
|
if (count == 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
count--;
|
|
|
|
|
}
|
|
|
|
|
sp = 0;
|
|
|
|
|
pc = 0;
|
|
|
|
|
ra = 0;
|
|
|
|
|
|
|
|
|
|
end:
|
|
|
|
|
*spPtr = sp;
|
|
|
|
|
*pcPtr = pc;
|
|
|
|
|
*raPtr = ra;
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
void Fault_DrawStackTrace(OSThread* thread, s32 x, s32 y, s32 height) {
|
|
|
|
|
s32 line;
|
|
|
|
|
u32 sp = thread->context.sp;
|
|
|
|
|
u32 ra = thread->context.ra;
|
|
|
|
|
u32 pc = thread->context.pc;
|
|
|
|
|
u32 addr;
|
|
|
|
|
|
|
|
|
|
FaultDrawer_DrawText(x, y, "SP PC (VPC)");
|
|
|
|
|
for (line = 1; line < height && (ra != 0 || sp != 0) && pc != (u32)__osCleanupThread; line++) {
|
|
|
|
|
FaultDrawer_DrawText(x, y + line * 8, "%08x %08x", sp, pc);
|
|
|
|
|
addr = Fault_ConvertAddress(pc);
|
|
|
|
|
if (addr != 0) {
|
|
|
|
|
FaultDrawer_Printf(" -> %08x", addr);
|
|
|
|
|
}
|
|
|
|
|
Fault_WalkStack(&sp, &pc, &ra);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
void Fault_LogStackTrace(OSThread* thread, s32 height) {
|
|
|
|
|
s32 line;
|
|
|
|
|
u32 sp = thread->context.sp;
|
|
|
|
|
u32 ra = thread->context.ra;
|
|
|
|
|
u32 pc = thread->context.pc;
|
|
|
|
|
u32 addr;
|
2020-07-30 19:50:18 +00:00
|
|
|
|
s32 pad;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
|
|
|
|
|
osSyncPrintf("STACK TRACE\nSP PC (VPC)\n");
|
|
|
|
|
for (line = 1; line < height && (ra != 0 || sp != 0) && pc != (u32)__osCleanupThread; line++) {
|
|
|
|
|
osSyncPrintf("%08x %08x", sp, pc);
|
|
|
|
|
addr = Fault_ConvertAddress(pc);
|
|
|
|
|
if (addr != 0) {
|
|
|
|
|
osSyncPrintf(" -> %08x", addr);
|
|
|
|
|
}
|
|
|
|
|
osSyncPrintf("\n");
|
|
|
|
|
Fault_WalkStack(&sp, &pc, &ra);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_ResumeThread(OSThread* t) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
t->context.cause = 0;
|
|
|
|
|
t->context.fpcsr = 0;
|
|
|
|
|
t->context.pc += 4;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
*(u32*)t->context.pc = 0xD;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osWritebackDCache(t->context.pc, 4);
|
|
|
|
|
osInvalICache(t->context.pc, 4);
|
|
|
|
|
osStartThread(t);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_CommitFB() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
u16* fb;
|
2021-10-03 03:17:09 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osViSetYScale(1.0f);
|
|
|
|
|
osViSetMode(&osViModeNtscLan1);
|
2021-10-03 03:17:09 +00:00
|
|
|
|
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osViBlack(false);
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (sFaultStructPtr->fb) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
fb = sFaultStructPtr->fb;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
fb = (u16*)osViGetNextFramebuffer();
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if ((u32)fb == 0x80000000) {
|
2021-10-03 03:17:09 +00:00
|
|
|
|
fb = (u16*)((osMemSize | 0x80000000) - sizeof(u16[SCREEN_HEIGHT][SCREEN_WIDTH]));
|
2020-03-22 21:19:43 +00:00
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
osViSwapBuffer(fb);
|
2020-09-15 19:10:19 +00:00
|
|
|
|
FaultDrawer_SetDrawerFB(fb, SCREEN_WIDTH, SCREEN_HEIGHT);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_ProcessClients(void) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultClient* iter = sFaultStructPtr->clients;
|
|
|
|
|
s32 idx = 0;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-07-18 09:55:35 +00:00
|
|
|
|
while (iter != NULL) {
|
|
|
|
|
if (iter->callback != 0) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_FillScreenBlack();
|
|
|
|
|
FaultDrawer_SetCharPad(-2, 0);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
FaultDrawer_Printf("\x1a"
|
|
|
|
|
"8CallBack (%d) %08x %08x %08x\n"
|
|
|
|
|
"\x1a"
|
|
|
|
|
"7",
|
|
|
|
|
idx++, iter, iter->param1, iter->param2);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_SetCharPad(0, 0);
|
|
|
|
|
Fault_ProcessClient(iter->callback, iter->param1, iter->param2);
|
|
|
|
|
Fault_WaitForInput();
|
|
|
|
|
Fault_CommitFB();
|
|
|
|
|
}
|
|
|
|
|
iter = iter->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_UpdatePad() {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_UpdatePadImpl();
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_ThreadEntry(void* arg) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
OSMesg msg;
|
2020-07-18 09:55:35 +00:00
|
|
|
|
OSThread* faultedThread;
|
2020-07-30 19:50:18 +00:00
|
|
|
|
s32 pad;
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
osSetEventMesg(OS_EVENT_CPU_BREAK, &sFaultStructPtr->queue, 1);
|
|
|
|
|
osSetEventMesg(OS_EVENT_FAULT, &sFaultStructPtr->queue, 2);
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (true) {
|
|
|
|
|
do {
|
2021-11-07 16:58:50 +00:00
|
|
|
|
osRecvMesg(&sFaultStructPtr->queue, &msg, OS_MESG_BLOCK);
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (msg == (OSMesg)1) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
sFaultStructPtr->msgId = 1;
|
|
|
|
|
osSyncPrintf("フォルトマネージャ:OS_EVENT_CPU_BREAKを受信しました\n");
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else if (1 && msg == (OSMesg)2) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
sFaultStructPtr->msgId = 2;
|
|
|
|
|
osSyncPrintf("フォルトマネージャ:OS_EVENT_FAULTを受信しました\n");
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else if (msg == (OSMesg)3) {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
Fault_UpdatePad();
|
|
|
|
|
faultedThread = NULL;
|
|
|
|
|
continue;
|
2020-03-22 21:19:43 +00:00
|
|
|
|
} else {
|
2020-03-18 00:09:21 +00:00
|
|
|
|
sFaultStructPtr->msgId = 3;
|
|
|
|
|
osSyncPrintf("フォルトマネージャ:不明なメッセージを受信しました\n");
|
|
|
|
|
}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
faultedThread = __osGetCurrFaultedThread();
|
|
|
|
|
osSyncPrintf("__osGetCurrFaultedThread()=%08x\n", faultedThread);
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
if (faultedThread == NULL) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
faultedThread = Fault_FindFaultedThread();
|
|
|
|
|
osSyncPrintf("FindFaultedThread()=%08x\n", faultedThread);
|
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
} while (faultedThread == NULL);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
2021-10-03 03:17:09 +00:00
|
|
|
|
__osSetFpcCsr(__osGetFpcCsr() & -0xF81);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->faultedThread = faultedThread;
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-23 23:11:21 +00:00
|
|
|
|
while (!sFaultStructPtr->faultHandlerEnabled) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Sleep(1000);
|
2020-03-23 23:11:21 +00:00
|
|
|
|
}
|
2020-03-18 00:09:21 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Sleep(500);
|
|
|
|
|
Fault_CommitFB();
|
|
|
|
|
|
2020-03-23 23:11:21 +00:00
|
|
|
|
if (sFaultStructPtr->faultActive) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_Wait5Seconds();
|
2020-03-23 23:11:21 +00:00
|
|
|
|
} else {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_DrawCornerRec(0xF801);
|
|
|
|
|
Fault_WaitForButtonCombo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sFaultStructPtr->faultActive = true;
|
|
|
|
|
FaultDrawer_SetForeColor(0xFFFF);
|
|
|
|
|
FaultDrawer_SetBackColor(0);
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
do {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_PrintThreadContext(faultedThread);
|
|
|
|
|
Fault_LogThreadContext(faultedThread);
|
|
|
|
|
Fault_WaitForInput();
|
|
|
|
|
Fault_FillScreenBlack();
|
|
|
|
|
FaultDrawer_DrawText(0x78, 0x10, "STACK TRACE");
|
|
|
|
|
Fault_DrawStackTrace(faultedThread, 0x24, 0x18, 0x16);
|
|
|
|
|
Fault_LogStackTrace(faultedThread, 0x32);
|
|
|
|
|
Fault_WaitForInput();
|
|
|
|
|
Fault_ProcessClients();
|
2021-02-14 00:49:40 +00:00
|
|
|
|
Fault_DrawMemDump(faultedThread->context.pc - 0x100, (u32)faultedThread->context.sp, 0, 0);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
Fault_FillScreenRed();
|
|
|
|
|
FaultDrawer_DrawText(0x40, 0x50, " CONGRATURATIONS! ");
|
|
|
|
|
FaultDrawer_DrawText(0x40, 0x5A, "All Pages are displayed.");
|
|
|
|
|
FaultDrawer_DrawText(0x40, 0x64, " THANK YOU! ");
|
|
|
|
|
FaultDrawer_DrawText(0x40, 0x6E, " You are great debugger!");
|
|
|
|
|
Fault_WaitForInput();
|
|
|
|
|
} while (!sFaultStructPtr->exitDebugger);
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
while (!sFaultStructPtr->exitDebugger) {}
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
|
|
Fault_ResumeThread(faultedThread);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_SetFB(void* fb, u16 w, u16 h) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr->fb = fb;
|
|
|
|
|
FaultDrawer_SetDrawerFB(fb, w, h);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
|
void Fault_Init(void) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sFaultStructPtr = &gFaultStruct;
|
|
|
|
|
bzero(sFaultStructPtr, sizeof(FaultThreadStruct));
|
|
|
|
|
FaultDrawer_SetDefault();
|
|
|
|
|
FaultDrawer_SetInputCallback(&Fault_WaitForInput);
|
|
|
|
|
sFaultStructPtr->exitDebugger = false;
|
|
|
|
|
sFaultStructPtr->msgId = 0;
|
|
|
|
|
sFaultStructPtr->faultHandlerEnabled = false;
|
|
|
|
|
sFaultStructPtr->faultedThread = NULL;
|
|
|
|
|
sFaultStructPtr->padCallback = &Fault_PadCallback;
|
|
|
|
|
sFaultStructPtr->clients = NULL;
|
|
|
|
|
sFaultStructPtr->faultActive = false;
|
|
|
|
|
gFaultStruct.faultHandlerEnabled = true;
|
|
|
|
|
osCreateMesgQueue(&sFaultStructPtr->queue, &sFaultStructPtr->msg, 1);
|
2020-04-13 23:03:10 +00:00
|
|
|
|
StackCheck_Init(&sFaultThreadInfo, &sFaultStack, sFaultStack + sizeof(sFaultStack), 0, 0x100, "fault");
|
2020-10-03 15:22:44 +00:00
|
|
|
|
osCreateThread(&sFaultStructPtr->thread, 2, &Fault_ThreadEntry, 0, sFaultStack + sizeof(sFaultStack),
|
|
|
|
|
OS_PRIORITY_APPMAX);
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osStartThread(&sFaultStructPtr->thread);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_HangupFaultClient(const char* arg0, const char* arg1) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
osSyncPrintf("HungUp on Thread %d\n", osGetThreadId(0));
|
2021-10-03 03:17:09 +00:00
|
|
|
|
osSyncPrintf("%s\n", arg0 != NULL ? arg0 : "(NULL)");
|
|
|
|
|
osSyncPrintf("%s\n", arg1 != NULL ? arg1 : "(NULL)");
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultDrawer_Printf("HungUp on Thread %d\n", osGetThreadId(0));
|
2021-10-03 03:17:09 +00:00
|
|
|
|
FaultDrawer_Printf("%s\n", arg0 != NULL ? arg0 : "(NULL)");
|
|
|
|
|
FaultDrawer_Printf("%s\n", arg1 != NULL ? arg1 : "(NULL)");
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_AddHungupAndCrashImpl(const char* arg0, const char* arg1) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
FaultClient client;
|
2021-02-14 00:49:40 +00:00
|
|
|
|
s32 pad;
|
|
|
|
|
|
|
|
|
|
Fault_AddClient(&client, &Fault_HangupFaultClient, (void*)arg0, (void*)arg1);
|
2020-03-22 21:19:43 +00:00
|
|
|
|
*(u32*)0x11111111 = 0; // trigger an exception
|
2020-03-17 04:31:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-22 21:19:43 +00:00
|
|
|
|
void Fault_AddHungupAndCrash(const char* filename, u32 line) {
|
2020-03-17 04:31:30 +00:00
|
|
|
|
char msg[256];
|
2021-02-14 00:49:40 +00:00
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
|
sprintf(msg, "HungUp %s:%d", filename, line);
|
|
|
|
|
Fault_AddHungupAndCrashImpl(msg, NULL);
|
|
|
|
|
}
|