Files
dusklight/src/m_Do/m_Do_printf.cpp
T
TakaRikka cd401d41d6 j2d / map_path work, d_drawlist / d_attention cleanup (#208)
* work on fop actor / actor mng, daalink, d_a_obj_item

* d_a_title mostly decompiled

* daalink / d_event / JMessage / dmsg_out_font work

* msg_scrn_base / msg_scrn_boss

* some work on mDo machine, d_menu_save, d_tresure, and various

* remove asm

* progress

* finish d_menu_save / d_pane_class_alpha / d_pane_class / rename some data

* rename more data

* remove asm / progress

* match all of d_pane_class

* fixes / some dKankyo doc

* bunch of j2d work. d_drawlist / d_attention cleanup

* progress / asm

* cleanup wip

* decompile JStage

* setup some more JStudio structs

* set up d_demo classes

* some d_demo work

* cleanup dolphin os stuff

* some initial dEvent documentation

* some At collision documentation

* match JUTConsole::doDraw

* dbgs work / split up some of d_a_alink into .inc files

* d_a_alink_spinner work
2022-08-30 15:22:17 -06:00

296 lines
9.2 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: m_Do/m_Do_printf
//
#include "m_Do/m_Do_printf.h"
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dol2asm.h"
#include "dolphin/os/OS.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void OSSwitchFiberEx__FUlUlUlUlUlUl(u32, u32, u32, u32, u32, u32);
extern "C" void my_PutString__FPCc();
extern "C" void OSVAttention__FPCcP16__va_list_struct();
extern "C" void OSReportDisable();
extern "C" void OSReportEnable();
extern "C" void OSReportForceEnableOn();
extern "C" void OSReportForceEnableOff();
extern "C" void OSReportInit__Fv();
extern "C" void mDoPrintf_vprintf_Interrupt__FPCcP16__va_list_struct();
extern "C" void mDoPrintf_vprintf_Thread__FPCcP16__va_list_struct();
extern "C" void mDoPrintf_vprintf__FPCcP16__va_list_struct();
extern "C" void mDoPrintf_VReport(const char* fmt, va_list args);
extern "C" extern char const* const m_Do_m_Do_printf__stringBase0;
//
// External References:
//
extern "C" OSThread* mDoExt_GetCurrentRunningThread__Fv();
extern "C" void PPCHalt();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" s32 fflush(FILE*);
//
// Declarations:
//
/* 80006798-800067C8 0010D8 0030+00 1/1 0/0 0/0 .text OSSwitchFiberEx__FUlUlUlUlUlUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void OSSwitchFiberEx(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4,
u32 param_5) {
nofralloc
#include "asm/m_Do/m_Do_printf/OSSwitchFiberEx__FUlUlUlUlUlUl.s"
}
#pragma pop
/* 800067C8-800067F4 001108 002C+00 3/3 0/0 0/0 .text my_PutString__FPCc */
void my_PutString(const char* string) {
fputs(string, &__files.stdout);
}
/* 800067F4-80006814 001134 0020+00 3/3 0/0 0/0 .text OSVAttention__FPCcP16__va_list_struct */
void OSVAttention(char* fmt, va_list args) {
mDoPrintf_vprintf(fmt, args);
}
/* 80006814-80006894 001154 0080+00 1/1 1/1 0/0 .text OSAttention */
void OSAttention(char* fmt, ...) {
va_list args;
va_start(args, fmt);
mDoPrintf_vprintf(fmt, args);
va_end(args);
}
/* 80006894-800068A0 0011D4 000C+00 0/0 1/1 0/0 .text OSReportDisable */
void OSReportDisable() {
sOSReportDisabled = true;
}
/* 800068A0-800068AC 0011E0 000C+00 0/0 1/1 0/0 .text OSReportEnable */
void OSReportEnable() {
sOSReportDisabled = false;
}
/* 800068AC-800068B8 0011EC 000C+00 4/4 0/0 0/0 .text OSReportForceEnableOn */
void OSReportForceEnableOn() {
sOSReportForceEnable = true;
}
/* 800068B8-800068C4 0011F8 000C+00 4/4 0/0 0/0 .text OSReportForceEnableOff */
void OSReportForceEnableOff() {
sOSReportForceEnable = false;
}
/* ############################################################################################## */
/* 80450BA0-80450BA4 0000A0 0004+00 1/1 0/0 0/0 .sbss __OSReport_MonopolyThread */
static OSThread* __OSReport_MonopolyThread;
/* 80450BA4-80450BA8 0000A4 0004+00 1/1 0/0 0/0 .sbss print_counts */
static u32 print_counts;
/* 80450BA8-80450BAC 0000A8 0004+00 2/2 0/0 0/0 .sbss print_errors */
static u32 print_errors;
/* 80450BAC-80450BB0 0000AC 0004+00 1/1 0/0 0/0 .sbss print_warings */
static u32 print_warings;
/* 80450BB0-80450BB4 0000B0 0004+00 1/1 0/0 0/0 .sbss print_systems */
static u32 print_systems;
/* 80450BB4-80450BB8 -00001 0004+00 3/3 0/0 0/0 .sbss None */
static bool print_initialized;
static bool data_80450BB5;
/* 800068C4-800068DC 001204 0018+00 1/1 1/1 0/0 .text OSReportInit__Fv */
void OSReportInit() {
if (print_initialized) {
return;
}
print_initialized = true;
}
/* ############################################################################################## */
/* 803DB740-803DBF40 008460 0800+00 1/1 0/0 0/0 .bss mDoPrintf_FiberStack */
static u8 mDoPrintf_FiberStack[2048] ALIGN_DECL(32);
/* 800068DC-80006964 00121C 0088+00 1/1 0/0 0/0 .text
* mDoPrintf_vprintf_Interrupt__FPCcP16__va_list_struct */
void mDoPrintf_vprintf_Interrupt(char const* fmt, va_list args) {
s32 interruptStatus = OSDisableInterrupts();
if (!data_80450BB5) {
data_80450BB5 = true;
OSSwitchFiberEx((u32)fmt, (u32)args, 0, 0, (u32)vprintf,
(u32)&mDoPrintf_FiberStack + sizeof(mDoPrintf_FiberStack));
data_80450BB5 = false;
}
OSRestoreInterrupts(interruptStatus);
}
/* 80006964-80006984 0012A4 0020+00 1/1 0/0 0/0 .text
* mDoPrintf_vprintf_Thread__FPCcP16__va_list_struct */
void mDoPrintf_vprintf_Thread(char const* fmt, va_list args) {
vprintf(fmt, args);
}
/* 80006984-80006A10 0012C4 008C+00 4/4 0/0 0/0 .text mDoPrintf_vprintf__FPCcP16__va_list_struct
*/
void mDoPrintf_vprintf(char const* fmt, va_list args) {
OSThread* currentThread = mDoExt_GetCurrentRunningThread__Fv();
if (currentThread == NULL) {
mDoPrintf_vprintf_Interrupt(fmt, args);
} else {
u8* stackPtr = OSGetStackPointer();
if (stackPtr < currentThread->stack_end + 0xA00 || stackPtr > currentThread->stack_base) {
mDoPrintf_vprintf_Interrupt(fmt, args);
} else {
mDoPrintf_vprintf_Thread(fmt, args);
}
}
}
/* 80006A10-80006A9C 001350 008C+00 1/1 0/0 0/0 .text mDoPrintf_VReport */
void mDoPrintf_VReport(const char* fmt, va_list args) {
if (!print_initialized) {
OSReportInit();
}
if (sOSReportForceEnable || !sOSReportDisabled) {
OSThread* currentThread = mDoExt_GetCurrentRunningThread__Fv();
if (__OSReport_MonopolyThread == NULL || __OSReport_MonopolyThread == currentThread) {
mDoPrintf_vprintf(fmt, args);
print_counts++;
}
}
}
/* 80006A9C-80006ABC 0013DC 0020+00 2/2 0/0 0/0 .text OSVReport */
void OSVReport(char* fmt, va_list args) {
mDoPrintf_VReport(fmt, args);
}
/* 80006ABC-80006B3C 0013FC 0080+00 0/0 97/97 10/10 .text OSReport */
void OSReport(char* fmt, ...) {
va_list args;
va_start(args, fmt);
OSVReport(fmt, args);
va_end(args);
}
/* 80006B3C-80006C0C 00147C 00D0+00 0/0 2/2 0/0 .text OSReport_FatalError */
void OSReport_FatalError(char* fmt, ...) {
va_list args;
va_start(args, fmt);
OSReportForceEnableOn();
my_PutString("\x1B[41;37m***** FATAL ERROR *****\n");
OSVAttention(fmt, args);
my_PutString("***** FATAL ERROR *****\n\x1B[m");
OSReportForceEnableOff();
fflush(&__files.stdout);
print_errors++;
va_end(args);
}
/* 80006C0C-80006CEC 00154C 00E0+00 0/0 31/31 10/10 .text OSReport_Error */
void OSReport_Error(char* fmt, ...) {
print_errors++;
if (!data_80450B99) {
va_list args;
va_start(args, fmt);
OSReportForceEnableOn();
my_PutString("\x1B[41;37m[ERROR]");
OSVReport(fmt, args);
my_PutString("\x1B[m");
OSReportForceEnableOff();
fflush(&__files.stdout);
va_end(args);
}
}
/* 80006CEC-80006DCC 00162C 00E0+00 0/0 6/6 0/0 .text OSReport_Warning */
void OSReport_Warning(char* fmt, ...) {
print_warings++;
if (!data_80450B9A) {
va_list args;
va_start(args, fmt);
OSReportForceEnableOn();
my_PutString("\x1B[43;30m[WARN]");
OSVAttention(fmt, args);
my_PutString("\x1B[m");
OSReportForceEnableOff();
fflush(&__files.stdout);
va_end(args);
}
}
/* 80006DCC-80006E7C 00170C 00B0+00 0/0 1/1 0/0 .text OSReport_System */
void OSReport_System(char* fmt, ...) {
print_systems++;
if (!data_80450B9B) {
va_list args;
va_start(args, fmt);
OSReportForceEnableOn();
OSVAttention(fmt, args);
OSReportForceEnableOff();
va_end(args);
}
}
/* ############################################################################################## */
/* 80373CB0-80373CB0 000310 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80373D10 = " in \"%s\" on line %d.\n";
SECTION_DEAD static char const* const stringBase_80373D26 =
"\nAddress: Back Chain LR Save\n";
SECTION_DEAD static char const* const stringBase_80373D4C = "0x%08x: 0x%08x 0x%08x\n";
#pragma pop
/* 80006E7C-80006FB4 0017BC 0138+00 0/0 9/9 0/0 .text OSPanic */
// loop stuff / ending
#ifdef NONMATCHING
void OSPanic(char* file, s32 line, char* fmt, ...) {
OSDisableInterrupts();
va_list args;
va_start(args, fmt);
mDoPrintf_vprintf(fmt, args);
OSAttention(" in \"%s\" on line %d.\n", file, line);
OSAttention("\nAddress: Back Chain LR Save\n");
u32 tmp = 0;
u8* stackPtr = OSGetStackPointer();
while (stackPtr != NULL && tmp < 0x10) {
OSAttention("0x%08x: 0x%08x 0x%08x\n", stackPtr, *(u32*)stackPtr,
*(u32*)(stackPtr + 4));
stackPtr++;
tmp++;
}
PPCHalt();
va_end(args);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void OSPanic(char* file, s32 line, char* fmt, ...) {
nofralloc
#include "asm/m_Do/m_Do_printf/OSPanic.s"
}
#pragma pop
#endif
/* 80373CB0-80373CB0 000310 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */