Match most of DynamicLink

This commit is contained in:
jdflyer 2022-01-03 21:05:34 -07:00
parent 6c681c985c
commit 346215bd49
9 changed files with 663 additions and 465 deletions

View File

@ -221,4 +221,8 @@ inline JKRHeap* JKRGetCurrentHeap() {
return JKRHeap::getCurrentHeap();
}
inline u32 JKRGetMemBlockSize(JKRHeap* heap,void* block) {
return JKRHeap::getSize(block,heap);
}
#endif /* JKRHEAP_H */

View File

@ -115,12 +115,12 @@ private:
/* 0x10 */ JUTConsole* mDirectConsole;
}; // Size: 0x14
void JUTConsole_print_f_va_(JUTConsole*, const char*, va_list);
void JUTSetReportConsole(JUTConsole*);
JUTConsole* JUTGetReportConsole();
void JUTSetWarningConsole(JUTConsole*);
JUTConsole* JUTGetWarningConsole();
void JUTReportConsole_f_va(const char*, va_list);
void JUTReportConsole_f(const char*, ...);
extern "C" void JUTConsole_print_f_va_(JUTConsole*, const char*, va_list);
extern "C" void JUTSetReportConsole(JUTConsole*);
extern "C" JUTConsole* JUTGetReportConsole();
extern "C" void JUTSetWarningConsole(JUTConsole*);
extern "C" JUTConsole* JUTGetWarningConsole();
extern "C" void JUTReportConsole_f_va(const char*, va_list);
extern "C" void JUTReportConsole_f(const char*, ...);
#endif /* JUTCONSOLE_H */

View File

@ -3,34 +3,40 @@
#include "dolphin/types.h"
struct OSModuleInfo {
u32 id;
OSModuleInfo* next;
OSModuleInfo* prev;
u32 num_sections;
u32 section_info_offset;
u32 name_offset;
u32 name_size;
u32 version;
u32 bss_size;
u32 rel_offset;
u32 imp_offset;
u32 imp_size;
u8 prolog_section;
u8 epilog_section;
u8 unresolved_section;
u8 bss_section;
u32 prolog;
u32 epilog;
u32 unresolved;
u32 align;
u32 bss_align;
u32 fix_size;
struct OSSectionInfo {
u32 mOffset;
u32 mSize;
};
struct OSSectionInfo {
u32 offset;
u32 size;
struct OSModuleInfo {
u32 mId;
OSModuleInfo* mNext;
OSModuleInfo* mPrev;
u32 mNumSections;
struct { //Needed to get an assert corret; very likely bigger
u32 sectionInfoOffset;
} info;
u32 mModuleNameOffset;
u32 mModuleNameSize;
u32 mModuleVersion;
u32 mBssSize;
u32 mRelocationTableOffset;
u32 mImportTableOffset;
u32 mImportTableSize;
u8 mPrologSection;
u8 mEpilogSection;
u8 mUnresolvedSection;
u8 mBssSection;
u32 (*prolog)();
void(*epilog)();
u32 mUnresolvedFuncOffset;
u32 mModuleAlignment;
u32 mBssAlignment;
u32 fixSize;
};
extern "C" BOOL OSLink(OSModuleInfo*);
extern "C" BOOL OSLinkFixed(OSModuleInfo*,u32);
extern "C" BOOL OSUnlink(OSModuleInfo*);
#endif /* OSLINK_H */

View File

@ -16,6 +16,8 @@ public:
public:
/* 800158FC */ virtual ~mDoDvdThd_command_c();
/* 80015B74 */ mDoDvdThd_command_c();
inline s32 sync() {return mIsDone;}
inline void destroy() {delete this;}
virtual s32 execute() = 0;
}; // Size = 0x14

View File

@ -111,8 +111,6 @@ extern "C" void create__12JUTAssertionFv();
extern "C" void createManager__8JUTVideoFPC16_GXRenderModeObj();
extern "C" void create__10JUTConsoleFUiUiP7JKRHeap();
extern "C" void createManager__17JUTConsoleManagerFP7JKRHeap();
extern "C" void JUTSetReportConsole();
extern "C" void JUTSetWarningConsole();
extern "C" void OSInit();
extern "C" void OSGetCurrentThread();
extern "C" void DVDInit();

View File

@ -259,7 +259,7 @@ asm void JUTConsole::print(char const* param_0) {
#pragma pop
/* 802E7F30-802E7F7C 2E2870 004C+00 1/1 1/1 0/0 .text JUTConsole_print_f_va_ */
void JUTConsole_print_f_va_(JUTConsole* console, const char* fmt, va_list args) {
extern "C" void JUTConsole_print_f_va_(JUTConsole* console, const char* fmt, va_list args) {
char buf[1024];
vsnprintf(buf, sizeof(buf), fmt, args);
console->print(buf);
@ -415,12 +415,12 @@ void JUTConsoleManager::setDirectConsole(JUTConsole* pConsole) {
static JUTConsole* sReportConsole;
/* 802E8520-802E8528 2E2E60 0008+00 1/1 1/1 0/0 .text JUTSetReportConsole */
void JUTSetReportConsole(JUTConsole* pConsole) {
extern "C" void JUTSetReportConsole(JUTConsole* pConsole) {
sReportConsole = pConsole;
}
/* 802E8528-802E8530 -00001 0008+00 0/0 0/0 0/0 .text JUTGetReportConsole */
JUTConsole* JUTGetReportConsole() {
extern "C" JUTConsole* JUTGetReportConsole() {
return sReportConsole;
}
@ -429,17 +429,17 @@ JUTConsole* JUTGetReportConsole() {
static JUTConsole* sWarningConsole;
/* 802E8530-802E8538 2E2E70 0008+00 1/1 1/1 0/0 .text JUTSetWarningConsole */
void JUTSetWarningConsole(JUTConsole* pConsole) {
extern "C" void JUTSetWarningConsole(JUTConsole* pConsole) {
sWarningConsole = pConsole;
}
/* 802E8538-802E8540 -00001 0008+00 0/0 0/0 0/0 .text JUTGetWarningConsole */
JUTConsole* JUTGetWarningConsole() {
extern "C" JUTConsole* JUTGetWarningConsole() {
return sWarningConsole;
}
/* 802E8540-802E85C8 2E2E80 0088+00 2/2 0/0 0/0 .text JUTReportConsole_f_va */
void JUTReportConsole_f_va(const char* fmt, va_list args) {
extern "C" void JUTReportConsole_f_va(const char* fmt, va_list args) {
char buf[256];
if (JUTGetReportConsole() == NULL) {
@ -451,7 +451,7 @@ void JUTReportConsole_f_va(const char* fmt, va_list args) {
}
/* 802E85C8-802E8648 2E2F08 0080+00 2/2 8/8 0/0 .text JUTReportConsole_f */
void JUTReportConsole_f(const char* fmt, ...) {
extern "C" void JUTReportConsole_f(const char* fmt, ...) {
va_list args;
va_start(args, fmt);
JUTReportConsole_f_va(fmt, args);

View File

@ -338,25 +338,25 @@ bool JUTException::searchPartialModule(u32 address, u32* module_id, u32* section
OSModuleInfo* module = *(OSModuleInfo**)0x800030C8;
while (module) {
OSSectionInfo* section = (OSSectionInfo*)module->section_info_offset;
for (u32 i = 0; i < module->num_sections; section++, i++) {
if (section->size) {
u32 addr = ALIGN_PREV(section->offset, 2);
if ((addr <= address) && (address < addr + section->size)) {
OSSectionInfo* section = (OSSectionInfo*)module->info.sectionInfoOffset;
for (u32 i = 0; i < module->mNumSections; section=section+1, i++) {
if (section->mSize) {
u32 addr = ALIGN_PREV(section->mOffset, 2);
if ((addr <= address) && (address < addr + section->mSize)) {
if (module_id)
*module_id = module->id;
*module_id = module->mId;
if (section_id)
*section_id = i;
if (section_offset)
*section_offset = address - addr;
if (name_offset)
*name_offset = module->name_offset;
*name_offset = module->mModuleNameOffset;
return true;
}
}
}
module = module->next;
module = module->mNext;
}
return false;

View File

@ -16,10 +16,7 @@ extern "C" static void OSNotifyUnlink();
extern "C" void OSSetStringTable();
extern "C" static void Relocate();
extern "C" static void Link();
extern "C" void OSLink();
extern "C" void OSLinkFixed();
extern "C" static void Undo();
extern "C" void OSUnlink();
extern "C" void __OSModuleInit();
//
@ -125,7 +122,7 @@ static asm void Link() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void OSLink() {
extern "C" asm BOOL OSLink(OSModuleInfo* info) {
nofralloc
#include "asm/dolphin/os/OSLink/OSLink.s"
}
@ -135,7 +132,7 @@ asm void OSLink() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void OSLinkFixed() {
extern "C" asm BOOL OSLinkFixed(OSModuleInfo* info, u32 unk) {
nofralloc
#include "asm/dolphin/os/OSLink/OSLinkFixed.s"
}
@ -201,7 +198,7 @@ static asm void Undo() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void OSUnlink() {
extern "C" asm BOOL OSUnlink(OSModuleInfo* info) {
nofralloc
#include "asm/dolphin/os/OSLink/OSUnlink.s"
}

File diff suppressed because it is too large Load Diff