From faacc236bfefdaa46c1194c6b4954a86ae802fae Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Tue, 19 Nov 2024 02:57:22 +0100 Subject: [PATCH 1/3] Imported some runtime libraries --- configure.py | 6 +- include/Runtime.PPCEABI.H/__va_arg.h | 40 ++ include/dol2asm.h | 90 +++ include/dolphin/os.h | 10 +- src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c | 30 + src/Runtime.PPCEABI.H/__mem.c | 91 +++ src/Runtime.PPCEABI.H/__va_arg.c | 50 ++ src/Runtime.PPCEABI.H/runtime.c | 827 ++++++++++++++++++++++++++ 8 files changed, 1139 insertions(+), 5 deletions(-) create mode 100644 include/Runtime.PPCEABI.H/__va_arg.h create mode 100644 include/dol2asm.h create mode 100644 src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c create mode 100644 src/Runtime.PPCEABI.H/__mem.c create mode 100644 src/Runtime.PPCEABI.H/__va_arg.c create mode 100644 src/Runtime.PPCEABI.H/runtime.c diff --git a/configure.py b/configure.py index 3f14b329..608ebd22 100644 --- a/configure.py +++ b/configure.py @@ -631,13 +631,13 @@ config.libs = [ "cflags": cflags_runtime, "host": False, "objects": [ - Object(NonMatching, "Runtime.PPCEABI.H/__va_arg.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__va_arg.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/global_destructor_chain.c"), - Object(NonMatching, "Runtime.PPCEABI.H/__mem.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__mem.c"), Object(NonMatching, "Runtime.PPCEABI.H/New.cp"), Object(NonMatching, "Runtime.PPCEABI.H/NewMore.cp"), Object(NonMatching, "Runtime.PPCEABI.H/NMWException.cp"), - Object(NonMatching, "Runtime.PPCEABI.H/runtime.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/runtime.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__init_cpp_exceptions.cpp"), Object(NonMatching, "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp"), Object(NonMatching, "Runtime.PPCEABI.H/GCN_mem_alloc.c"), diff --git a/include/Runtime.PPCEABI.H/__va_arg.h b/include/Runtime.PPCEABI.H/__va_arg.h new file mode 100644 index 00000000..22975640 --- /dev/null +++ b/include/Runtime.PPCEABI.H/__va_arg.h @@ -0,0 +1,40 @@ +#ifndef __VA_ARG_H +#define __VA_ARG_H + +#include "dolphin/types.h" + +typedef struct __va_list_struct { + char gpr; + char fpr; + char reserved[2]; + char* input_arg_area; + char* reg_save_area; +} _va_list_struct; + +typedef _va_list_struct __va_list[1]; + +#ifdef __cplusplus +extern "C" void* __va_arg(_va_list_struct*, int); +#else +void* __va_arg(_va_list_struct*, int); +#endif + +#ifndef __MWERKS__ +#define __builtin_va_info(...) +#define _var_arg_typeof(...) +#endif + +// from defined-string in mwcceppc.exe: +// __builtin_va_info: initialize the __va_list_struct +// _var_arg_typeof: convert type to integer for __va_arg +#define __va_start(list, fmt) __builtin_va_info(&list) +#define __va_arg(list, type) (*((type*)__va_arg(list, _var_arg_typeof(type)))) +#define va_start __va_start +#define va_arg __va_arg +#define va_end __va_end +#define va_list __va_list +#define __va_end(list) ((void)0) + +#define __va_copy(a, b) (*(a) = *(b)) + +#endif /* __VA_ARG_H */ diff --git a/include/dol2asm.h b/include/dol2asm.h new file mode 100644 index 00000000..3b28a774 --- /dev/null +++ b/include/dol2asm.h @@ -0,0 +1,90 @@ +#ifndef DOL2ASM +#define DOL2ASM + +// this helps remove useless error from the linter when using vscode. +#ifdef __MWERKS__ + +#ifdef __cplusplus +#define SECTION_INIT extern "C" __declspec(section ".init") +#define SECTION_RODATA __declspec(section ".rodata") +#define SECTION_DATA __declspec(section ".data") +#define SECTION_SDATA __declspec(section ".sdata") +#define SECTION_SDATA2 __declspec(section ".sdata2") +#define SECTION_BSS __declspec(section ".data") +#define SECTION_SBSS __declspec(section ".sdata") +#define SECTION_SBSS2 __declspec(section ".sdata2") +#define SECTION_CTORS extern "C" __declspec(section ".ctors") +#define SECTION_DTORS extern "C" __declspec(section ".dtors") +#define SECTION_EXTAB extern "C" __declspec(section "extab_") +#define SECTION_EXTABINDEX extern "C" __declspec(section "extabindex_") +#define SECTION_DEAD extern "C" __declspec(section ".dead") +#define SECTION_CTORS10 __declspec(section ".ctors$10") +#define SECTION_CTORS15 __declspec(section ".ctors$15") +#define SECTION_DTORS10 __declspec(section ".dtors$10") +#define SECTION_DTORS15 __declspec(section ".dtors$15") +#define COMPILER_STRIP_GATE(NAME, VALUE) SECTION_DEAD void* const cg_##NAME = (void*)(VALUE) +#define REGISTER_CTORS(ADDR, FUNCTION) SECTION_CTORS void* const _ctors_##ADDR = (void*)(FUNCTION); +#else +#define SECTION_INIT __declspec(section ".init") +#define SECTION_RODATA __declspec(section ".rodata") +#define SECTION_DATA __declspec(section ".data") +#define SECTION_SDATA __declspec(section ".sdata") +#define SECTION_SDATA2 __declspec(section ".sdata2") +#define SECTION_BSS __declspec(section ".data") +#define SECTION_SBSS __declspec(section ".sdata") +#define SECTION_SBSS2 __declspec(section ".sdata2") +#define SECTION_CTORS __declspec(section ".ctors") +#define SECTION_DTORS __declspec(section ".dtors") +#define SECTION_EXTAB __declspec(section "extab_") +#define SECTION_EXTABINDEX __declspec(section "extabindex_") +#define SECTION_DEAD __declspec(section ".dead") +#define SECTION_CTORS10 __declspec(section ".ctors$10") +#define SECTION_CTORS15 __declspec(section ".ctors$15") +#define SECTION_DTORS10 __declspec(section ".dtors$10") +#define SECTION_DTORS15 __declspec(section ".dtors$15") +#define COMPILER_STRIP_GATE(NAME, VALUE) SECTION_DEAD void* const cg_##NAME = (void*)(VALUE) +#define REGISTER_CTORS(ADDR, FUNCTION) SECTION_CTORS void* const _ctors_##ADDR = (void*)(FUNCTION); +#endif + +#else +#define SECTION_INIT +#define SECTION_RODATA +#define SECTION_DATA +#define SECTION_SDATA +#define SECTION_SDATA2 +#define SECTION_BSS +#define SECTION_SBSS +#define SECTION_SBSS2 +#define SECTION_CTORS +#define SECTION_DTORS +#define SECTION_EXTAB +#define SECTION_EXTABINDEX +#define SECTION_DEAD +#define SECTION_CTORS10 +#define SECTION_CTORS15 +#define SECTION_DTORS10 +#define SECTION_DTORS15 +#define COMPILER_STRIP_GATE(...) +#define REGISTER_CTORS(...) + +// vscode doesn't like asm and nofralloc very much +#define asm +#define nofralloc +#endif + +// floating-point constants +// TODO: move to different header +#define _HUGE_ENUF 1e+300 +#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF)) +#define HUGE_VAL ((double)INFINITY) +#define HUGE_VALL ((long double)INFINITY) + +#define DOUBLE_INF HUGE_VAL + +#pragma section ".dead" +#pragma section ".ctors$10" +#pragma section ".ctors$15" +#pragma section ".dtors$10" +#pragma section ".dtors$15" + +#endif /* DOL2ASM */ diff --git a/include/dolphin/os.h b/include/dolphin/os.h index 6394de8b..d255bb04 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -57,8 +57,14 @@ u32 OSUncachedToCached(void *ucaddr); #define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0)) -#define OSRoundUp32B(v) (((u32)(v + 31) & ~31)) -#define OSRoundDown32B(x) (((u32)(x)) & ~31) +#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F)) +#define OSRoundDown32B(x) (((u32)(x)) & ~(0x1F)) + +#define OSRoundUp(x, align) (((x) + (align)-1) & (-(align))) +#define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1)))) + +#define OSRoundDown(x, align) ((x) & (-(align))) +#define OSRoundDownPtr(x, align) ((void*)(((u32)(x)) & (~((align)-1)))) void OSInit(); diff --git a/src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c b/src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c new file mode 100644 index 00000000..c36465e2 --- /dev/null +++ b/src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c @@ -0,0 +1,30 @@ +#include "dolphin/os.h" + +inline static void InitDefaultHeap(void) { + void* arenaLo; + void* arenaHi; + + OSReport("GCN_Mem_Alloc.c : InitDefaultHeap. No Heap Available\n"); + OSReport("Metrowerks CW runtime library initializing default heap\n"); + + arenaLo = OSGetArenaLo(); + arenaHi = OSGetArenaHi(); + + arenaLo = OSInitAlloc(arenaLo, arenaHi, 1); + OSSetArenaLo(arenaLo); + + arenaLo = OSRoundUpPtr(arenaLo, 0x20); + arenaHi = OSRoundDownPtr(arenaHi, 0x20); + + OSSetCurrentHeap(OSCreateHeap(arenaLo, arenaHi)); + OSSetArenaLo(arenaLo = arenaHi); +} + +/* 80362914-803629CC 35D254 00B8+00 0/0 1/1 0/0 .text __sys_free */ +void __sys_free(void* p) { + if (__OSCurrHeap == -1) { + InitDefaultHeap(); + } + + OSFreeToHeap(__OSCurrHeap, p); +} diff --git a/src/Runtime.PPCEABI.H/__mem.c b/src/Runtime.PPCEABI.H/__mem.c new file mode 100644 index 00000000..08da3972 --- /dev/null +++ b/src/Runtime.PPCEABI.H/__mem.c @@ -0,0 +1,91 @@ +#include "dol2asm.h" +#include "stddef.h" +#include + + +/* 80003540-80003590 000440 0050+00 1/1 63/63 6/6 .init memcpy */ +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; +} + +/* 80003488-80003540 000388 00B8+00 1/1 0/0 0/0 .init __fill_mem */ +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; +} + +/* 80003458-80003488 000358 0030+00 1/1 55/55 137/137 .init memset */ +SECTION_INIT void* memset(void* dst, int val, size_t n) { + __fill_mem(dst, val, n); + + return dst; +} diff --git a/src/Runtime.PPCEABI.H/__va_arg.c b/src/Runtime.PPCEABI.H/__va_arg.c new file mode 100644 index 00000000..c6e8bc63 --- /dev/null +++ b/src/Runtime.PPCEABI.H/__va_arg.c @@ -0,0 +1,50 @@ +#include "Runtime.PPCEABI.H/__va_arg.h" + +#undef __va_arg + +/* 80361B14-80361BDC 35C454 00C8+00 0/0 3/3 0/0 .text __va_arg */ +void* __va_arg(_va_list_struct* list, int type) { + char* addr; + char* reg = &(list->gpr); + int g_reg = list->gpr; + int maxsize = 8; + int size = 4; + int increment = 1; + int even = 0; + int fpr_offset = 0; + int regsize = 4; + + if (type == 3) { + reg = &(list->fpr); + g_reg = list->fpr; + size = 8; + fpr_offset = 32; + regsize = 8; + } + + if (type == 2) { + size = 8; + maxsize--; + if (g_reg & 1) { + even = 1; + } + increment = 2; + } + + if (g_reg < maxsize) { + g_reg += even; + addr = list->reg_save_area + fpr_offset + (g_reg * regsize); + *reg = g_reg + increment; + } else { + *reg = 8; + addr = list->input_arg_area; + addr = (char*)(((u32)(addr) + ((size)-1)) & ~((size)-1)); + list->input_arg_area = addr + size; + } + + if (type == 0) { + addr = *((char**)addr); + } + + return addr; +} diff --git a/src/Runtime.PPCEABI.H/runtime.c b/src/Runtime.PPCEABI.H/runtime.c new file mode 100644 index 00000000..8616931a --- /dev/null +++ b/src/Runtime.PPCEABI.H/runtime.c @@ -0,0 +1,827 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* macros for GPR/FPR resting and saving */ +#define SAVE_FPR(reg) _savefpr_##reg +#define RESTORE_FPR(reg) _restfpr_##reg +#define SAVE_GPR(reg) _savegpr_##reg +#define RESTORE_GPR(reg) _restgpr_##reg + +#define ENTRY_SAVE_FPR(reg) entry SAVE_FPR(reg) +#define ENTRY_RESTORE_FPR(reg) entry RESTORE_FPR(reg) +#define ENTRY_SAVE_GPR(reg) entry SAVE_GPR(reg) +#define ENTRY_RESTORE_GPR(reg) entry RESTORE_GPR(reg) + +#define save_restore_reg r11 + +asm void __div2u(void); +asm void __div2i(void); +asm void __mod2u(void); +asm void __mod2i(void); +asm void __shl2i(void); +asm void __shr2u(void); +asm void __shr2i(void); +asm void __cvt_dbl_usll(void); + +void SAVE_FPR(14)(void); +void SAVE_FPR(15)(void); +void SAVE_FPR(16)(void); +void SAVE_FPR(17)(void); +void SAVE_FPR(18)(void); +void SAVE_FPR(19)(void); +void SAVE_FPR(20)(void); +void SAVE_FPR(21)(void); +void SAVE_FPR(22)(void); +void SAVE_FPR(23)(void); +void SAVE_FPR(24)(void); +void SAVE_FPR(25)(void); +void SAVE_FPR(26)(void); +void SAVE_FPR(27)(void); +void SAVE_FPR(28)(void); +void SAVE_FPR(29)(void); +void SAVE_FPR(30)(void); +void SAVE_FPR(31)(void); + +void RESTORE_FPR(14)(void); +void RESTORE_FPR(15)(void); +void RESTORE_FPR(16)(void); +void RESTORE_FPR(17)(void); +void RESTORE_FPR(18)(void); +void RESTORE_FPR(19)(void); +void RESTORE_FPR(20)(void); +void RESTORE_FPR(21)(void); +void RESTORE_FPR(22)(void); +void RESTORE_FPR(23)(void); +void RESTORE_FPR(24)(void); +void RESTORE_FPR(25)(void); +void RESTORE_FPR(26)(void); +void RESTORE_FPR(27)(void); +void RESTORE_FPR(28)(void); +void RESTORE_FPR(29)(void); +void RESTORE_FPR(30)(void); +void RESTORE_FPR(31)(void); + +void SAVE_GPR(14)(void); +void SAVE_GPR(15)(void); +void SAVE_GPR(16)(void); +void SAVE_GPR(17)(void); +void SAVE_GPR(18)(void); +void SAVE_GPR(19)(void); +void SAVE_GPR(20)(void); +void SAVE_GPR(21)(void); +void SAVE_GPR(22)(void); +void SAVE_GPR(23)(void); +void SAVE_GPR(24)(void); +void SAVE_GPR(25)(void); +void SAVE_GPR(26)(void); +void SAVE_GPR(27)(void); +void SAVE_GPR(28)(void); +void SAVE_GPR(29)(void); +void SAVE_GPR(30)(void); +void SAVE_GPR(31)(void); + +void RESTORE_GPR(14)(void); +void RESTORE_GPR(15)(void); +void RESTORE_GPR(16)(void); +void RESTORE_GPR(17)(void); +void RESTORE_GPR(18)(void); +void RESTORE_GPR(19)(void); +void RESTORE_GPR(20)(void); +void RESTORE_GPR(21)(void); +void RESTORE_GPR(22)(void); +void RESTORE_GPR(23)(void); +void RESTORE_GPR(24)(void); +void RESTORE_GPR(25)(void); +void RESTORE_GPR(26)(void); +void RESTORE_GPR(27)(void); +void RESTORE_GPR(28)(void); +void RESTORE_GPR(29)(void); +void RESTORE_GPR(30)(void); +void RESTORE_GPR(31)(void); + +static const u32 __constants[] = { + 0x00000000, 0x00000000, 0x41F00000, 0x00000000, 0x41E00000, 0x00000000, +}; + +/* 803620AC-80362108 35C9EC 005C+00 0/0 42/42 89/89 .text __cvt_fp2unsigned */ +asm u32 __cvt_fp2unsigned(register f64 d) +{ +#ifdef __MWERKS__ // clang-format off + nofralloc + stwu r1,-16(r1) + lis r4, __constants@h + ori r4, r4, __constants@l + li r3,0 + lfd fp0,0(r4) + lfd fp3,8(r4) + lfd fp4,16(r4) + fcmpu cr0,fp1,fp0 + fcmpu cr6,fp1,fp3 + blt cr0, @exit + addi r3,r3,-1 + bge cr6,@exit + fcmpu cr7,fp1,fp4 + fmr fp2,fp1 + blt cr7,@1 + fsub fp2,fp1,fp4 +@1 fctiwz fp2,fp2 + stfd fp2,8(r1) + lwz r3,12(r1) + blt cr7,@exit + addis r3,r3,-0x8000 +@exit: + addi r1,r1,16 + blr +#endif // clang-format on +} + +/* 80362108-80362134 35CA48 002C+00 0/0 0/0 0/0 .text __save_fpr */ +asm void __save_fpr(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + ENTRY_SAVE_FPR(14) + stfd fp14,-144(save_restore_reg) + ENTRY_SAVE_FPR(15) + stfd fp15,-136(save_restore_reg) + ENTRY_SAVE_FPR(16) + stfd fp16,-128(save_restore_reg) + ENTRY_SAVE_FPR(17) + stfd fp17,-120(save_restore_reg) + ENTRY_SAVE_FPR(18) + stfd fp18,-112(save_restore_reg) + ENTRY_SAVE_FPR(19) + stfd fp19,-104(save_restore_reg) + ENTRY_SAVE_FPR(20) + stfd fp20,-96(save_restore_reg) + ENTRY_SAVE_FPR(21) + stfd fp21,-88(save_restore_reg) + ENTRY_SAVE_FPR(22) + stfd fp22,-80(save_restore_reg) + ENTRY_SAVE_FPR(23) + stfd fp23,-72(save_restore_reg) + ENTRY_SAVE_FPR(24) + stfd fp24,-64(save_restore_reg) + ENTRY_SAVE_FPR(25) + stfd fp25,-56(save_restore_reg) + ENTRY_SAVE_FPR(26) + stfd fp26,-48(save_restore_reg) + ENTRY_SAVE_FPR(27) + stfd fp27,-40(save_restore_reg) + ENTRY_SAVE_FPR(28) + stfd fp28,-32(save_restore_reg) + ENTRY_SAVE_FPR(29) + stfd fp29,-24(save_restore_reg) + ENTRY_SAVE_FPR(30) + stfd fp30,-16(save_restore_reg) + ENTRY_SAVE_FPR(31) + stfd fp31,-8(save_restore_reg) + blr +#endif // clang-format on +} + +/* 80362154-80362180 35CA94 002C+00 0/0 0/0 0/0 .text __restore_fpr */ +asm void __restore_fpr(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + ENTRY_RESTORE_FPR(14) + lfd fp14,-144(save_restore_reg) + ENTRY_RESTORE_FPR(15) + lfd fp15,-136(save_restore_reg) + ENTRY_RESTORE_FPR(16) + lfd fp16,-128(save_restore_reg) + ENTRY_RESTORE_FPR(17) + lfd fp17,-120(save_restore_reg) + ENTRY_RESTORE_FPR(18) + lfd fp18,-112(save_restore_reg) + ENTRY_RESTORE_FPR(19) + lfd fp19,-104(save_restore_reg) + ENTRY_RESTORE_FPR(20) + lfd fp20,-96(save_restore_reg) + ENTRY_RESTORE_FPR(21) + lfd fp21,-88(save_restore_reg) + ENTRY_RESTORE_FPR(22) + lfd fp22,-80(save_restore_reg) + ENTRY_RESTORE_FPR(23) + lfd fp23,-72(save_restore_reg) + ENTRY_RESTORE_FPR(24) + lfd fp24,-64(save_restore_reg) + ENTRY_RESTORE_FPR(25) + lfd fp25,-56(save_restore_reg) + ENTRY_RESTORE_FPR(26) + lfd fp26,-48(save_restore_reg) + ENTRY_RESTORE_FPR(27) + lfd fp27,-40(save_restore_reg) + ENTRY_RESTORE_FPR(28) + lfd fp28,-32(save_restore_reg) + ENTRY_RESTORE_FPR(29) + lfd fp29,-24(save_restore_reg) + ENTRY_RESTORE_FPR(30) + lfd fp30,-16(save_restore_reg) + ENTRY_RESTORE_FPR(31) + lfd fp31,-8(save_restore_reg) + blr +#endif // clang-format on +} + +/* 803621A0-803621A4 35CAE0 0004+00 0/0 22/22 13/13 .text _savegpr_14 */ +asm void __save_gpr(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + ENTRY_SAVE_GPR(14) + stw r14,-72(save_restore_reg) + ENTRY_SAVE_GPR(15) + stw r15,-68(save_restore_reg) + ENTRY_SAVE_GPR(16) + stw r16,-64(save_restore_reg) + ENTRY_SAVE_GPR(17) + stw r17,-60(save_restore_reg) + ENTRY_SAVE_GPR(18) + stw r18,-56(save_restore_reg) + ENTRY_SAVE_GPR(19) + stw r19,-52(save_restore_reg) + ENTRY_SAVE_GPR(20) + stw r20,-48(save_restore_reg) + ENTRY_SAVE_GPR(21) + stw r21,-44(save_restore_reg) + ENTRY_SAVE_GPR(22) + stw r22,-40(save_restore_reg) + ENTRY_SAVE_GPR(23) + stw r23,-36(save_restore_reg) + ENTRY_SAVE_GPR(24) + stw r24,-32(save_restore_reg) + ENTRY_SAVE_GPR(25) + stw r25,-28(save_restore_reg) + ENTRY_SAVE_GPR(26) + stw r26,-24(save_restore_reg) + ENTRY_SAVE_GPR(27) + stw r27,-20(save_restore_reg) + ENTRY_SAVE_GPR(28) + stw r28,-16(save_restore_reg) + ENTRY_SAVE_GPR(29) + stw r29,-12(save_restore_reg) + ENTRY_SAVE_GPR(30) + stw r30,-8(save_restore_reg) + ENTRY_SAVE_GPR(31) + stw r31,-4(save_restore_reg) + blr +#endif // clang-format on +} + +/* 803621EC-803621F0 35CB2C 0004+00 0/0 22/22 13/13 .text _restgpr_14 */ +asm void __restore_gpr(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + ENTRY_RESTORE_GPR(14) + lwz r14,-72(save_restore_reg) + ENTRY_RESTORE_GPR(15) + lwz r15,-68(save_restore_reg) + ENTRY_RESTORE_GPR(16) + lwz r16,-64(save_restore_reg) + ENTRY_RESTORE_GPR(17) + lwz r17,-60(save_restore_reg) + ENTRY_RESTORE_GPR(18) + lwz r18,-56(save_restore_reg) + ENTRY_RESTORE_GPR(19) + lwz r19,-52(save_restore_reg) + ENTRY_RESTORE_GPR(20) + lwz r20,-48(save_restore_reg) + ENTRY_RESTORE_GPR(21) + lwz r21,-44(save_restore_reg) + ENTRY_RESTORE_GPR(22) + lwz r22,-40(save_restore_reg) + ENTRY_RESTORE_GPR(23) + lwz r23,-36(save_restore_reg) + ENTRY_RESTORE_GPR(24) + lwz r24,-32(save_restore_reg) + ENTRY_RESTORE_GPR(25) + lwz r25,-28(save_restore_reg) + ENTRY_RESTORE_GPR(26) + lwz r26,-24(save_restore_reg) + ENTRY_RESTORE_GPR(27) + lwz r27,-20(save_restore_reg) + ENTRY_RESTORE_GPR(28) + lwz r28,-16(save_restore_reg) + ENTRY_RESTORE_GPR(29) + lwz r29,-12(save_restore_reg) + ENTRY_RESTORE_GPR(30) + lwz r30,-8(save_restore_reg) + ENTRY_RESTORE_GPR(31) + lwz r31,-4(save_restore_reg) + blr +#endif // clang-format on +} + +/* 80362238-80362324 35CB78 00EC+00 0/0 2/2 0/0 .text __div2u */ +asm void __div2u(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + cmpwi cr0,r3,0 + cntlzw r0,r3 + cntlzw r9,r4 + bne cr0,lab1 + addi r0,r9,32 +lab1: + cmpwi cr0,r5,0 + cntlzw r9,r5 + cntlzw r10,r6 + bne cr0,lab2 + addi r9,r10,32 +lab2: + cmpw cr0,r0,r9 + subfic r10,r0,64 + bgt cr0,lab9 + addi r9,r9,1 + subfic r9,r9,64 + add r0,r0,r9 + subf r9,r9,r10 + mtctr r9 + cmpwi cr0,r9,32 + addi r7,r9,-32 + blt cr0,lab3 + srw r8,r3,r7 + li r7,0 + b lab4 +lab3: + srw r8,r4,r9 + subfic r7,r9,32 + slw r7,r3,r7 + or r8,r8,r7 + srw r7,r3,r9 +lab4: + cmpwi cr0,r0,32 + addic r9,r0,-32 + blt cr0,lab5 + slw r3,r4,r9 + li r4,0 + b lab6 +lab5: + slw r3,r3,r0 + subfic r9,r0,32 + srw r9,r4,r9 + or r3,r3,r9 + slw r4,r4,r0 +lab6: + li r10,-1 + addic r7,r7,0 +lab7: + adde r4,r4,r4 + adde r3,r3,r3 + adde r8,r8,r8 + adde r7,r7,r7 + subfc r0,r6,r8 + subfe. r9,r5,r7 + blt cr0,lab8 + mr r8,r0 + mr r7,r9 + addic r0,r10,1 +lab8: + bdnz lab7 + adde r4,r4,r4 + adde r3,r3,r3 + blr +lab9: + li r4,0 + li r3,0 + blr +#endif // clang-format on +} + +/* 80362324-8036245C 35CC64 0138+00 0/0 16/16 1/1 .text __div2i */ +asm void __div2i(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + stwu r1,-16(r1) + rlwinm. r9,r3,0,0,0 + beq cr0,positive1 + subfic r4,r4,0 + subfze r3,r3 +positive1: + stw r9,8(r1) + rlwinm. r10,r5,0,0,0 + beq cr0,positive2 + subfic r6,r6,0 + subfze r5,r5 +positive2: + stw r10,12(r1) + cmpwi cr0,r3,0 + cntlzw r0,r3 + cntlzw r9,r4 + bne cr0,lab1 + addi r0,r9,32 +lab1: + cmpwi cr0,r5,0 + cntlzw r9,r5 + cntlzw r10,r6 + bne cr0,lab2 + addi r9,r10,32 +lab2: + cmpw cr0,r0,r9 + subfic r10,r0,64 + bgt cr0,lab9 + addi r9,r9,1 + subfic r9,r9,64 + add r0,r0,r9 + subf r9,r9,r10 + mtctr r9 + cmpwi cr0,r9,32 + addi r7,r9,-32 + blt cr0,lab3 + srw r8,r3,r7 + li r7,0 + b lab4 +lab3: + srw r8,r4,r9 + subfic r7,r9,32 + slw r7,r3,r7 + or r8,r8,r7 + srw r7,r3,r9 +lab4: + cmpwi cr0,r0,32 + addic r9,r0,-32 + blt cr0,lab5 + slw r3,r4,r9 + li r4,0 + b lab6 +lab5: + slw r3,r3,r0 + subfic r9,r0,32 + srw r9,r4,r9 + or r3,r3,r9 + slw r4,r4,r0 +lab6: + li r10,-1 + addic r7,r7,0 +lab7: + adde r4,r4,r4 + adde r3,r3,r3 + adde r8,r8,r8 + adde r7,r7,r7 + subfc r0,r6,r8 + subfe. r9,r5,r7 + blt cr0,lab8 + mr r8,r0 + mr r7,r9 + addic r0,r10,1 +lab8: + bdnz lab7 + adde r4,r4,r4 + adde r3,r3,r3 + lwz r9,8(r1) + lwz r10,12(r1) + xor. r7,r9,r10 + beq cr0,no_adjust + cmpwi cr0,r9,0 + subfic r4,r4,0 + subfze r3,r3 + +no_adjust: + b func_end + +lab9: + li r4,0 + li r3,0 +func_end: + addi r1,r1,16 + blr +#endif // clang-format on +} + +/* 8036245C-80362540 35CD9C 00E4+00 0/0 2/2 0/0 .text __mod2u */ +asm void __mod2u(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + cmpwi cr0,r3,0 + cntlzw r0,r3 + cntlzw r9,r4 + bne cr0,lab1 + addi r0,r9,32 +lab1: + cmpwi cr0,r5,0 + cntlzw r9,r5 + cntlzw r10,r6 + bne cr0,lab2 + addi r9,r10,32 +lab2: + cmpw cr0,r0,r9 + subfic r10,r0,64 + bgt cr0,lab9 + addi r9,r9,1 + subfic r9,r9,64 + add r0,r0,r9 + subf r9,r9,r10 + mtctr r9 + cmpwi cr0,r9,32 + addi r7,r9,-32 + blt cr0,lab3 + srw r8,r3,r7 + li r7,0 + b lab4 +lab3: + srw r8,r4,r9 + subfic r7,r9,32 + slw r7,r3,r7 + or r8,r8,r7 + srw r7,r3,r9 +lab4: + cmpwi cr0,r0,32 + addic r9,r0,-32 + blt cr0,lab5 + slw r3,r4,r9 + li r4,0 + b lab6 +lab5: + slw r3,r3,r0 + subfic r9,r0,32 + srw r9,r4,r9 + or r3,r3,r9 + slw r4,r4,r0 +lab6: + li r10,-1 + addic r7,r7,0 +lab7: + adde r4,r4,r4 + adde r3,r3,r3 + adde r8,r8,r8 + adde r7,r7,r7 + subfc r0,r6,r8 + subfe. r9,r5,r7 + blt cr0,lab8 + mr r8,r0 + mr r7,r9 + addic r0,r10,1 +lab8: + bdnz lab7 + mr r4,r8 + mr r3,r7 + blr +lab9: + blr +#endif // clang-format on +} + +/* 80362540-8036264C 35CE80 010C+00 0/0 2/2 0/0 .text __mod2i */ +asm void __mod2i(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + + cmpwi cr7,r3,0 + bge cr7,positive1 + subfic r4,r4,0 + subfze r3,r3 +positive1: + cmpwi cr0,r5,0 + bge cr0,positive2 + subfic r6,r6,0 + subfze r5,r5 +positive2: + cmpwi cr0,r3,0 + cntlzw r0,r3 + cntlzw r9,r4 + bne cr0,lab1 + addi r0,r9,32 +lab1: + cmpwi cr0,r5,0 + cntlzw r9,r5 + cntlzw r10,r6 + bne cr0,lab2 + addi r9,r10,32 +lab2: + cmpw cr0,r0,r9 + subfic r10,r0,64 + bgt cr0,lab9 + addi r9,r9,1 + subfic r9,r9,64 + add r0,r0,r9 + subf r9,r9,r10 + mtctr r9 + cmpwi cr0,r9,32 + addi r7,r9,-32 + blt cr0,lab3 + srw r8,r3,r7 + li r7,0 + b lab4 +lab3: + srw r8,r4,r9 + subfic r7,r9,32 + slw r7,r3,r7 + or r8,r8,r7 + srw r7,r3,r9 +lab4: + cmpwi cr0,r0,32 + addic r9,r0,-32 + blt cr0,lab5 + slw r3,r4,r9 + li r4,0 + b lab6 +lab5: + slw r3,r3,r0 + subfic r9,r0,32 + srw r9,r4,r9 + or r3,r3,r9 + slw r4,r4,r0 +lab6: + li r10,-1 + addic r7,r7,0 +lab7: + adde r4,r4,r4 + adde r3,r3,r3 + adde r8,r8,r8 + adde r7,r7,r7 + subfc r0,r6,r8 + subfe. r9,r5,r7 + blt cr0,lab8 + mr r8,r0 + mr r7,r9 + addic r0,r10,1 +lab8: + bdnz lab7 + mr r4,r8 + mr r3,r7 +lab9: + bge cr7,no_adjust + subfic r4,r4,0 + subfze r3,r3 +no_adjust: + blr +#endif // clang-format on +} + +/* 8036264C-80362670 35CF8C 0024+00 0/0 2/2 0/0 .text __shl2i */ +asm void __shl2i(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + subfic r8,r5,32 + subic r9,r5,32 + slw r3,r3,r5 + srw r10,r4,r8 + or r3,r3,r10 + slw r10,r4,r9 + or r3,r3,r10 + slw r4,r4,r5 + blr +#endif // clang-format on +} + +/* 80362670-80362694 35CFB0 0024+00 0/0 2/2 0/0 .text __shr2u */ +asm void __shr2u(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + subfic r8,r5,32 + subic r9,r5,32 + srw r4,r4,r5 + slw r10,r3,r8 + or r4,r4,r10 + srw r10,r3,r9 + or r4,r4,r10 + srw r3,r3,r5 + blr +#endif // clang-format on +} + +/* 80362694-803626BC 35CFD4 0028+00 0/0 3/3 0/0 .text __shr2i */ +asm void __shr2i(void) { +#ifdef __MWERKS__ // clang-format off + nofralloc + subfic r8, r5, 0x20 + addic. r9, r5, -0x20 + srw r4, r4, r5 + slw r10, r3, r8 + or r4, r4, r10 + sraw r10, r3, r9 + ble around + or r4, r4, r10 +around: + sraw r3, r3, r5 + blr +#endif // clang-format on +} + +/* 803626BC-80362770 35CFFC 00B4+00 0/0 1/1 0/0 .text __cvt_sll_flt */ +asm void __cvt_sll_flt(void) +{ +#ifdef __MWERKS__ // clang-format off + nofralloc + stwu r1, -0x10(r1) + rlwinm. r5, r3, 0, 0, 0 + beq lbl_803626D0 + subfic r4, r4, 0 + subfze r3, r3 +lbl_803626D0: + or. r7, r3, r4 + li r6, 0 + beq lbl_80362758 + cntlzw r7, r3 + cntlzw r8, r4 + rlwinm r9, r7, 0x1a, 0, 4 + srawi r9, r9, 0x1f + and r9, r9, r8 + add r7, r7, r9 + subfic r8, r7, 0x20 + addic r9, r7, -32 + slw r3, r3, r7 + srw r10, r4, r8 + or r3, r3, r10 + slw r10, r4, r9 + or r3, r3, r10 + slw r4, r4, r7 + subf r6, r7, r6 + clrlwi r7, r4, 0x15 + cmpwi r7, 0x400 + addi r6, r6, 0x43e + blt lbl_80362740 + bgt lbl_80362734 + rlwinm. r7, r4, 0, 0x14, 0x14 + beq lbl_80362740 +lbl_80362734: + addic r4, r4, 0x800 + addze r3, r3 + addze r6, r6 +lbl_80362740: + rotlwi r4, r4, 0x15 + rlwimi r4, r3, 0x15, 0, 0xa + rlwinm r3, r3, 0x15, 0xc, 0x1f + slwi r6, r6, 0x14 + or r3, r6, r3 + or r3, r5, r3 +lbl_80362758: + stw r3, 8(r1) + stw r4, 0xc(r1) + lfd f1, 8(r1) + frsp f1, f1 + addi r1, r1, 0x10 + blr +#endif // clang-format on +} + +/* 80362770-8036283C 35D0B0 00CC+00 0/0 2/2 0/0 .text __cvt_dbl_usll */ +asm void __cvt_dbl_usll(void) +{ +#ifdef __MWERKS__ // clang-format off + nofralloc + stwu r1,-16(r1) + stfd f1,8(r1) + lwz r3,8(r1) + lwz r4,12(r1) + rlwinm r5,r3,12,21,31 + cmpli cr0,0,r5,1023 + bge cr0,not_fraction + li r3,0 + li r4,0 + b func_end +not_fraction: + mr r6,r3 + rlwinm r3,r3,0,12,31 + oris r3,r3,0x0010 + addi r5,r5,-1075 + cmpwi cr0,r5,0 + bge cr0,left + neg r5,r5 + subfic r8,r5,32 + subic r9,r5,32 + srw r4,r4,r5 + slw r10,r3,r8 + or r4,r4,r10 + srw r10,r3,r9 + or r4,r4,r10 + srw r3,r3,r5 + b around +left: + cmpwi cr0,r5,10 + ble+ no_overflow + rlwinm. r6,r6,0,0,0 + beq cr0,max_positive + lis r3,0x8000 + li r4,0 + b func_end +max_positive: + lis r3,0x7FFF + ori r3,r3,0xFFFF + li r4,-1 + b func_end +no_overflow: + subfic r8,r5,32 + subic r9,r5,32 + slw r3,r3,r5 + srw r10,r4,r8 + or r3,r3,r10 + slw r10,r4,r9 + or r3,r3,r10 + slw r4,r4,r5 +around: + rlwinm. r6,r6,0,0,0 + beq cr0,positive + subfic r4,r4,0 + subfze r3,r3 +positive: +func_end: + addi r1,r1,16 + blr +#endif // clang-format on +} + +#ifdef __cplusplus +} +#endif From a955c8a69b600c5c8d1003dd15c1a1e776d73baf Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Tue, 19 Nov 2024 16:48:37 +0100 Subject: [PATCH 2/3] Copied parts of m460Dll/main.c to m421Dll --- config/GMPE01_00/rels/m421Dll/symbols.txt | 2 +- include/REL/m421Dll.h | 42 ++ include/REL/m460Dll.h | 2 +- src/REL/m421Dll/main.c | 582 ++++++++++++++++++++++ src/REL/m460Dll/main.c | 222 ++++----- 5 files changed, 737 insertions(+), 113 deletions(-) create mode 100644 include/REL/m421Dll.h create mode 100644 src/REL/m421Dll/main.c diff --git a/config/GMPE01_00/rels/m421Dll/symbols.txt b/config/GMPE01_00/rels/m421Dll/symbols.txt index cb29a8cd..4afd037f 100644 --- a/config/GMPE01_00/rels/m421Dll/symbols.txt +++ b/config/GMPE01_00/rels/m421Dll/symbols.txt @@ -110,7 +110,7 @@ lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:4byte -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x50 +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x50 data:float lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x14 data:4byte lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float diff --git a/include/REL/m421Dll.h b/include/REL/m421Dll.h new file mode 100644 index 00000000..04e08da4 --- /dev/null +++ b/include/REL/m421Dll.h @@ -0,0 +1,42 @@ +#ifndef M421DLL_H +#define M421DLL_H + +#include "game/object.h" + +typedef struct UnkM421DllStruct { + float unk_00; + float unk_04; + float unk_08; + float unk_0C; +} UnkM421DllStruct; + +typedef struct M421DllCameraStruct { + s32 unk_00; + s32 unk_04; + s32 unk_08; + u32 unk_0C; + float unk_10; + float unk_14; + float unk_18; + Vec unk_1C; + Vec unk_28; + float unk_34; + s32 unk_38; + s32 unk_3C; + float unk_40; + UnkM421DllStruct unk_44; + char unk54[0x30]; + float unk_84; + char unk88[0x4]; + float unk_8C; + float unk_90; + s32 unk_94; + char unk98[0xC]; +} M421DllCameraStruct; /* size = 0xA4 */ // same as M443DllCameraStruct and M460 + +void fn_1_4648(Process *process); +void fn_1_48B0(void); +void fn_1_B15C(Process *process, omObjData *object); +void fn_1_B1BC(void); + +#endif diff --git a/include/REL/m460Dll.h b/include/REL/m460Dll.h index 6f97310d..40ca863d 100644 --- a/include/REL/m460Dll.h +++ b/include/REL/m460Dll.h @@ -32,7 +32,7 @@ typedef struct M460DllCameraStruct { float unk_90; s32 unk_94; char unk98[0xC]; -} M460DllCameraStruct; /* size = 0xA4 */ // same as M443DllCameraStruct // TODO does this have to be here? +} M460DllCameraStruct; /* size = 0xA4 */ // same as M443DllCameraStruct void fn_1_3E68(u32 arg0); M460DllCameraStruct *fn_1_3E90(s32 arg0); diff --git a/src/REL/m421Dll/main.c b/src/REL/m421Dll/main.c new file mode 100644 index 00000000..d958eb05 --- /dev/null +++ b/src/REL/m421Dll/main.c @@ -0,0 +1,582 @@ +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/gamework.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "string.h" + +#include "REL/m421Dll.h" + +#ifndef __MWERKS__ +#include "game/frand.h" +#endif + +typedef struct M421DllWork { + u32 unk_00; + s32 unk_04; + s32 unk_08; + u32 unk0C; + s32 unk_10; + u32 unk_14; + u32 unk_18; + u32 unk_1C; + u32 unk_20; + u32 unk24; + s32 unk28; + u32 unk_2C; + s32 unk30; + char unk34[0x4]; + u32 unk38; + s32 unk3C; + s32 unk40; + s32 unk44; + s32 unk48; + s32 unk4C; + u32 unk50; + s32 unk54[4]; + s32 unk64[4]; +} M421DllWork; /* size = 0x74 */ // TODO check the fields, they are copy pasted + +void fn_1_10EC(omObjData *object); +void fn_1_142C(omObjData *object); +void fn_1_1850(omObjData *object); +void fn_1_1C90(omObjData *object); +omObjFunc fn_1_213C(Process *process, omObjData *object); +void fn_1_21AC(omObjData *object); +omObjFunc fn_1_2A28(Process *process, omObjData *object); +void fn_1_2BB8(omObjData *object); +void fn_1_3020(Process *process); +void fn_1_30D0(omObjData *object); +void fn_1_3334(omObjData *object); +void fn_1_335C(omObjData *object); +void fn_1_38FC(ModelData *model, Mtx mtx); +void fn_1_3B50(u32 arg0); +M421DllCameraStruct *fn_1_3B78(s32 arg0); +M421DllCameraStruct *fn_1_3CB0(u32 arg0); +float fn_1_4478(float arg8, float arg9, float argA); +void fn_1_4A0(omObjData *object); +void fn_1_784(omObjData *object); +void fn_1_8B8(omObjData *object); +void fn_1_CBC(omObjData *object); + +GXColor lbl_1_data_A0 = { 0, 0, 0, 0 }; + +Process *lbl_1_bss_28; +omObjData *lbl_1_bss_24; +omObjData *lbl_1_bss_20; +// M421DllCameraStruct +omObjData *lbl_1_bss_1C; +s16 lbl_1_bss_18; +s16 lbl_1_bss_12; +s16 lbl_1_bss_10; +s16 lbl_1_bss_E; +s16 lbl_1_bss_C; +s32 lbl_1_bss_8; +s32 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void fn_1_578(omObjData *var_r29) +{ + Vec sp14; + Vec sp8; + M421DllCameraStruct *var_r31; + M421DllWork *var_r30; + + var_r30 = var_r29->data; + var_r30->unk_04++; + var_r30->unk_10++; + var_r30->unk_18++; + var_r30->unk_2C++; + if ((omSysExitReq != 0) && (var_r30->unk_00 != 5)) { + var_r30->unk_00 = 4; + fn_1_784(var_r29); + } + var_r31 = fn_1_3B78(1); + sp8.x = -(sind(var_r31->unk_28.y) * cosd(var_r31->unk_28.x)); + sp8.y = -(-sind(var_r31->unk_28.x)); + sp8.z = -(cosd(var_r31->unk_28.y) * cosd(var_r31->unk_28.x)); + sp14.x = var_r31->unk_1C.x - (sp8.x * var_r31->unk_34); + sp14.y = var_r31->unk_1C.y - (sp8.y * var_r31->unk_34); + sp14.z = var_r31->unk_1C.z - (sp8.z * var_r31->unk_34); + HuAudFXListnerUpdate(&sp14, &sp8); +} + +void fn_1_784(omObjData *object) +{ + M421DllWork *work = object->data; + + if (work->unk_08 == 0) { + switch (work->unk_00) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x3C); + work->unk_00 = 1; + work->unk_10 = 0; + object->func = fn_1_213C(lbl_1_bss_28, object); + break; + case 1: + work->unk_00 = 2; + work->unk_18 = 0; + object->func = fn_1_142C; + break; + case 2: + work->unk_00 = 3; + work->unk_2C = 0; + object->func = fn_1_2A28(lbl_1_bss_28, object); + break; + case 3: + case 4: + work->unk_08 = 1; + work->unk_00 = 5; + object->func = fn_1_CBC; + break; + case 5: + default: + work->unk_00 = 5; + object->func = fn_1_10EC; + } + work->unk_04 = 0; + } +} + +void fn_1_8B8(omObjData *object) +{ + fn_1_578(object); + fn_1_784(object); +} + +void fn_1_CBC(omObjData *object) +{ + M421DllWork *work = object->data; + fn_1_578(object); + if (WipeStatGet() == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x3C); + work->unk_08 = 0; + fn_1_784(object); + } +} + +void fn_1_10EC(omObjData *object) +{ + fn_1_578(object); + if (WipeStatGet() == 0) { + fn_1_48B0(); + fn_1_B1BC(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_142C(omObjData *object) +{ + M421DllWork *work = object->data; + fn_1_578(object); + switch (work->unk_14) { + case 0: + work->unk_1C = 0x2D; + work->unk_20 = 0x3C; + lbl_1_bss_18 = MGSeqCreate(3, 0); + MGSeqPosSet(lbl_1_bss_10, 320.0f, 240.0f); + lbl_1_bss_18 = -1; + work->unk_14 = 1; + work->unk_18 = 0; + break; + case 1: + if ((lbl_1_bss_4 < 0) && ((MGSeqStatGet(lbl_1_bss_10) & 0x10) != 0)) { + lbl_1_bss_4 = HuAudSeqPlay(0x48); + } + if (MGSeqStatGet(lbl_1_bss_18) == 0 && (work->unk_08 == 0)) { + work->unk_14 = 2; + work->unk_18 = 0; + object->func = fn_1_1850; + } + break; + } +} + +omObjFunc fn_1_213C(Process *process, omObjData *object) +{ + M421DllCameraStruct *var_r31; + + object->work[0] = object->work[1] = 0; + fn_1_3B50(1); + var_r31 = fn_1_3CB0(0); + var_r31->unk_84 = 1.0f; + var_r31->unk_94 = 0; + return fn_1_21AC; +} + +void fn_1_3020(Process *process) +{ + Hu3DCameraCreate(0x1F); + lbl_1_bss_20 = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutViewMulti); + lbl_1_bss_20->work[0] = 5; + lbl_1_bss_1C = omAddObjEx(process, 0xC, 1, 0, -1, fn_1_30D0); + lbl_1_bss_1C->work[0] = 0; +} + +void fn_1_30D0(omObjData *object) +{ + UnkM421DllStruct sp1C[5] = { + { 320.0f, 240.0f, 640.0f, 480.0f }, + { 160.0f, 120.0f, 320.0f, 240.0f }, + { 160.0f, 360.0f, 320.0f, 240.0f }, + { 480.0f, 120.0f, 320.0f, 240.0f }, + { 480.0f, 360.0f, 320.0f, 240.0f }, + }; + s32 sp8[5] = { 1, 2, 4, 8, 16 }; + M421DllCameraStruct *var_r31; + s32 var_r29; + M421DllCameraStruct *var_r28; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M421DllCameraStruct), MEMORY_DEFAULT_NUM); + var_r28 = object->data; + memset(var_r28, 0, 10 * sizeof(M421DllCameraStruct)); + object->model[0] = Hu3DHookFuncCreate(fn_1_38FC); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelCameraSet(object->model[0], 0x1E); + for (var_r31 = var_r28, var_r29 = 0; var_r29 < 5; var_r29++, var_r31++) { + var_r31->unk_00 = 1; + var_r31->unk_04 = var_r29 * 0x64; + var_r31->unk_10 = 41.5f; + var_r31->unk_14 = 100.0f; + var_r31->unk_18 = 5500.0f; + var_r31->unk_1C.x = 0.0f; + var_r31->unk_1C.y = 0.0f; + var_r31->unk_1C.z = 0.0f; + var_r31->unk_28.x = -15.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_34 = 1000.0f; + var_r31->unk_40 = 1.0f; + var_r31->unk_44.unk_00 = sp1C[var_r29].unk_00; + var_r31->unk_44.unk_04 = sp1C[var_r29].unk_04; + var_r31->unk_44.unk_08 = sp1C[var_r29].unk_08; + var_r31->unk_44.unk_0C = sp1C[var_r29].unk_0C; + var_r31->unk_3C = var_r31->unk_0C = sp8[var_r29]; + var_r31->unk_08 = var_r29; + var_r31->unk_38 = var_r29; + } + object->work[1] = 0; + object->work[0]++; + fn_1_335C(object); + object->func = fn_1_3334; +} + +void fn_1_3334(omObjData *object) +{ + fn_1_335C(object); +} + +void fn_1_335C(omObjData *var_r28) +{ + float var_f31; + M421DllCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + M421DllCameraStruct *var_r27; + u32 var_r26; + u32 var_r25; + s32 var_r24; + u32 var_r23; + u32 var_r22; + u32 var_r21; + + var_r27 = var_r28->data; + { + s32 sp40[4] = { 2, 4, 8, 16 }; + u32 sp30[4]; + s32 sp20[4]; + float sp10[4]; + float sp8[2]; + var_r24 = 0; + var_r26 = 0; + memcpy(&var_r27[5], var_r27, 5 * sizeof(M421DllCameraStruct)); + switch (var_r28->work[1]) { + case 0: + break; + case 1: + var_r26 |= 1; + break; + case 2: + var_r26 |= 1; + case 3: + var_r24 = 1; + case 4: + var_r26 |= 0x1E; + break; + } + if (var_r24 != 0) { + Hu3DModelAttrReset(var_r28->model[0], HU3D_ATTR_DISPOFF); + } + else { + Hu3DModelAttrSet(var_r28->model[0], HU3D_ATTR_DISPOFF); + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + sp30[var_r30] = var_r27[var_r30 + 6].unk_04; + sp20[var_r30] = var_r30; + } + for (var_r30 = 0; var_r30 < 3; var_r30++) { + for (var_r29 = var_r30 + 1; var_r29 < 4; var_r29++) { + if ((var_r30 != var_r29) && (sp30[var_r30] > sp30[var_r29])) { + var_r25 = sp30[var_r30]; + sp30[var_r30] = sp30[var_r29]; + sp30[var_r29] = var_r25; + var_r25 = sp20[var_r30]; + sp20[var_r30] = sp20[var_r29]; + sp20[var_r29] = var_r25; + } + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r27[sp20[var_r30] + 6].unk_3C = sp40[var_r30]; + var_r27[sp20[var_r30] + 6].unk_38 = var_r30 + 1; + } + + for (var_r31 = &var_r27[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_00 == 0) || ((var_r26 & var_r31->unk_0C) == 0)) { + Hu3DCamera[var_r31->unk_38].fov = -1.0f; + } + else { + var_f31 = 1.2f * ((var_r31->unk_44.unk_08 / 640.0f) / (var_r31->unk_44.unk_0C / 480.0f)); + sp10[2] = var_r31->unk_44.unk_08 * var_r31->unk_40; + sp10[3] = var_r31->unk_44.unk_0C * var_r31->unk_40; + Hu3DCameraPerspectiveSet(var_r31->unk_3C, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18, var_f31); + Hu3DCameraViewportSet(var_r31->unk_3C, var_r31->unk_44.unk_00 - (0.5f * sp10[2]), var_r31->unk_44.unk_04 - (0.5f * sp10[3]), sp10[2], + sp10[3], 0.0f, 1.0f); + sp10[0] = var_r31->unk_44.unk_00 - (0.5f * sp10[2]); + sp10[1] = var_r31->unk_44.unk_04 - (0.5f * sp10[3]); + sp8[0] = var_r31->unk_44.unk_00 + (0.5f * sp10[2]); + sp8[1] = var_r31->unk_44.unk_04 + (0.5f * sp10[3]); + if (sp10[0] < 0.0f) { + sp10[0] = 0.0f; + } + if (sp10[1] < 0.0f) { + sp10[1] = 0.0f; + } + if (sp8[0] > 640.0f) { + sp8[0] = 640.0f; + } + if (sp8[1] > 480.0f) { + sp8[1] = 480.0f; + } + sp8[0] -= sp10[0]; + sp8[1] -= sp10[1]; + var_r21 = sp8[1]; + var_r22 = sp8[0]; + var_r23 = sp10[1]; + Hu3DCameraScissorSet(var_r31->unk_3C, sp10[0], var_r23, var_r22, var_r21); + var_r29 = var_r31->unk_38; + CenterM[var_r29].x = var_r31->unk_1C.x; + CenterM[var_r29].y = var_r31->unk_1C.y; + CenterM[var_r29].z = var_r31->unk_1C.z; + CRotM[var_r29].x = var_r31->unk_28.x; + CRotM[var_r29].y = var_r31->unk_28.y; + CRotM[var_r29].z = var_r31->unk_28.z; + CZoomM[var_r29] = var_r31->unk_34; + } + } + } +} + +void fn_1_38FC(ModelData *model, Mtx mtx) +{ + Mtx spC; + float var_f31; + float var_f30; + float var_f29; + + PSMTXIdentity(spC); + GXLoadPosMtxImm(spC, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, lbl_1_data_A0); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_ALWAYS, GX_TRUE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + var_f31 = 4125.0f; + var_f30 = 2750.0f; + var_f29 = 5494.5f; + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, -var_f30, -var_f29); + GXPosition3f32(-var_f31, -var_f30, -var_f29); +} + +void fn_1_3B50(u32 arg0) +{ + lbl_1_bss_1C->work[1] = arg0; +} + +u32 fn_1_3B64(void) +{ + return lbl_1_bss_1C->work[1]; +} + +M421DllCameraStruct *fn_1_3B78(s32 arg0) +{ + M421DllCameraStruct *var_r31; + s32 var_r30; + M421DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_1C->data; + for (var_r31 = var_r29, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg0) != 0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M421:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +M421DllCameraStruct *fn_1_3C14(s32 arg0) +{ + M421DllCameraStruct *var_r31; + s32 var_r30; + M421DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_1C->data; + for (var_r31 = &var_r29[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg0) != 0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M421:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +M421DllCameraStruct *fn_1_3CB0(u32 arg0) +{ + M421DllCameraStruct *var_r31 = lbl_1_bss_1C->data; + if (arg0 >= 5) { + OSReport("M421:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0]; +} + +M421DllCameraStruct *fn_1_3D18(u32 arg0) +{ + M421DllCameraStruct *var_r31 = lbl_1_bss_1C->data; + if (arg0 >= 5) { + OSReport("M421:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0 + 5]; +} + +void fn_1_3D84(s32 arg0, s32 arg1) +{ + M421DllCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + M421DllCameraStruct *var_r28; + M421DllCameraStruct *var_r27; + + var_r29 = 0; + if (arg0 >= 0) { + var_r27 = lbl_1_bss_1C->data; + var_r28 = &var_r27[5]; + for (var_r31 = var_r28, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg1) != 0) { + var_r29 |= var_r31->unk_3C; + } + } + Hu3DModelCameraSet(arg0, var_r29); + } +} + +void fn_1_4030(Vec *sp8, Vec *var_r31) +{ + Vec sp10; + float var_f30; + float var_f29; + + PSVECSubtract(var_r31, sp8, &sp10); + Center = *var_r31; + CRot.x = atan2d(sp10.y, sqrtf((sp10.x * sp10.x) + (sp10.z * sp10.z))); + CRot.y = atan2d(-sp10.x, -sp10.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp10); +} + +void fn_1_4238(float arg8, float arg9, float argA, float argB, float argC, float argD) +{ + Vec sp3C; + Vec sp30; + Vec sp24; + + sp3C.x = arg8; + sp3C.y = arg9; + sp3C.z = argA; + sp30.x = argB; + sp30.y = argC; + sp30.z = argD; + PSVECSubtract(&sp30, &sp3C, &sp24); + Center = sp30; + CRot.x = atan2d(sp24.y, sqrtf((sp24.x * sp24.x) + (sp24.z * sp24.z))); + CRot.y = atan2d(-sp24.x, -sp24.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp24); +} + +float fn_1_4478(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f29 = fmod(arg8 + (argA * var_f31), 360.0); + var_f31 = var_f29; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +float fn_1_4594(float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + return var_f31; +} diff --git a/src/REL/m460Dll/main.c b/src/REL/m460Dll/main.c index 73c153ea..123f1c3e 100644 --- a/src/REL/m460Dll/main.c +++ b/src/REL/m460Dll/main.c @@ -168,30 +168,30 @@ void ObjectSetup(void) void fn_1_4C8(omObjData *var_r30) { - M460DllWork *var_r31; + M460DllWork *work; var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M460DllWork), MEMORY_DEFAULT_NUM); - var_r31 = var_r30->data; - memset(var_r31, 0, sizeof(M460DllWork)); - var_r31->unk_00 = 0; - var_r31->unk_04 = 0; - var_r31->unk_0C = 0; - var_r31->unk_10 = 0; - var_r31->unk_14 = 0; - var_r31->unk_18 = 0; - var_r31->unk_4C = 0; - var_r31->unk_50 = 0; - var_r31->unk_08 = 0; - var_r31->unk_88 = 0; - var_r31->unk_74 = var_r31->unk_78 = var_r31->unk_7C = var_r31->unk_80 = -1; - var_r31->unk_8C = 0; - var_r31->unk_94 = 0; - var_r31->unk_30 = 0; - var_r31->unk_30 = GWMGRecordGet(0xC); - var_r31->unk_28 = (var_r31->unk_30 >> 0x10) & 0xFF; - var_r31->unk_24 = (var_r31->unk_30 >> 0x18) & 0xFF; - var_r31->unk_30 = (u16)var_r31->unk_30; - fn_1_8CAC(lbl_1_bss_30, var_r31->unk_30); + work = var_r30->data; + memset(work, 0, sizeof(M460DllWork)); + work->unk_00 = 0; + work->unk_04 = 0; + work->unk_0C = 0; + work->unk_10 = 0; + work->unk_14 = 0; + work->unk_18 = 0; + work->unk_4C = 0; + work->unk_50 = 0; + work->unk_08 = 0; + work->unk_88 = 0; + work->unk_74 = work->unk_78 = work->unk_7C = work->unk_80 = -1; + work->unk_8C = 0; + work->unk_94 = 0; + work->unk_30 = 0; + work->unk_30 = GWMGRecordGet(0xC); + work->unk_28 = (work->unk_30 >> 0x10) & 0xFF; + work->unk_24 = (work->unk_30 >> 0x18) & 0xFF; + work->unk_30 = (u16)work->unk_30; + fn_1_8CAC(lbl_1_bss_30, work->unk_30); var_r30->func = fn_1_948; } @@ -200,15 +200,15 @@ void fn_1_5F0(omObjData *var_r29) Vec sp14; Vec sp8; M460DllCameraStruct *var_r31; - M460DllWork *var_r30; + M460DllWork *work; - var_r30 = var_r29->data; - var_r30->unk_04++; - var_r30->unk_10++; - var_r30->unk_18++; - var_r30->unk_50++; - if ((omSysExitReq != 0) && (var_r30->unk_00 != 5)) { - var_r30->unk_00 = 4; + work = var_r29->data; + work->unk_04++; + work->unk_10++; + work->unk_18++; + work->unk_50++; + if ((omSysExitReq != 0) && (work->unk_00 != 5)) { + work->unk_00 = 4; fn_1_7FC(var_r29); } var_r31 = fn_1_3F2C(1); @@ -293,26 +293,26 @@ void fn_1_11EC(omObjData *object) void fn_1_1548(omObjData *object) { - M460DllWork *var_r28 = object->data; + M460DllWork *work = object->data; fn_1_5F0(object); - switch (var_r28->unk_14) { + switch (work->unk_14) { case 0: - var_r28->unk_1C = 0x3C; - var_r28->unk_20 = 0x3C; + work->unk_1C = 0x3C; + work->unk_20 = 0x3C; lbl_1_bss_18 = MGSeqCreate(3, 0); MGSeqPosSet(lbl_1_bss_18, 320.0f, 240.0f); - var_r28->unk_14 = 1; - var_r28->unk_18 = 0; + work->unk_14 = 1; + work->unk_18 = 0; break; case 1: if ((lbl_1_bss_8 < 0) && ((MGSeqStatGet(lbl_1_bss_18) & 0x10) != 0)) { lbl_1_bss_8 = HuAudSeqPlay(0x49); } if (MGSeqStatGet(lbl_1_bss_18) == 0) { - var_r28->unk_2C = 0; - var_r28->unk_44 = 0; - if (var_r28->unk_08 == 0) { - var_r28->unk_18 = 0; + work->unk_2C = 0; + work->unk_44 = 0; + if (work->unk_08 == 0) { + work->unk_18 = 0; object->func = fn_1_197C; } } @@ -322,36 +322,36 @@ void fn_1_1548(omObjData *object) void fn_1_197C(omObjData *object) { - M460DllWork *var_r31 = object->data; + M460DllWork *work = object->data; s32 var_r26 = 0; s32 sp8 = 0; fn_1_5F0(object); - switch (var_r31->unk_14) { + switch (work->unk_14) { case 1: if (WipeStatGet() == 0) { - var_r31->unk_38 = 3; - var_r31->unk_3C = 0; - var_r31->unk_40 = 0; - var_r31->unk_1C = 0x3C; - var_r31->unk_20 = 0x3C; - var_r31->unk_14 = 2; - var_r31->unk_18 = 0; + work->unk_38 = 3; + work->unk_3C = 0; + work->unk_40 = 0; + work->unk_1C = 0x3C; + work->unk_20 = 0x3C; + work->unk_14 = 2; + work->unk_18 = 0; } break; case 2: - if (var_r31->unk_38 == 3) { - if ((--var_r31->unk_20) == 0) { - var_r31->unk_20 = 0x3C; - var_r31->unk_1C--; - if (var_r31->unk_1C == 0) { - var_r31->unk_44 = 1; + if (work->unk_38 == 3) { + if ((--work->unk_20) == 0) { + work->unk_20 = 0x3C; + work->unk_1C--; + if (work->unk_1C == 0) { + work->unk_44 = 1; fn_1_42BC(frandmod(2)); } } - if ((lbl_1_bss_16 < 0) && (var_r31->unk_1C < 0xA)) { - lbl_1_bss_16 = MGSeqCreate(1, var_r31->unk_1C, -1, -1); + if ((lbl_1_bss_16 < 0) && (work->unk_1C < 0xA)) { + lbl_1_bss_16 = MGSeqCreate(1, work->unk_1C, -1, -1); } - MGSeqParamSet(lbl_1_bss_16, 1, var_r31->unk_1C); + MGSeqParamSet(lbl_1_bss_16, 1, work->unk_1C); } else { if (lbl_1_bss_16 >= 0) { @@ -359,65 +359,65 @@ void fn_1_197C(omObjData *object) lbl_1_bss_16 = -1; } if (frandmod(0x3E8) < 0x1F4) { - var_r31->unk_44 = 1; + work->unk_44 = 1; } - if (var_r31->unk_2C >= 0x1E) { - var_r31->unk_44 = 1; + if (work->unk_2C >= 0x1E) { + work->unk_44 = 1; } - if (var_r31->unk_44 != 0) { - var_r31->unk_44 = 1; - var_r31->unk_88 = 1; + if (work->unk_44 != 0) { + work->unk_44 = 1; + work->unk_88 = 1; } - var_r31->unk_14 = 3; - var_r31->unk_18 = 0; + work->unk_14 = 3; + work->unk_18 = 0; } break; case 3: if (fn_1_4358() != 0) { - if (var_r31->unk_44 != 0) { + if (work->unk_44 != 0) { var_r26 = 1; } - else if (var_r31->unk_18 > 60.0f) { - if (var_r31->unk_08 == 0) { + else if (work->unk_18 > 60.0f) { + if (work->unk_08 == 0) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x1E); WipeColorSet(0, 0, 0); } - var_r31->unk_14 = 4; - var_r31->unk_18 = 0; + work->unk_14 = 4; + work->unk_18 = 0; } } else { - var_r31->unk_18 = 0; + work->unk_18 = 0; } break; case 4: if (WipeStatGet() == 0) { - var_r31->unk_2C++; - if (var_r31->unk_08 == 0) { + work->unk_2C++; + if (work->unk_08 == 0) { WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x1E); } - var_r31->unk_14 = 1; - var_r31->unk_18 = 0; + work->unk_14 = 1; + work->unk_18 = 0; } break; } if (var_r26 != 0) { lbl_1_bss_14 = MGSeqCreate(3, 1); HuAudSeqFadeOut(lbl_1_bss_8, 0x64); - var_r31->unk_24++; - if (var_r31->unk_24 > 0xFF) { - var_r31->unk_24 = 0xFF; + work->unk_24++; + if (work->unk_24 > 0xFF) { + work->unk_24 = 0xFF; } - if (var_r31->unk_2C > var_r31->unk_30) { - var_r31->unk_28 = var_r31->unk_24; - var_r31->unk_30 = var_r31->unk_2C; - var_r31->unk_48 = 1; - GWMGRecordSet(0xC, var_r31->unk_30); + if (work->unk_2C > work->unk_30) { + work->unk_28 = work->unk_24; + work->unk_30 = work->unk_2C; + work->unk_48 = 1; + GWMGRecordSet(0xC, work->unk_30); } - mgRecordExtra = var_r31->unk_2C; - var_r31->unk_14 = 5; - var_r31->unk_18 = 0; - if (var_r31->unk_08 == 0) { + mgRecordExtra = work->unk_2C; + work->unk_14 = 5; + work->unk_18 = 0; + if (work->unk_08 == 0) { object->func = fn_1_201C; } } @@ -425,7 +425,7 @@ void fn_1_197C(omObjData *object) void fn_1_201C(omObjData *object) { - M460DllWork *var_r26 = object->data; + M460DllWork *work = object->data; if (lbl_1_bss_16 >= 0) { MGSeqParamSet(lbl_1_bss_16, 2, -1); @@ -433,13 +433,13 @@ void fn_1_201C(omObjData *object) } fn_1_5F0(object); if (MGSeqStatGet(lbl_1_bss_14) == 0) { - if (var_r26->unk_48 != 0) { + if (work->unk_48 != 0) { fn_1_8FAC(1); - lbl_1_bss_12 = MGSeqCreate(0xE, var_r26->unk_30); - var_r26->unk_48 = 0; + lbl_1_bss_12 = MGSeqCreate(0xE, work->unk_30); + work->unk_48 = 0; } - var_r26->unk_14 = 6; - var_r26->unk_18 = 0; + work->unk_14 = 6; + work->unk_18 = 0; fn_1_7FC(object); } } @@ -460,11 +460,11 @@ void fn_1_2564(omObjData *object) { Vec sp20; M460DllCameraStruct *var_r26; - M460DllWork *var_r25; + M460DllWork *work; s32 var_r24; float var_f31; - var_r25 = object->data; + work = object->data; fn_1_5F0(object); object->work[0]++; var_f31 = lbl_1_data_AC[object->work[1]]; @@ -499,11 +499,11 @@ void fn_1_2564(omObjData *object) fn_1_8BA0(lbl_1_data_A0[object->work[1]]); } if (lbl_1_data_AC[object->work[1]] == 0) { - var_r25->unk_0C = 2; + work->unk_0C = 2; fn_1_7FC(object); } else if (lbl_1_data_AC[object->work[1] + 1] == 0) { - var_r25->unk_0C = 1; + work->unk_0C = 1; } } } @@ -515,7 +515,7 @@ omObjFunc fn_1_2D64(Process *process, omObjData *object) void fn_1_2D70(omObjData *object) { - M460DllWork *var_r26 = object->data; + M460DllWork *work = object->data; s32 var_r23 = 1; fn_1_5F0(object); if (lbl_1_bss_12 >= 0) { @@ -526,21 +526,21 @@ void fn_1_2D70(omObjData *object) lbl_1_bss_12 = -1; } } - if (var_r26->unk_8C != 1) { + if (work->unk_8C != 1) { var_r23 = 0; } if (var_r23 != 0) { - var_r26->unk_4C = 1; + work->unk_4C = 1; if (lbl_1_bss_4 < 0) { lbl_1_bss_4 = HuAudSStreamPlay(4); } - if (var_r26->unk_50 >= 210.0f) { - var_r26->unk_4C = 2; + if (work->unk_50 >= 210.0f) { + work->unk_4C = 2; fn_1_7FC(object); } } else { - var_r26->unk_50 = 0; + work->unk_50 = 0; } } @@ -569,7 +569,7 @@ void fn_1_337C(omObjData *object) object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M460DllCameraStruct), MEMORY_DEFAULT_NUM); var_r28 = object->data; - memset(var_r28, 0, 0x668); + memset(var_r28, 0, 10 * sizeof(M460DllCameraStruct)); object->model[0] = Hu3DHookFuncCreate(fn_1_3BC0); Hu3DModelLayerSet(object->model[0], 0); Hu3DModelCameraSet(object->model[0], 0x1E); @@ -879,9 +879,9 @@ s32 fn_1_419C(void) void fn_1_41B4(s32 arg0, s32 arg1, s32 arg2) { - M460DllWork *var_r31 = lbl_1_bss_2C->data; - var_r31->unk_64[arg0 &= 3] = arg1; - var_r31->unk_54[arg0] = arg2; + M460DllWork *work = lbl_1_bss_2C->data; + work->unk_64[arg0 &= 3] = arg1; + work->unk_54[arg0] = arg2; } void fn_1_41F4(s32 arg0) @@ -906,9 +906,9 @@ s32 fn_1_4284(void) void fn_1_42BC(u32 arg0) { - M460DllWork *var_r31 = lbl_1_bss_2C->data; - if (var_r31->unk_38 == 3) { - var_r31->unk_38 = arg0; + M460DllWork *work = lbl_1_bss_2C->data; + if (work->unk_38 == 3) { + work->unk_38 = arg0; } } From c9f9191feabf2eff214e9581dc3ee03362ec8285 Mon Sep 17 00:00:00 2001 From: CreateSource <72283721+abnormalhare@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:02:55 -0500 Subject: [PATCH 3/3] fix download_tool.py --- .vscode/settings.json | 77 ++++++++++++++++++++++++++++++++++++------ configure.py | 2 +- tools/download_tool.py | 4 ++- 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f6e1099..fe219716 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,16 +29,73 @@ }, "search.useIgnoreFiles": false, "search.exclude": { - "build/*/config.json": true, - "build/**/*.MAP": true, - "build.ninja": true, - ".ninja_*": true, - "objdiff.json": true, - "progress.json": true, - "report.json": true, - "compile_commands.json": true, + "build/*/config.json": true, + "build/**/*.MAP": true, + "build.ninja": true, + ".ninja_*": true, + "objdiff.json": true, + "progress.json": true, + "report.json": true, + "compile_commands.json": true }, "cmake.ignoreCMakeListsMissing": true, "editor.fontFamily": "Fira Code", - "editor.fontLigatures": true -} + "editor.fontLigatures": true, + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/configure.py b/configure.py index 3f14b329..e1153506 100644 --- a/configure.py +++ b/configure.py @@ -149,7 +149,7 @@ config.binutils_tag = "2.42-1" config.compilers_tag = "20240706" config.dtk_tag = "v1.1.4" config.objdiff_tag = "v2.3.3" -config.sjiswrap_tag = "v1.1.1" +config.sjiswrap_tag = "v1.2.0" config.wibo_tag = "0.6.11" # Project diff --git a/tools/download_tool.py b/tools/download_tool.py index f4512d01..09b002a5 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -20,6 +20,8 @@ import urllib.request import zipfile from typing import Callable, Dict from pathlib import Path +import certifi +import ssl def binutils_url(tag): @@ -104,7 +106,7 @@ def main() -> None: print(f"Downloading {url} to {output}") req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - with urllib.request.urlopen(req) as response: + with urllib.request.urlopen(req, context=ssl.create_default_context(cafile=certifi.where())) as response: if url.endswith(".zip"): data = io.BytesIO(response.read()) with zipfile.ZipFile(data) as f: