summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-04-24 04:02:50 -0700
committerGitHub <noreply@github.com>2022-04-24 13:02:50 +0200
commit589cc12296ae7253c62655859a5eef92ee42dbaf (patch)
treedd8556994b43ed23dff2aed6bb4c019e5c0d7ec9 /src
parenta1099217d65362f16dd90284670a7dd37702a3ca (diff)
some MSL_C work (#192)
* wip * bunch of MSL_C files thanks to pikmin2 decomp for their work * format / asm * progress * fix * fix remove-asm to work with C files * init / start
Diffstat (limited to 'src')
-rw-r--r--src/DynamicLink.cpp2
-rw-r--r--src/__start.c61
-rw-r--r--src/f_pc/f_pc_manager.cpp2
-rw-r--r--src/init.c (renamed from src/init.cpp)228
4 files changed, 177 insertions, 116 deletions
diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp
index ff49957ce1..2f1dda8bd9 100644
--- a/src/DynamicLink.cpp
+++ b/src/DynamicLink.cpp
@@ -456,7 +456,7 @@ error:
*/
bool DynamicModuleControl::do_unlink() {
OSTime time1 = OSGetTime();
- ((void(*)())mModule->epilog)();
+ ((void (*)())mModule->epilog)();
OSTime time2 = OSGetTime();
BOOL unklink = OSUnlink(mModule);
OSTime time3 = OSGetTime();
diff --git a/src/__start.c b/src/__start.c
new file mode 100644
index 0000000000..2c7a0dc4b4
--- /dev/null
+++ b/src/__start.c
@@ -0,0 +1,61 @@
+#include "dol2asm.h"
+#include "dolphin/types.h"
+#include "init.h"
+
+//
+// Forward References:
+//
+
+SECTION_INIT void __check_pad3();
+SECTION_INIT void __set_debug_bba();
+SECTION_INIT u8 __get_debug_bba();
+SECTION_INIT void __start();
+
+//
+// External References:
+//
+
+void main();
+void OSInit();
+void OSResetSystem(s32, s32, s32);
+void __init_user();
+void DBInit();
+void exit();
+void InitMetroTRK();
+void InitMetroTRK_BBA();
+extern u8 data_804516D0;
+void __init_data();
+void __init_hardware();
+void __init_registers();
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+/* 80003100-80003140 000000 0040+00 1/1 0/0 0/0 .init __check_pad3 */
+SECTION_INIT void __check_pad3(void) {
+ if ((*(u16*)0x800030E4 & 0xEEF) == 0xEEF) {
+ OSResetSystem(0, 0, 0);
+ }
+}
+
+/* 80003140-8000314C 000040 000C+00 1/1 0/0 0/0 .init __set_debug_bba */
+void __set_debug_bba(void) {
+ data_804516D0 = 1;
+}
+
+/* 8000314C-80003154 -00001 0008+00 0/0 0/0 0/0 .init __get_debug_bba */
+SECTION_INIT u8 __get_debug_bba(void) {
+ return data_804516D0;
+}
+
+/* 80003154-800032B0 000054 015C+00 0/0 1/0 0/0 .init __start */
+#pragma push
+#pragma optimization_level 0
+#pragma optimizewithasm off
+SECTION_INIT asm void __start() {
+ nofralloc
+#include "asm/init/__start.s"
+}
+#pragma pop
diff --git a/src/f_pc/f_pc_manager.cpp b/src/f_pc/f_pc_manager.cpp
index 7ba8946c34..54c6ce9c4c 100644
--- a/src/f_pc/f_pc_manager.cpp
+++ b/src/f_pc/f_pc_manager.cpp
@@ -26,9 +26,9 @@
#include "f_pc/f_pc_priority.h"
#include "f_pc/f_pc_profile.h"
+#include "SSystem/SComponent/c_API_graphic.h"
#include "d/com/d_com_inf_game.h"
#include "m_Do/m_Do_audio.h"
-#include "SSystem/SComponent/c_API_graphic.h"
//
// Types:
diff --git a/src/init.cpp b/src/init.c
index 121b6fa7f0..aa86ff38d1 100644
--- a/src/init.cpp
+++ b/src/init.c
@@ -8,20 +8,6 @@
#include "dolphin/types.h"
//
-// Types:
-//
-
-struct daBg_c {
- /* 804582B8 */ void createHeap();
-};
-
-struct daBgObj_c {
- struct spec_data_c {
- /* 80459904 */ void Set(void*);
- };
-};
-
-//
// Forward References:
//
@@ -33,75 +19,39 @@ SECTION_INIT void __init_registers();
SECTION_INIT void __init_data();
SECTION_INIT void __init_hardware();
SECTION_INIT void __flush_cache();
-SECTION_INIT void __fill_mem();
-SECTION_INIT void TRK_memset();
-SECTION_INIT void TRK_memcpy();
-extern "C" extern u8 const __TRK_unknown_data[7988];
+SECTION_INIT void __fill_mem(void*, int, u32);
+SECTION_INIT void* TRK_memset(void*, int, size_t);
+SECTION_INIT void* TRK_memcpy(void* dst, const void* src, size_t n);
+extern u8 const __TRK_unknown_data[7988];
SECTION_INIT void __TRK_reset();
-extern "C" extern u8 const _rom_copy_info[132];
-extern "C" extern u8 const _bss_init_info[32];
+extern u8 const _rom_copy_info[132];
+extern u8 const _bss_init_info[32];
//
// External References:
//
-extern "C" void main();
-extern "C" void __OSFPRInit();
-extern "C" void OSInit();
-extern "C" void __OSPSInit();
-extern "C" void __OSCacheInit();
-extern "C" void OSResetSystem();
-extern "C" void __init_user();
-extern "C" void DBInit();
-extern "C" void exit();
-extern "C" void TRK_fill_mem();
-extern "C" void InitMetroTRK();
-extern "C" void InitMetroTRK_BBA();
-extern "C" extern u8 data_804516D0[8];
-extern "C" void _epilog();
-extern "C" void createHeap__6daBg_cFv();
-extern "C" void Set__Q29daBgObj_c11spec_data_cFPv();
+void main();
+void __OSFPRInit();
+void OSInit();
+void __OSPSInit();
+void __OSCacheInit();
+void OSResetSystem(s32, s32, s32);
+void __init_user();
+void DBInit();
+void exit();
+void TRK_fill_mem(void* dst, int val, size_t n);
+void InitMetroTRK();
+void InitMetroTRK_BBA();
+extern u8 data_804516D0;
+void _epilog();
+void createHeap__6daBg_cFv();
+void Set__Q29daBgObj_c11spec_data_cFPv();
//
// Declarations:
//
-/* ############################################################################################## */
-/* 80003100-80003140 000000 0040+00 1/1 0/0 0/0 .init __check_pad3 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void __check_pad3() {
- nofralloc
-#include "asm/init/__check_pad3.s"
-}
-#pragma pop
-
-/* 80003140-8000314C 000040 000C+00 1/1 0/0 0/0 .init __set_debug_bba */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void __set_debug_bba() {
- nofralloc
-#include "asm/init/__set_debug_bba.s"
-}
-#pragma pop
-
-/* 8000314C-80003154 -00001 0008+00 0/0 0/0 0/0 .init __get_debug_bba */
-SECTION_INIT u8 __get_debug_bba() {
- return *(u8*)(&data_804516D0);
-}
-
-/* 80003154-800032B0 000054 015C+00 0/0 1/0 0/0 .init __start */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void __start() {
- nofralloc
-#include "asm/init/__start.s"
-}
-#pragma pop
-
extern void* _stack_end;
extern void* _SDA2_BASE_;
extern void* _SDA_BASE_;
@@ -147,54 +97,109 @@ SECTION_INIT asm void __flush_cache() {
#pragma pop
/* 80003458-80003488 000358 0030+00 1/1 55/55 137/137 .init memset */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void* memset(void*, int, u32) {
- nofralloc
-#include "asm/init/memset.s"
+SECTION_INIT void* memset(void* dst, int val, size_t n) {
+ __fill_mem(dst, val, n);
+
+ return dst;
}
-#pragma pop
/* 80003488-80003540 000388 00B8+00 1/1 0/0 0/0 .init __fill_mem */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void __fill_mem() {
- nofralloc
-#include "asm/init/__fill_mem.s"
+SECTION_INIT void __fill_mem(void* dst, int val, size_t n) {
+ unsigned long v = (unsigned char)val;
+ unsigned long i;
+
+ ((unsigned char*)dst) = ((unsigned char*)dst) - 1;
+
+ if (n >= 32) {
+ i = (~(unsigned long)dst) & 3;
+
+ if (i) {
+ n -= i;
+
+ do {
+ *++(((unsigned char*)dst)) = v;
+ } while (--i);
+ }
+
+ if (v)
+ v |= v << 24 | v << 16 | v << 8;
+
+ ((unsigned long*)dst) = ((unsigned long*)(((unsigned char*)dst) + 1)) - 1;
+
+ i = n >> 5;
+
+ if (i) {
+ do {
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ *++((unsigned long*)dst) = v;
+ } while (--i);
+ }
+
+ i = (n & 31) >> 2;
+
+ if (i) {
+ do {
+ *++((unsigned long*)dst) = v;
+ } while (--i);
+ }
+
+ ((unsigned char*)dst) = ((unsigned char*)(((unsigned long*)dst) + 1)) - 1;
+
+ n &= 3;
+ }
+
+ if (n)
+ do {
+ *++((unsigned char*)dst) = v;
+ } while (--n);
+
+ return;
}
-#pragma pop
/* 80003540-80003590 000440 0050+00 1/1 63/63 6/6 .init memcpy */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void* memcpy(void*, const void*, s32) {
- nofralloc
-#include "asm/init/memcpy.s"
+SECTION_INIT void* memcpy(void* dst, const void* src, size_t n) {
+ const unsigned char* s;
+ unsigned char* d;
+
+ if ((unsigned long)src >= (unsigned long)dst) {
+ s = (const unsigned char*)src - 1;
+ d = (unsigned char*)dst - 1;
+ n++;
+ while (--n != 0)
+ *++d = *++s;
+ } else {
+ s = (const unsigned char*)src + n;
+ d = (unsigned char*)dst + n;
+ n++;
+ while (--n != 0)
+ *--d = *--s;
+ }
+ return dst;
}
-#pragma pop
/* 80003590-800035C0 000490 0030+00 0/0 1/1 0/0 .init TRK_memset */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void TRK_memset() {
- nofralloc
-#include "asm/init/TRK_memset.s"
+SECTION_INIT void* TRK_memset(void* dst, int val, size_t n) {
+ TRK_fill_mem(dst, val, n);
+
+ return dst;
}
-#pragma pop
/* 800035C0-800035E4 0004C0 0024+00 0/0 12/12 0/0 .init TRK_memcpy */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void TRK_memcpy() {
- nofralloc
-#include "asm/init/TRK_memcpy.s"
+SECTION_INIT void* TRK_memcpy(void* dst, const void* src, size_t n) {
+ const unsigned char* s = (const unsigned char*)src - 1;
+ unsigned char* d = (unsigned char*)dst - 1;
+
+ n++;
+ while (--n != 0)
+ *++d = *++s;
+ return dst;
}
-#pragma pop
/* 800035E4-80005518 0004E4 1F34+00 0/0 1/1 0/0 .init __TRK_unknown_data */
SECTION_INIT extern u8 const __TRK_unknown_data[7988] = {
@@ -701,14 +706,9 @@ SECTION_INIT extern u8 const __TRK_unknown_data[7988] = {
};
/* 80005518-80005544 002418 002C+00 0/0 1/1 0/0 .init __TRK_reset */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-SECTION_INIT asm void __TRK_reset() {
- nofralloc
-#include "asm/init/__TRK_reset.s"
+SECTION_INIT void __TRK_reset() {
+ OSResetSystem(0, 0, 0);
}
-#pragma pop
/* 80005544-800055C8 002444 0084+00 1/1 0/0 0/0 .init _rom_copy_info */
/* generated by the linker */