Merge pull request #477 from dbalatoni13/main
Imported some runtime libraries and copied lots of m460 into m421
This commit is contained in:
commit
83ba1fecd6
13 changed files with 1876 additions and 118 deletions
|
|
@ -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_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_A8 = .rodata:0x000000A8; // 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_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_100 = .rodata:0x00000100; // type:object size:0x14 data:4byte
|
||||||
lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float
|
lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float
|
lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float
|
||||||
|
|
|
||||||
|
|
@ -631,13 +631,13 @@ config.libs = [
|
||||||
"cflags": cflags_runtime,
|
"cflags": cflags_runtime,
|
||||||
"host": False,
|
"host": False,
|
||||||
"objects": [
|
"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(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/New.cp"),
|
||||||
Object(NonMatching, "Runtime.PPCEABI.H/NewMore.cp"),
|
Object(NonMatching, "Runtime.PPCEABI.H/NewMore.cp"),
|
||||||
Object(NonMatching, "Runtime.PPCEABI.H/NMWException.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(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/Gecko_ExceptionPPC.cp"),
|
||||||
Object(NonMatching, "Runtime.PPCEABI.H/GCN_mem_alloc.c"),
|
Object(NonMatching, "Runtime.PPCEABI.H/GCN_mem_alloc.c"),
|
||||||
|
|
|
||||||
42
include/REL/m421Dll.h
Normal file
42
include/REL/m421Dll.h
Normal file
|
|
@ -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
|
||||||
|
|
@ -32,7 +32,7 @@ typedef struct M460DllCameraStruct {
|
||||||
float unk_90;
|
float unk_90;
|
||||||
s32 unk_94;
|
s32 unk_94;
|
||||||
char unk98[0xC];
|
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);
|
void fn_1_3E68(u32 arg0);
|
||||||
M460DllCameraStruct *fn_1_3E90(s32 arg0);
|
M460DllCameraStruct *fn_1_3E90(s32 arg0);
|
||||||
|
|
|
||||||
40
include/Runtime.PPCEABI.H/__va_arg.h
Normal file
40
include/Runtime.PPCEABI.H/__va_arg.h
Normal file
|
|
@ -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 */
|
||||||
90
include/dol2asm.h
Normal file
90
include/dol2asm.h
Normal file
|
|
@ -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 */
|
||||||
|
|
@ -57,8 +57,14 @@ u32 OSUncachedToCached(void *ucaddr);
|
||||||
|
|
||||||
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
||||||
|
|
||||||
#define OSRoundUp32B(v) (((u32)(v + 31) & ~31))
|
#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F))
|
||||||
#define OSRoundDown32B(x) (((u32)(x)) & ~31)
|
#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();
|
void OSInit();
|
||||||
|
|
||||||
|
|
|
||||||
582
src/REL/m421Dll/main.c
Normal file
582
src/REL/m421Dll/main.c
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -168,30 +168,30 @@ void ObjectSetup(void)
|
||||||
|
|
||||||
void fn_1_4C8(omObjData *var_r30)
|
void fn_1_4C8(omObjData *var_r30)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r31;
|
M460DllWork *work;
|
||||||
|
|
||||||
var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M460DllWork), MEMORY_DEFAULT_NUM);
|
var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M460DllWork), MEMORY_DEFAULT_NUM);
|
||||||
var_r31 = var_r30->data;
|
work = var_r30->data;
|
||||||
memset(var_r31, 0, sizeof(M460DllWork));
|
memset(work, 0, sizeof(M460DllWork));
|
||||||
var_r31->unk_00 = 0;
|
work->unk_00 = 0;
|
||||||
var_r31->unk_04 = 0;
|
work->unk_04 = 0;
|
||||||
var_r31->unk_0C = 0;
|
work->unk_0C = 0;
|
||||||
var_r31->unk_10 = 0;
|
work->unk_10 = 0;
|
||||||
var_r31->unk_14 = 0;
|
work->unk_14 = 0;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
var_r31->unk_4C = 0;
|
work->unk_4C = 0;
|
||||||
var_r31->unk_50 = 0;
|
work->unk_50 = 0;
|
||||||
var_r31->unk_08 = 0;
|
work->unk_08 = 0;
|
||||||
var_r31->unk_88 = 0;
|
work->unk_88 = 0;
|
||||||
var_r31->unk_74 = var_r31->unk_78 = var_r31->unk_7C = var_r31->unk_80 = -1;
|
work->unk_74 = work->unk_78 = work->unk_7C = work->unk_80 = -1;
|
||||||
var_r31->unk_8C = 0;
|
work->unk_8C = 0;
|
||||||
var_r31->unk_94 = 0;
|
work->unk_94 = 0;
|
||||||
var_r31->unk_30 = 0;
|
work->unk_30 = 0;
|
||||||
var_r31->unk_30 = GWMGRecordGet(0xC);
|
work->unk_30 = GWMGRecordGet(0xC);
|
||||||
var_r31->unk_28 = (var_r31->unk_30 >> 0x10) & 0xFF;
|
work->unk_28 = (work->unk_30 >> 0x10) & 0xFF;
|
||||||
var_r31->unk_24 = (var_r31->unk_30 >> 0x18) & 0xFF;
|
work->unk_24 = (work->unk_30 >> 0x18) & 0xFF;
|
||||||
var_r31->unk_30 = (u16)var_r31->unk_30;
|
work->unk_30 = (u16)work->unk_30;
|
||||||
fn_1_8CAC(lbl_1_bss_30, var_r31->unk_30);
|
fn_1_8CAC(lbl_1_bss_30, work->unk_30);
|
||||||
var_r30->func = fn_1_948;
|
var_r30->func = fn_1_948;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -200,15 +200,15 @@ void fn_1_5F0(omObjData *var_r29)
|
||||||
Vec sp14;
|
Vec sp14;
|
||||||
Vec sp8;
|
Vec sp8;
|
||||||
M460DllCameraStruct *var_r31;
|
M460DllCameraStruct *var_r31;
|
||||||
M460DllWork *var_r30;
|
M460DllWork *work;
|
||||||
|
|
||||||
var_r30 = var_r29->data;
|
work = var_r29->data;
|
||||||
var_r30->unk_04++;
|
work->unk_04++;
|
||||||
var_r30->unk_10++;
|
work->unk_10++;
|
||||||
var_r30->unk_18++;
|
work->unk_18++;
|
||||||
var_r30->unk_50++;
|
work->unk_50++;
|
||||||
if ((omSysExitReq != 0) && (var_r30->unk_00 != 5)) {
|
if ((omSysExitReq != 0) && (work->unk_00 != 5)) {
|
||||||
var_r30->unk_00 = 4;
|
work->unk_00 = 4;
|
||||||
fn_1_7FC(var_r29);
|
fn_1_7FC(var_r29);
|
||||||
}
|
}
|
||||||
var_r31 = fn_1_3F2C(1);
|
var_r31 = fn_1_3F2C(1);
|
||||||
|
|
@ -293,26 +293,26 @@ void fn_1_11EC(omObjData *object)
|
||||||
|
|
||||||
void fn_1_1548(omObjData *object)
|
void fn_1_1548(omObjData *object)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r28 = object->data;
|
M460DllWork *work = object->data;
|
||||||
fn_1_5F0(object);
|
fn_1_5F0(object);
|
||||||
switch (var_r28->unk_14) {
|
switch (work->unk_14) {
|
||||||
case 0:
|
case 0:
|
||||||
var_r28->unk_1C = 0x3C;
|
work->unk_1C = 0x3C;
|
||||||
var_r28->unk_20 = 0x3C;
|
work->unk_20 = 0x3C;
|
||||||
lbl_1_bss_18 = MGSeqCreate(3, 0);
|
lbl_1_bss_18 = MGSeqCreate(3, 0);
|
||||||
MGSeqPosSet(lbl_1_bss_18, 320.0f, 240.0f);
|
MGSeqPosSet(lbl_1_bss_18, 320.0f, 240.0f);
|
||||||
var_r28->unk_14 = 1;
|
work->unk_14 = 1;
|
||||||
var_r28->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if ((lbl_1_bss_8 < 0) && ((MGSeqStatGet(lbl_1_bss_18) & 0x10) != 0)) {
|
if ((lbl_1_bss_8 < 0) && ((MGSeqStatGet(lbl_1_bss_18) & 0x10) != 0)) {
|
||||||
lbl_1_bss_8 = HuAudSeqPlay(0x49);
|
lbl_1_bss_8 = HuAudSeqPlay(0x49);
|
||||||
}
|
}
|
||||||
if (MGSeqStatGet(lbl_1_bss_18) == 0) {
|
if (MGSeqStatGet(lbl_1_bss_18) == 0) {
|
||||||
var_r28->unk_2C = 0;
|
work->unk_2C = 0;
|
||||||
var_r28->unk_44 = 0;
|
work->unk_44 = 0;
|
||||||
if (var_r28->unk_08 == 0) {
|
if (work->unk_08 == 0) {
|
||||||
var_r28->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
object->func = fn_1_197C;
|
object->func = fn_1_197C;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -322,36 +322,36 @@ void fn_1_1548(omObjData *object)
|
||||||
|
|
||||||
void fn_1_197C(omObjData *object)
|
void fn_1_197C(omObjData *object)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r31 = object->data;
|
M460DllWork *work = object->data;
|
||||||
s32 var_r26 = 0;
|
s32 var_r26 = 0;
|
||||||
s32 sp8 = 0;
|
s32 sp8 = 0;
|
||||||
fn_1_5F0(object);
|
fn_1_5F0(object);
|
||||||
switch (var_r31->unk_14) {
|
switch (work->unk_14) {
|
||||||
case 1:
|
case 1:
|
||||||
if (WipeStatGet() == 0) {
|
if (WipeStatGet() == 0) {
|
||||||
var_r31->unk_38 = 3;
|
work->unk_38 = 3;
|
||||||
var_r31->unk_3C = 0;
|
work->unk_3C = 0;
|
||||||
var_r31->unk_40 = 0;
|
work->unk_40 = 0;
|
||||||
var_r31->unk_1C = 0x3C;
|
work->unk_1C = 0x3C;
|
||||||
var_r31->unk_20 = 0x3C;
|
work->unk_20 = 0x3C;
|
||||||
var_r31->unk_14 = 2;
|
work->unk_14 = 2;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (var_r31->unk_38 == 3) {
|
if (work->unk_38 == 3) {
|
||||||
if ((--var_r31->unk_20) == 0) {
|
if ((--work->unk_20) == 0) {
|
||||||
var_r31->unk_20 = 0x3C;
|
work->unk_20 = 0x3C;
|
||||||
var_r31->unk_1C--;
|
work->unk_1C--;
|
||||||
if (var_r31->unk_1C == 0) {
|
if (work->unk_1C == 0) {
|
||||||
var_r31->unk_44 = 1;
|
work->unk_44 = 1;
|
||||||
fn_1_42BC(frandmod(2));
|
fn_1_42BC(frandmod(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((lbl_1_bss_16 < 0) && (var_r31->unk_1C < 0xA)) {
|
if ((lbl_1_bss_16 < 0) && (work->unk_1C < 0xA)) {
|
||||||
lbl_1_bss_16 = MGSeqCreate(1, var_r31->unk_1C, -1, -1);
|
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 {
|
else {
|
||||||
if (lbl_1_bss_16 >= 0) {
|
if (lbl_1_bss_16 >= 0) {
|
||||||
|
|
@ -359,65 +359,65 @@ void fn_1_197C(omObjData *object)
|
||||||
lbl_1_bss_16 = -1;
|
lbl_1_bss_16 = -1;
|
||||||
}
|
}
|
||||||
if (frandmod(0x3E8) < 0x1F4) {
|
if (frandmod(0x3E8) < 0x1F4) {
|
||||||
var_r31->unk_44 = 1;
|
work->unk_44 = 1;
|
||||||
}
|
}
|
||||||
if (var_r31->unk_2C >= 0x1E) {
|
if (work->unk_2C >= 0x1E) {
|
||||||
var_r31->unk_44 = 1;
|
work->unk_44 = 1;
|
||||||
}
|
}
|
||||||
if (var_r31->unk_44 != 0) {
|
if (work->unk_44 != 0) {
|
||||||
var_r31->unk_44 = 1;
|
work->unk_44 = 1;
|
||||||
var_r31->unk_88 = 1;
|
work->unk_88 = 1;
|
||||||
}
|
}
|
||||||
var_r31->unk_14 = 3;
|
work->unk_14 = 3;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (fn_1_4358() != 0) {
|
if (fn_1_4358() != 0) {
|
||||||
if (var_r31->unk_44 != 0) {
|
if (work->unk_44 != 0) {
|
||||||
var_r26 = 1;
|
var_r26 = 1;
|
||||||
}
|
}
|
||||||
else if (var_r31->unk_18 > 60.0f) {
|
else if (work->unk_18 > 60.0f) {
|
||||||
if (var_r31->unk_08 == 0) {
|
if (work->unk_08 == 0) {
|
||||||
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x1E);
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x1E);
|
||||||
WipeColorSet(0, 0, 0);
|
WipeColorSet(0, 0, 0);
|
||||||
}
|
}
|
||||||
var_r31->unk_14 = 4;
|
work->unk_14 = 4;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (WipeStatGet() == 0) {
|
if (WipeStatGet() == 0) {
|
||||||
var_r31->unk_2C++;
|
work->unk_2C++;
|
||||||
if (var_r31->unk_08 == 0) {
|
if (work->unk_08 == 0) {
|
||||||
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x1E);
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x1E);
|
||||||
}
|
}
|
||||||
var_r31->unk_14 = 1;
|
work->unk_14 = 1;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (var_r26 != 0) {
|
if (var_r26 != 0) {
|
||||||
lbl_1_bss_14 = MGSeqCreate(3, 1);
|
lbl_1_bss_14 = MGSeqCreate(3, 1);
|
||||||
HuAudSeqFadeOut(lbl_1_bss_8, 0x64);
|
HuAudSeqFadeOut(lbl_1_bss_8, 0x64);
|
||||||
var_r31->unk_24++;
|
work->unk_24++;
|
||||||
if (var_r31->unk_24 > 0xFF) {
|
if (work->unk_24 > 0xFF) {
|
||||||
var_r31->unk_24 = 0xFF;
|
work->unk_24 = 0xFF;
|
||||||
}
|
}
|
||||||
if (var_r31->unk_2C > var_r31->unk_30) {
|
if (work->unk_2C > work->unk_30) {
|
||||||
var_r31->unk_28 = var_r31->unk_24;
|
work->unk_28 = work->unk_24;
|
||||||
var_r31->unk_30 = var_r31->unk_2C;
|
work->unk_30 = work->unk_2C;
|
||||||
var_r31->unk_48 = 1;
|
work->unk_48 = 1;
|
||||||
GWMGRecordSet(0xC, var_r31->unk_30);
|
GWMGRecordSet(0xC, work->unk_30);
|
||||||
}
|
}
|
||||||
mgRecordExtra = var_r31->unk_2C;
|
mgRecordExtra = work->unk_2C;
|
||||||
var_r31->unk_14 = 5;
|
work->unk_14 = 5;
|
||||||
var_r31->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
if (var_r31->unk_08 == 0) {
|
if (work->unk_08 == 0) {
|
||||||
object->func = fn_1_201C;
|
object->func = fn_1_201C;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -425,7 +425,7 @@ void fn_1_197C(omObjData *object)
|
||||||
|
|
||||||
void fn_1_201C(omObjData *object)
|
void fn_1_201C(omObjData *object)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r26 = object->data;
|
M460DllWork *work = object->data;
|
||||||
|
|
||||||
if (lbl_1_bss_16 >= 0) {
|
if (lbl_1_bss_16 >= 0) {
|
||||||
MGSeqParamSet(lbl_1_bss_16, 2, -1);
|
MGSeqParamSet(lbl_1_bss_16, 2, -1);
|
||||||
|
|
@ -433,13 +433,13 @@ void fn_1_201C(omObjData *object)
|
||||||
}
|
}
|
||||||
fn_1_5F0(object);
|
fn_1_5F0(object);
|
||||||
if (MGSeqStatGet(lbl_1_bss_14) == 0) {
|
if (MGSeqStatGet(lbl_1_bss_14) == 0) {
|
||||||
if (var_r26->unk_48 != 0) {
|
if (work->unk_48 != 0) {
|
||||||
fn_1_8FAC(1);
|
fn_1_8FAC(1);
|
||||||
lbl_1_bss_12 = MGSeqCreate(0xE, var_r26->unk_30);
|
lbl_1_bss_12 = MGSeqCreate(0xE, work->unk_30);
|
||||||
var_r26->unk_48 = 0;
|
work->unk_48 = 0;
|
||||||
}
|
}
|
||||||
var_r26->unk_14 = 6;
|
work->unk_14 = 6;
|
||||||
var_r26->unk_18 = 0;
|
work->unk_18 = 0;
|
||||||
fn_1_7FC(object);
|
fn_1_7FC(object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -460,11 +460,11 @@ void fn_1_2564(omObjData *object)
|
||||||
{
|
{
|
||||||
Vec sp20;
|
Vec sp20;
|
||||||
M460DllCameraStruct *var_r26;
|
M460DllCameraStruct *var_r26;
|
||||||
M460DllWork *var_r25;
|
M460DllWork *work;
|
||||||
s32 var_r24;
|
s32 var_r24;
|
||||||
float var_f31;
|
float var_f31;
|
||||||
|
|
||||||
var_r25 = object->data;
|
work = object->data;
|
||||||
fn_1_5F0(object);
|
fn_1_5F0(object);
|
||||||
object->work[0]++;
|
object->work[0]++;
|
||||||
var_f31 = lbl_1_data_AC[object->work[1]];
|
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]]);
|
fn_1_8BA0(lbl_1_data_A0[object->work[1]]);
|
||||||
}
|
}
|
||||||
if (lbl_1_data_AC[object->work[1]] == 0) {
|
if (lbl_1_data_AC[object->work[1]] == 0) {
|
||||||
var_r25->unk_0C = 2;
|
work->unk_0C = 2;
|
||||||
fn_1_7FC(object);
|
fn_1_7FC(object);
|
||||||
}
|
}
|
||||||
else if (lbl_1_data_AC[object->work[1] + 1] == 0) {
|
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)
|
void fn_1_2D70(omObjData *object)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r26 = object->data;
|
M460DllWork *work = object->data;
|
||||||
s32 var_r23 = 1;
|
s32 var_r23 = 1;
|
||||||
fn_1_5F0(object);
|
fn_1_5F0(object);
|
||||||
if (lbl_1_bss_12 >= 0) {
|
if (lbl_1_bss_12 >= 0) {
|
||||||
|
|
@ -526,21 +526,21 @@ void fn_1_2D70(omObjData *object)
|
||||||
lbl_1_bss_12 = -1;
|
lbl_1_bss_12 = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (var_r26->unk_8C != 1) {
|
if (work->unk_8C != 1) {
|
||||||
var_r23 = 0;
|
var_r23 = 0;
|
||||||
}
|
}
|
||||||
if (var_r23 != 0) {
|
if (var_r23 != 0) {
|
||||||
var_r26->unk_4C = 1;
|
work->unk_4C = 1;
|
||||||
if (lbl_1_bss_4 < 0) {
|
if (lbl_1_bss_4 < 0) {
|
||||||
lbl_1_bss_4 = HuAudSStreamPlay(4);
|
lbl_1_bss_4 = HuAudSStreamPlay(4);
|
||||||
}
|
}
|
||||||
if (var_r26->unk_50 >= 210.0f) {
|
if (work->unk_50 >= 210.0f) {
|
||||||
var_r26->unk_4C = 2;
|
work->unk_4C = 2;
|
||||||
fn_1_7FC(object);
|
fn_1_7FC(object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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);
|
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M460DllCameraStruct), MEMORY_DEFAULT_NUM);
|
||||||
var_r28 = object->data;
|
var_r28 = object->data;
|
||||||
memset(var_r28, 0, 0x668);
|
memset(var_r28, 0, 10 * sizeof(M460DllCameraStruct));
|
||||||
object->model[0] = Hu3DHookFuncCreate(fn_1_3BC0);
|
object->model[0] = Hu3DHookFuncCreate(fn_1_3BC0);
|
||||||
Hu3DModelLayerSet(object->model[0], 0);
|
Hu3DModelLayerSet(object->model[0], 0);
|
||||||
Hu3DModelCameraSet(object->model[0], 0x1E);
|
Hu3DModelCameraSet(object->model[0], 0x1E);
|
||||||
|
|
@ -879,9 +879,9 @@ s32 fn_1_419C(void)
|
||||||
|
|
||||||
void fn_1_41B4(s32 arg0, s32 arg1, s32 arg2)
|
void fn_1_41B4(s32 arg0, s32 arg1, s32 arg2)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r31 = lbl_1_bss_2C->data;
|
M460DllWork *work = lbl_1_bss_2C->data;
|
||||||
var_r31->unk_64[arg0 &= 3] = arg1;
|
work->unk_64[arg0 &= 3] = arg1;
|
||||||
var_r31->unk_54[arg0] = arg2;
|
work->unk_54[arg0] = arg2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fn_1_41F4(s32 arg0)
|
void fn_1_41F4(s32 arg0)
|
||||||
|
|
@ -906,9 +906,9 @@ s32 fn_1_4284(void)
|
||||||
|
|
||||||
void fn_1_42BC(u32 arg0)
|
void fn_1_42BC(u32 arg0)
|
||||||
{
|
{
|
||||||
M460DllWork *var_r31 = lbl_1_bss_2C->data;
|
M460DllWork *work = lbl_1_bss_2C->data;
|
||||||
if (var_r31->unk_38 == 3) {
|
if (work->unk_38 == 3) {
|
||||||
var_r31->unk_38 = arg0;
|
work->unk_38 = arg0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
30
src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c
Normal file
30
src/Runtime.PPCEABI.H/GCN_Mem_Alloc.c
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
91
src/Runtime.PPCEABI.H/__mem.c
Normal file
91
src/Runtime.PPCEABI.H/__mem.c
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
#include "dol2asm.h"
|
||||||
|
#include "stddef.h"
|
||||||
|
#include <dolphin.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
50
src/Runtime.PPCEABI.H/__va_arg.c
Normal file
50
src/Runtime.PPCEABI.H/__va_arg.c
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
827
src/Runtime.PPCEABI.H/runtime.c
Normal file
827
src/Runtime.PPCEABI.H/runtime.c
Normal file
|
|
@ -0,0 +1,827 @@
|
||||||
|
#include <dolphin.h>
|
||||||
|
|
||||||
|
#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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue