This commit is contained in:
gamemasterplc 2025-02-06 10:42:30 -06:00
commit 1a7006839d
21 changed files with 4241 additions and 452 deletions

View file

@ -271,11 +271,11 @@ lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:
lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float
lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float
lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float
lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0xC scope:local data:4byte lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0xC scope:local data:float
lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float
lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float
lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x1 scope:local data:byte lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:byte
lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float
lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float
@ -353,8 +353,8 @@ lbl_1_data_D0 = .data:0x000000D0; // type:object size:0x8
lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x4 lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x4
lbl_1_data_DC = .data:0x000000DC; // type:object size:0x4 lbl_1_data_DC = .data:0x000000DC; // type:object size:0x4
lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x4 data:2byte lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x4 data:2byte
lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x4 data:2byte lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x4 data:byte
lbl_1_data_EC = .data:0x000000EC; // type:object size:0x5 data:string lbl_1_data_EC = .data:0x000000EC; // type:object size:0x5 scope:local data:string
lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x4 data:float lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x4 data:float
lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x4 data:float lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x4 data:float
lbl_1_data_FC = .data:0x000000FC; // type:object size:0x30 lbl_1_data_FC = .data:0x000000FC; // type:object size:0x30
@ -365,10 +365,10 @@ lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0x8
lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x8 lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x8
lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x8 lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x8
lbl_1_data_1EC = .data:0x000001EC; // type:object size:0x4 lbl_1_data_1EC = .data:0x000001EC; // type:object size:0x4
lbl_1_data_1F0 = .data:0x000001F0; // type:object size:0x13 data:string lbl_1_data_1F0 = .data:0x000001F0; // type:object size:0x13 scope:local data:string
lbl_1_data_203 = .data:0x00000203; // type:object size:0x10 data:string lbl_1_data_203 = .data:0x00000203; // type:object size:0x10 scope:local data:string
lbl_1_data_213 = .data:0x00000213; // type:object size:0x26 data:string lbl_1_data_213 = .data:0x00000213; // type:object size:0x26 scope:local data:string
lbl_1_data_239 = .data:0x00000239; // type:object size:0x25 lbl_1_data_239 = .data:0x00000239; // type:object size:0x24 scope:local data:string
lbl_1_data_260 = .data:0x00000260; // type:object size:0x15C lbl_1_data_260 = .data:0x00000260; // type:object size:0x15C
lbl_1_data_3BC = .data:0x000003BC; // type:object size:0x15C lbl_1_data_3BC = .data:0x000003BC; // type:object size:0x15C
lbl_1_data_518 = .data:0x00000518; // type:object size:0x1C lbl_1_data_518 = .data:0x00000518; // type:object size:0x1C

View file

@ -157,7 +157,7 @@ lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte
lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte
lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x2D0 lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x2D0
lbl_1_bss_32C = .bss:0x0000032C; // type:object size:0x4 data:4byte lbl_1_bss_32C = .bss:0x0000032C; // type:object size:0x4 data:4byte
lbl_1_bss_330 = .bss:0x00000330; // type:object size:0x24 data:4byte lbl_1_bss_330 = .bss:0x00000330; // type:object size:0x24 scope:local data:4byte
lbl_1_bss_354 = .bss:0x00000354; // type:object size:0x4 data:4byte lbl_1_bss_354 = .bss:0x00000354; // type:object size:0x4 data:4byte
lbl_1_bss_358 = .bss:0x00000358; // type:object size:0x4 data:4byte lbl_1_bss_358 = .bss:0x00000358; // type:object size:0x4 data:4byte
lbl_1_bss_35C = .bss:0x0000035C; // type:object size:0x1C0 data:4byte lbl_1_bss_35C = .bss:0x0000035C; // type:object size:0x1C0 data:4byte

View file

@ -955,7 +955,7 @@ Runtime.PPCEABI.H/NewMore.cp:
.data start:0x8013E208 end:0x8013E218 .data start:0x8013E208 end:0x8013E218
.sdata start:0x801D39A0 end:0x801D39A8 .sdata start:0x801D39A0 end:0x801D39A8
Runtime.PPCEABI.H/NMWException.cp: Runtime.PPCEABI.H/NMWException.cpp:
extab start:0x80005650 end:0x80005670 extab start:0x80005650 end:0x80005670
extabindex start:0x80005718 end:0x80005748 extabindex start:0x80005718 end:0x80005748
.text start:0x800E2108 end:0x800E23CC .text start:0x800E2108 end:0x800E23CC
@ -971,7 +971,7 @@ Runtime.PPCEABI.H/__init_cpp_exceptions.cpp:
.dtors start:0x8011DCE0 end:0x8011DCE8 .dtors start:0x8011DCE0 end:0x8011DCE8
.sdata start:0x801D39B0 end:0x801D39B8 .sdata start:0x801D39B0 end:0x801D39B8
Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp: Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp:
extab start:0x80005670 end:0x800056E4 extab start:0x80005670 end:0x800056E4
extabindex start:0x80005748 end:0x8000579C extabindex start:0x80005748 end:0x8000579C
.text start:0x800E2B24 end:0x800E3F5C .text start:0x800E2B24 end:0x800E3F5C

View file

@ -3646,10 +3646,10 @@ __THPAANScaleFactor = .rodata:0x8011E490; // type:object size:0x40 data:byte
lbl_8011E4D0 = .rodata:0x8011E4D0; // type:object size:0x10 lbl_8011E4D0 = .rodata:0x8011E4D0; // type:object size:0x10
lbl_8011E4E0 = .rodata:0x8011E4E0; // type:object size:0x10 lbl_8011E4E0 = .rodata:0x8011E4E0; // type:object size:0x10
__constants = .rodata:0x8011E4F0; // type:object size:0x18 scope:local data:double __constants = .rodata:0x8011E4F0; // type:object size:0x18 scope:local data:double
lbl_8011E508 = .rodata:0x8011E508; // type:object size:0x54 lbl_8011E508 = .rodata:0x8011E508; // type:object size:0x54 data:string
lbl_8011E55C = .rodata:0x8011E55C; // type:object size:0x14 lbl_8011E55C = .rodata:0x8011E55C; // type:object size:0x14 data:string
lbl_8011E570 = .rodata:0x8011E570; // type:object size:0x10 lbl_8011E570 = .rodata:0x8011E570; // type:object size:0x10 data:string
lbl_8011E580 = .rodata:0x8011E580; // type:object size:0x20 lbl_8011E580 = .rodata:0x8011E580; // type:object size:0x20 data:string
lbl_8011E5A0 = .rodata:0x8011E5A0; // type:object size:0x38 lbl_8011E5A0 = .rodata:0x8011E5A0; // type:object size:0x38
lbl_8011E5D8 = .rodata:0x8011E5D8; // type:object size:0x40 lbl_8011E5D8 = .rodata:0x8011E5D8; // type:object size:0x40
fix_pool_sizes = .rodata:0x8011E618; // type:object size:0x18 scope:local data:4byte fix_pool_sizes = .rodata:0x8011E618; // type:object size:0x18 scope:local data:4byte

View file

@ -955,7 +955,7 @@ Runtime.PPCEABI.H/NewMore.cp:
.data start:0x8013E208 end:0x8013E218 .data start:0x8013E208 end:0x8013E218
.sdata start:0x801D39A0 end:0x801D39A8 .sdata start:0x801D39A0 end:0x801D39A8
Runtime.PPCEABI.H/NMWException.cp: Runtime.PPCEABI.H/NMWException.cpp:
extab start:0x80005650 end:0x80005670 extab start:0x80005650 end:0x80005670
extabindex start:0x80005718 end:0x80005748 extabindex start:0x80005718 end:0x80005748
.text start:0x800E2108 end:0x800E23CC .text start:0x800E2108 end:0x800E23CC
@ -971,7 +971,7 @@ Runtime.PPCEABI.H/__init_cpp_exceptions.cpp:
.dtors start:0x8011DCE0 end:0x8011DCE8 .dtors start:0x8011DCE0 end:0x8011DCE8
.sdata start:0x801D39B0 end:0x801D39B8 .sdata start:0x801D39B0 end:0x801D39B8
Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp: Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp:
extab start:0x80005670 end:0x800056E4 extab start:0x80005670 end:0x800056E4
extabindex start:0x80005748 end:0x8000579C extabindex start:0x80005748 end:0x8000579C
.text start:0x800E2B24 end:0x800E3F5C .text start:0x800E2B24 end:0x800E3F5C

View file

@ -209,7 +209,7 @@ else:
cflags_runtime = [ cflags_runtime = [
*cflags_base, *cflags_base,
"-use_lmw_stmw on", "-use_lmw_stmw on",
"-str reuse,pool,readonly", "-str reuse,readonly",
"-common off", "-common off",
"-inline auto,deferred", "-inline auto,deferred",
] ]
@ -668,11 +668,15 @@ config.libs = [
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "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.cpp"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "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(
Object(NonMatching, "Runtime.PPCEABI.H/GCN_mem_alloc.c"), NonMatching,
"Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp",
extra_cflags=["-Cpp_exceptions on"]
),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/GCN_mem_alloc.c"),
], ],
}, },
{ {
@ -1080,7 +1084,7 @@ config.libs = [
"m427Dll", # Right Oar Left? "m427Dll", # Right Oar Left?
objects={ objects={
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/main.c"),
Object(NonMatching, "REL/m427Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/map.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/player.c"),
}, },
), ),
@ -1140,7 +1144,7 @@ config.libs = [
"m435Dll", # Darts of Doom "m435Dll", # Darts of Doom
objects={ objects={
Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m435Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m435Dll/main.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01" "GMPJ01_00"), "REL/m435Dll/sequence.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m435Dll/sequence.c"),
}, },
), ),
Rel( Rel(

View file

@ -0,0 +1,231 @@
#ifndef _RUNTIME_GECKO_EXCEPTIONPPC_H
#define _RUNTIME_GECKO_EXCEPTIONPPC_H
#include <dolphin/types.h>
typedef u8 exaction_type;
#define EXACTION_ENDBIT 0x80
#define EXACTION_MASK 0x7F
// EXAction structs
#define EXACTION_ENDOFLIST 0
#define EXACTION_BRANCH 1
typedef struct ex_branch {
exaction_type action;
u8 unused;
u16 target;
} ex_branch;
#define EXACTION_DESTROYLOCAL 2
typedef struct ex_destroylocal {
exaction_type action;
u8 unused;
s16 local;
void* dtor;
} ex_destroylocal;
#define EXACTION_DESTROYLOCALCOND 3
typedef struct ex_destroylocalcond {
exaction_type action;
u8 dlc_field;
s16 cond;
s16 local;
void* dtor;
} ex_destroylocalcond;
#define ex_destroylocalcond_MakeField(regcond) (((regcond) << 7))
#define ex_destroylocalcond_GetRegCond(field) ((field) >> 7)
#define EXACTION_DESTROYLOCALPOINTER 4
typedef struct ex_destroylocalpointer {
exaction_type action;
u8 dlp_field;
s16 pointer;
void* dtor;
} ex_destroylocalpointer;
#define ex_destroylocalpointer_MakeField(regpointer) (((regpointer) << 7))
#define ex_destroylocalpointer_GetRegPointer(field) ((field) >> 7)
#define EXACTION_DESTROYLOCALARRAY 5
typedef struct ex_destroylocalarray {
exaction_type action;
u8 unused;
s16 localarray;
u16 elements;
u16 element_size;
void* dtor;
} ex_destroylocalarray;
#define EXACTION_DESTROYBASE 6
#define EXACTION_DESTROYMEMBER 7
typedef struct ex_destroymember {
exaction_type action;
u8 dm_field;
s16 objectptr;
s32 offset;
void* dtor;
} ex_destroymember;
#define ex_destroymember_MakeField(regpointer) (((regpointer) << 7))
#define ex_destroymember_GetRegPointer(field) ((field) >> 7)
#define EXACTION_DESTROYMEMBERCOND 8
typedef struct ex_destroymembercond {
exaction_type action;
u8 dmc_field;
s16 cond;
s16 objectptr;
s32 offset;
void* dtor;
} ex_destroymembercond;
#define ex_destroymembercond_MakeField(regcond, regpointer) (((regcond) << 7) | (((regpointer)&0x1) << 6))
#define ex_destroymembercond_GetRegCond(field) ((field) >> 7)
#define ex_destroymembercond_GetRegPointer(field) (((field) >> 6) & 0x1)
#define EXACTION_DESTROYMEMBERARRAY 9
typedef struct ex_destroymemberarray {
exaction_type action;
u8 dma_field;
s16 objectptr;
s32 offset;
s32 elements;
s32 element_size;
void* dtor;
} ex_destroymemberarray;
#define ex_destroymemberarray_MakeField(regpointer) (((regpointer) << 7))
#define ex_destroymemberarray_GetRegPointer(field) ((field) >> 7)
#define EXACTION_DELETEPOINTER 10
typedef struct ex_deletepointer {
exaction_type action;
u8 dp_field;
s16 objectptr;
void* deletefunc;
} ex_deletepointer;
#define ex_deletepointer_MakeField(regpointer) (((regpointer) << 7))
#define ex_deletepointer_GetRegPointer(field) ((field) >> 7)
#define EXACTION_DELETEPOINTERCOND 11
typedef struct ex_deletepointercond {
exaction_type action;
u8 dpc_field;
s16 cond;
s16 objectptr;
void* deletefunc;
} ex_deletepointercond;
#define ex_deletepointercond_MakeField(regcond, regpointer) (((regcond) << 7) | (((regpointer)&0x1) << 6))
#define ex_deletepointercond_GetRegCond(field) ((field) >> 7)
#define ex_deletepointercond_GetRegPointer(field) (((field) >> 6) & 0x1)
#define EXACTION_CATCHBLOCK 12
typedef struct ex_catchblock {
exaction_type action;
u8 unused;
char* catch_type;
u16 catch_pcoffset;
s16 cinfo_ref;
} ex_catchblock;
#define EXACTION_ACTIVECATCHBLOCK 13
typedef struct ex_activecatchblock {
exaction_type action;
u8 unused;
s16 cinfo_ref;
} ex_activecatchblock;
#define EXACTION_TERMINATE 14
typedef struct ex_terminate {
exaction_type action;
u8 unused;
} ex_terminate;
#define EXACTION_SPECIFICATION 15
typedef struct ex_specification {
exaction_type action;
u8 unused;
u16 specs;
s32 pcoffset;
s32 cinfo_ref;
char* spec[];
} ex_specification;
#define EXACTION_CATCHBLOCK_32 16
typedef struct ex_catchblock_32 {
exaction_type action;
u8 unused;
char* catch_type;
s32 catch_pcoffset;
s32 cinfo_ref;
} ex_catchblock_32;
// Other structs
typedef struct ExceptionRangeSmall {
u16 start;
u16 end;
u16 action;
} ExceptionRangeSmall;
typedef struct ExceptionTableSmall {
u16 et_field;
ExceptionRangeSmall ranges[0];
} ExceptionTableSmall;
typedef struct ExceptionRangeLarge {
u32 start;
u16 size;
u16 action;
} ExceptionRangeLarge;
typedef struct ExceptionTableLarge {
u16 et_field;
u16 et_field2;
ExceptionRangeLarge ranges[];
} ExceptionTableLarge;
#define ET_MakeField(savedGPRs, savedFPRs, savedCR, hasframeptr, isLarge) \
(((savedGPRs) << 11) | ((savedFPRs & 0x1f) << 6) | ((savedCR & 0x1) << 5) | ((hasframeptr & 0x1) << 4) | ((isLarge & 1) << 3))
#define ET_GetSavedGPRs(field) ((field) >> 11)
#define ET_GetSavedFPRs(field) (((field) >> 6) & 0x1f)
#define ET_GetSavedCR(field) (((field) >> 5) & 0x1)
#define ET_GetHasFramePtr(field) (((field) >> 4) & 0x1)
#define ET_IsLargeTable(field) (((field) >> 3) & 0x1)
#define ET_ClearLargeBit(field) ((field) & ~(1 << 3))
#define ET_SetLargeBit(field) ((field) | (1 << 3))
#define ET_HasElfVector(field) (((field) >> 1) & 0x1)
typedef struct ExceptionTableIndex {
u32 functionoffset;
u32 eti_field;
u32 exceptionoffset;
} ExceptionTableIndex;
#define ETI_MakeField(direct, fsize) ((((s32)(direct)) << 31) | ((fsize)&0x7fffffff))
#define ETI_GetDirectStore(field) ((field) >> 31)
#define ETI_GetFunctionSize(field) ((field)&0x7fffffff)
#endif

View file

@ -1,7 +1,15 @@
#ifndef _NMWEXCEPTION #ifndef _NMWEXCEPTION
#define _NMWEXCEPTION #define _NMWEXCEPTION
typedef short vbase_ctor_arg_type; #include "types.h"
#include "PowerPC_EABI_Support/Runtime/exception.h"
#include "PowerPC_EABI_Support/Runtime/__ppc_eabi_linker.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef s16 vbase_ctor_arg_type;
typedef char local_cond_type; typedef char local_cond_type;
typedef struct CatchInfo { typedef struct CatchInfo {
@ -9,7 +17,7 @@ typedef struct CatchInfo {
void* typeinfo; void* typeinfo;
void* dtor; void* dtor;
void* sublocation; void* sublocation;
long pointercopy; s32 pointercopy;
void* stacktop; void* stacktop;
} CatchInfo; } CatchInfo;
@ -19,18 +27,12 @@ typedef struct DestructorChain {
void* object; void* object;
} DestructorChain; } DestructorChain;
#ifdef __cplusplus extern void* __register_global_object(void* object, void* destructor, void* registration);
extern "C" {
#endif
extern void* __register_global_object(void* object, void* destructor,
void* registration);
extern void __destroy_global_chain(void); extern void __destroy_global_chain(void);
extern void __end__catch(CatchInfo* catchinfo); extern void __end__catch(CatchInfo* catchinfo);
extern void __throw(char* throwtype, void* location, void* dtor); extern void __throw(char* throwtype, void* location, void* dtor);
extern char __throw_catch_compare(const char* throwtype, const char* catchtype, extern char __throw_catch_compare(const char* throwtype, const char* catchtype, s32* offset_result);
long* offset_result);
extern void __unexpected(CatchInfo* catchinfo); extern void __unexpected(CatchInfo* catchinfo);
extern int __register_fragment(struct __eti_init_info* info, char* TOC); extern int __register_fragment(struct __eti_init_info* info, char* TOC);

View file

@ -0,0 +1,38 @@
#ifndef _EXCEPTION
#define _EXCEPTION
namespace std {
class exception {
public:
exception() { }
virtual ~exception() { }
virtual const char* what() const { return "exception"; }
};
class bad_exception : public exception {
public:
bad_exception() { }
virtual ~bad_exception() { }
virtual const char* what() const { return "bad_exception"; }
};
typedef void (*unexpected_handler)();
unexpected_handler set_unexpected(unexpected_handler handler);
void unexpected();
typedef void (*terminate_handler)();
terminate_handler set_terminate(terminate_handler handler);
void terminate();
} // namespace std
using std::bad_exception;
using std::exception;
using std::set_terminate;
using std::set_unexpected;
using std::terminate;
using std::terminate_handler;
using std::unexpected;
using std::unexpected_handler;
#endif

View file

@ -1,21 +1,35 @@
#include "dolphin.h" #include "dolphin.h"
#include "game/object.h" #include "game/object.h"
s32 fn_1_1788(void); typedef struct M427DllStruct {
void fn_1_1798(s32 arg0, float arg8); s32 unk0;
s32 fn_1_1884(void); s32 unk4;
s32 fn_1_32EC(void); } M427DllStruct;
void fn_1_32F4(Process* arg0); s32 fn_1_1788(void);
void fn_1_3B20(s8 arg0, s16 arg1); void fn_1_1798(s32 arg0, float arg8);
s32 fn_1_1884(void);
s32 fn_1_32EC(void);
void fn_1_32F4(Process *arg0);
void fn_1_3B20(s8 arg0, s16 arg1);
void fn_1_3A88(void); void fn_1_3A88(void);
void fn_1_91E0(s16 arg0, float arg8, float arg9, float argA, float argB); void fn_1_91E0(s16 arg0, float arg8, float arg9, float argA, float argB);
float fn_1_AE78(s16 arg0, float arg8, float arg9); float fn_1_AE78(s16 arg0, float arg8, float arg9);
void fn_1_E98C(Process*); void fn_1_E98C(Process *);
void fn_1_EC54(void); void fn_1_EC54(void);
s32 fn_1_10FE8(s32 arg0, s32 *arg1); s32 fn_1_10FE8(s32 arg0, s32 *arg1);
void fn_1_110E8(s32, s32*); void fn_1_110E8(s32, s32 *);
void fn_1_111C0(s32, s32*); void fn_1_111C0(s32, s32 *);
void fn_1_11298(f32); void fn_1_11298(f32);
s32 fn_1_113F0(s32); s32 fn_1_113F0(s32);
f32 fn_1_168FC(f32, f32, f32); f32 fn_1_168FC(f32, f32, f32);
s32 fn_1_15F10(Vec arg0, Vec arg1, s32 arg2, s32 arg3, s32 arg4);
s32 fn_1_15FD0(Vec arg0, float arg8, s32 arg1, s32 arg2, s32 arg3);
extern s32 lbl_1_bss_580;
extern Vec *lbl_1_bss_558;
extern Vec *lbl_1_bss_554;
extern Vec *lbl_1_bss_550;
extern M427DllStruct lbl_1_bss_0[8];

View file

@ -30,41 +30,41 @@ void HuAudFXFadeOut(int seNo, s32 speed);
void HuAudFXPanning(int seNo, s16 pan); void HuAudFXPanning(int seNo, s16 pan);
void HuAudFXListnerSet(Vec *pos, Vec *heading, float sndDist, float sndSpeed); void HuAudFXListnerSet(Vec *pos, Vec *heading, float sndDist, float sndSpeed);
void HuAudFXListnerSetEX(Vec *pos, Vec *heading, float sndDist, float sndSpeed, float startDis, float frontSurDis, float backSurDis); void HuAudFXListnerSetEX(Vec *pos, Vec *heading, float sndDist, float sndSpeed, float startDis, float frontSurDis, float backSurDis);
void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); void HuAudFXListnerUpdate(Vec *pos, Vec *heading);
int HuAudFXEmiterPlay(int seId, Vec *pos); int HuAudFXEmiterPlay(int seId, Vec *pos);
void HuAudFXEmiterUpDate(int seNo, Vec *pos); void HuAudFXEmiterUpDate(int seNo, Vec *pos);
void HuAudFXListnerKill(void); void HuAudFXListnerKill(void);
void HuAudFXPauseAll(s32 arg0); void HuAudFXPauseAll(s32 pause);
s32 HuAudFXStatusGet(int seNo); s32 HuAudFXStatusGet(int seNo);
s32 HuAudFXPitchSet(int seNo, s16 pitch); s32 HuAudFXPitchSet(int seNo, s16 pitch);
s32 HuAudFXVolSet(int seNo, s16 vol); s32 HuAudFXVolSet(int seNo, s16 vol);
s32 HuAudSeqPlay(s16 arg0); s32 HuAudSeqPlay(s16 musId);
void HuAudSeqStop(s32 arg0); void HuAudSeqStop(s32 musNo);
void HuAudSeqFadeOut(s32 arg0, s32 arg1); void HuAudSeqFadeOut(s32 musNo, s32 speed);
void HuAudSeqAllFadeOut(s32 arg0); void HuAudSeqAllFadeOut(s32 speed);
void HuAudSeqAllStop(void); void HuAudSeqAllStop(void);
void HuAudSeqPauseAll(s32 arg0); void HuAudSeqPauseAll(s32 pause);
void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2); void HuAudSeqPause(s32 musNo, s32 pause, s32 speed);
s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2); s32 HuAudSeqMidiCtrlGet(s32 musNo, s8 channel, s8 ctrl);
s32 HuAudSStreamPlay(s16 arg0); s32 HuAudSStreamPlay(s16 streamId);
void HuAudSStreamStop(s32 arg0); void HuAudSStreamStop(s32 seNo);
void HuAudSStreamFadeOut(s32 arg0, s32 arg1); void HuAudSStreamFadeOut(s32 seNo, s32 speed);
void HuAudSStreamAllFadeOut(s32 arg0); void HuAudSStreamAllFadeOut(s32 speed);
void HuAudSStreamAllStop(void); void HuAudSStreamAllStop(void);
s32 HuAudSStreamStatGet(s32 arg0); s32 HuAudSStreamStatGet(s32 seNo);
void HuAudDllSndGrpSet(u16 ovl); void HuAudDllSndGrpSet(u16 ovl);
void HuAudSndGrpSetSet(s16 arg0); void HuAudSndGrpSetSet(s16 data_size);
void HuAudSndGrpSet(s16 arg0); void HuAudSndGrpSet(s16 grpId);
void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); void HuAudSndCommonGrpSet(s16 grpId, s32 groupCheck);
void HuAudAUXSet(s32 arg0, s32 arg1); void HuAudAUXSet(s32 auxA, s32 auxB);
void HuAudAUXVolSet(s8 arg0, s8 arg1); void HuAudAUXVolSet(s8 auxA, s8 auxB);
void HuAudVoiceInit(s16 ovl); void HuAudVoiceInit(s16 ovl);
s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); s32 HuAudPlayerVoicePlay(s16 player, s16 seId);
s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); s32 HuAudPlayerVoicePlayPos(s16 player, s16 seId, Vec *pos);
void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); void HuAudPlayerVoicePlayEntry(s16 player, s16 seId);
s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); s32 HuAudCharVoicePlay(s16 charNo, s16 seId);
s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); s32 HuAudCharVoicePlayPos(s16 charNo, s16 seId, Vec *pos);
void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); void HuAudCharVoicePlayEntry(s16 charNo, s16 seId);
extern float Snd3DBackSurDisOffset; extern float Snd3DBackSurDisOffset;
extern float Snd3DFrontSurDisOffset; extern float Snd3DFrontSurDisOffset;

View file

@ -4,13 +4,13 @@
#include "dolphin/types.h" #include "dolphin/types.h"
void BoardMusStartBoard(void); void BoardMusStartBoard(void);
void BoardMusStart(s32 arg0, s32 arg1, s8 arg2, u16 arg3); void BoardMusStart(s32 boardNo, s32 musId, s8 vol, u16 speed);
void BoardAudSeqFadeOutFast(s32 arg0); void BoardAudSeqFadeOutFast(s32 boardNo);
void BoardAudSeqFadeOut(s32 arg0, u16 arg1); void BoardAudSeqFadeOut(s32 boardNo, u16 speed);
void BoardMusLoudSet(s32 arg0, s32 arg1); void BoardMusLoudSet(s32 boardNo, s32 isQuieter);
void BoardMusVolPanSet(s32 arg0, s8 arg1, u16 arg2); void BoardMusVolPanSet(s32 boardNo, s8 vol, u16 fadeSpeed);
void BoardAudSeqPause(s32 arg0, s32 arg1, u16 arg2); void BoardAudSeqPause(s32 boardNo, s32 pause, u16 speed);
s32 BoardMusStatusGet(s32 arg0); s32 BoardMusStatusGet(s32 boardNo);
void BoardAudSeqClear(void); void BoardAudSeqClear(void);
void BoardAudSeqFadeOutAll(void); void BoardAudSeqFadeOutAll(void);
void BoardAudFXPlay(void); void BoardAudFXPlay(void);

View file

@ -2,7 +2,6 @@
#include "PowerPC_EABI_Support/Msl/MSL_C/MSL_Common/critical_regions.h" #include "PowerPC_EABI_Support/Msl/MSL_C/MSL_Common/critical_regions.h"
#include "PowerPC_EABI_Support/Msl/MSL_C/MSL_Common/signal.h" #include "PowerPC_EABI_Support/Msl/MSL_C/MSL_Common/signal.h"
#include "stddef.h" #include "stddef.h"
#include "PowerPC_EABI_Support/Runtime/NMWException.h"
void _ExitProcess(); void _ExitProcess();

View file

@ -10,11 +10,6 @@
#include "game/objsub.h" #include "game/objsub.h"
#include "game/wipe.h" #include "game/wipe.h"
typedef struct M427DllStruct {
s32 unk0;
s32 unk4;
} M427DllStruct;
typedef struct M427DllStruct2 { typedef struct M427DllStruct2 {
s32 unk0[3]; s32 unk0[3];
s32 unkC; s32 unkC;

File diff suppressed because it is too large Load diff

View file

@ -1967,7 +1967,7 @@ block_18:
return 0; return 0;
} }
s32 fn_1_15F10(Vec *arg0, Vec *arg1, s32 arg2, s32 arg3, s32 arg4) s32 fn_1_15F10(Vec arg0, Vec arg1, s32 arg2, s32 arg3, s32 arg4)
{ {
M427DllBss57CStruct *var_r31; M427DllBss57CStruct *var_r31;
s32 var_r30; s32 var_r30;
@ -1986,12 +1986,12 @@ s32 fn_1_15F10(Vec *arg0, Vec *arg1, s32 arg2, s32 arg3, s32 arg4)
var_r31->unk_10 = arg4; var_r31->unk_10 = arg4;
var_r31->unk_18 = arg3; var_r31->unk_18 = arg3;
var_r31->unk_14 = 0; var_r31->unk_14 = 0;
var_r31->unk_1C = *arg0; var_r31->unk_1C = arg0;
var_r31->unk_28 = *arg1; var_r31->unk_28 = arg1;
return var_r30; return var_r30;
} }
s32 fn_1_15FD0(Vec *arg0, s32 arg1, s32 arg2, s32 arg3, float arg8) s32 fn_1_15FD0(Vec arg0, float arg8, s32 arg1, s32 arg2, s32 arg3)
{ {
M427DllBss57CStruct *var_r31; M427DllBss57CStruct *var_r31;
s32 var_r30; s32 var_r30;
@ -2010,7 +2010,7 @@ s32 fn_1_15FD0(Vec *arg0, s32 arg1, s32 arg2, s32 arg3, float arg8)
var_r31->unk_10 = arg3; var_r31->unk_10 = arg3;
var_r31->unk_18 = arg2; var_r31->unk_18 = arg2;
var_r31->unk_14 = 0; var_r31->unk_14 = 0;
var_r31->unk_1C = *arg0; var_r31->unk_1C = arg0;
var_r31->unk_34 = arg8; var_r31->unk_34 = arg8;
return var_r30; return var_r30;
} }

View 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);
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,157 @@
#include "PowerPC_EABI_Support/Runtime/NMWException.h"
#include "PowerPC_EABI_Support/Runtime/MWCPlusLib.h"
#define ARRAY_HEADER_SIZE 16
extern "C" {
extern void abort();
}
namespace std {
/**
* @note Address: N/A
* @note Size: 0x20
*/
static void dthandler() { abort(); }
static terminate_handler thandler = dthandler;
/**
* @note Address: N/A
* @note Size: 0x28
*/
static void duhandler() { terminate(); }
static unexpected_handler uhandler = duhandler;
/**
* @note Address: N/A
* @note Size: 0x28
*/
extern void terminate() { thandler(); }
/**
* @note Address: N/A
* @note Size: 0x28
*/
extern void unexpected() { uhandler(); }
} // namespace std
/**
* @note Address: N/A
* @note Size: 0x22C
*/
extern char __throw_catch_compare(const char* throwtype, const char* catchtype, s32* offset_result)
{
const char *cptr1, *cptr2;
*offset_result = 0;
if ((cptr2 = catchtype) == 0) {
return true;
}
cptr1 = throwtype;
if (*cptr2 == 'P') {
cptr2++;
if (*cptr2 == 'C')
cptr2++;
if (*cptr2 == 'V')
cptr2++;
if (*cptr2 == 'v') {
if (*cptr1 == 'P' || *cptr1 == '*') {
return true;
}
}
cptr2 = catchtype;
}
switch (*cptr1) {
case '*':
case '!':
if (*cptr1++ != *cptr2++)
return false;
for (;;) {
if (*cptr1 == *cptr2++) {
if (*cptr1++ == '!') {
s32 offset;
for (offset = 0; *cptr1 != '!';) {
offset = offset * 10 + *cptr1++ - '0';
}
*offset_result = offset;
return true;
}
} else {
while (*cptr1++ != '!') { }
while (*cptr1++ != '!') { }
if (*cptr1 == 0)
return false;
cptr2 = catchtype + 1;
}
}
return false;
}
while ((*cptr1 == 'P' || *cptr1 == 'R') && *cptr1 == *cptr2) {
cptr1++;
cptr2++;
if (*cptr2 == 'C') {
if (*cptr1 == 'C')
cptr1++;
cptr2++;
}
if (*cptr1 == 'C')
return false;
if (*cptr2 == 'V') {
if (*cptr1 == 'V')
cptr1++;
cptr2++;
}
if (*cptr1 == 'V')
return false;
}
for (; *cptr1 == *cptr2; cptr1++, cptr2++) {
if (*cptr1 == 0)
return true;
}
return false;
}
class __partial_array_destructor {
private:
void* p;
size_t size;
size_t n;
ConstructorDestructor dtor;
public:
size_t i;
__partial_array_destructor(void* array, size_t elementsize, size_t nelements, ConstructorDestructor destructor)
{
p = array;
size = elementsize;
n = nelements;
dtor = destructor;
i = n;
}
~__partial_array_destructor()
{
char* ptr;
if (i < n && dtor) {
for (ptr = (char*)p + size * i; i > 0; i--) {
ptr -= size;
DTORCALL_COMPLETE(dtor, ptr);
}
}
}
};

View file

@ -100,10 +100,10 @@ void HuAudAllStop(void) {
HuAudSStreamAllStop(); HuAudSStreamAllStop();
} }
void HuAudFadeOut(s32 arg0) { void HuAudFadeOut(s32 speed) {
HuAudFXAllStop(); HuAudFXAllStop();
HuAudSeqAllFadeOut(arg0); HuAudSeqAllFadeOut(speed);
HuAudSStreamAllFadeOut(arg0); HuAudSStreamAllFadeOut(speed);
} }
int HuAudFXPlay(int seId) int HuAudFXPlay(int seId)
@ -228,8 +228,8 @@ void HuAudFXListnerKill(void) {
msmSeDelListener(); msmSeDelListener();
} }
void HuAudFXPauseAll(s32 arg0) { void HuAudFXPauseAll(s32 pause) {
msmSePauseAll(arg0, 0x64); msmSePauseAll(pause, 0x64);
} }
s32 HuAudFXStatusGet(int seNo) { s32 HuAudFXStatusGet(int seNo) {
@ -259,35 +259,35 @@ s32 HuAudFXVolSet(int seNo, s16 vol)
return msmSeSetParam(seNo, &param); return msmSeSetParam(seNo, &param);
} }
s32 HuAudSeqPlay(s16 arg0) { s32 HuAudSeqPlay(s16 musId) {
s32 temp_r31; s32 channel;
if (musicOffF != 0 || omSysExitReq != 0) { if (musicOffF != 0 || omSysExitReq != 0) {
return 0; return 0;
} }
temp_r31 = msmMusPlay(arg0, NULL); channel = msmMusPlay(musId, NULL);
return temp_r31; return channel;
} }
void HuAudSeqStop(s32 arg0) { void HuAudSeqStop(s32 musNo) {
if (musicOffF != 0 || omSysExitReq != 0) { if (musicOffF != 0 || omSysExitReq != 0) {
return; return;
} }
msmMusStop(arg0, 0); msmMusStop(musNo, 0);
} }
void HuAudSeqFadeOut(s32 arg0, s32 arg1) { void HuAudSeqFadeOut(s32 musNo, s32 speed) {
if (musicOffF == 0) { if (musicOffF == 0) {
msmMusStop(arg0, arg1); msmMusStop(musNo, speed);
} }
} }
void HuAudSeqAllFadeOut(s32 arg0) { void HuAudSeqAllFadeOut(s32 speed) {
s16 i; s16 i;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (msmMusGetStatus(i) == 2) { if (msmMusGetStatus(i) == 2) {
msmMusStop(i, arg0); msmMusStop(i, speed);
} }
} }
} }
@ -296,22 +296,22 @@ void HuAudSeqAllStop(void) {
msmMusStopAll(0, 0); msmMusStopAll(0, 0);
} }
void HuAudSeqPauseAll(s32 arg0) { void HuAudSeqPauseAll(s32 pause) {
msmMusPauseAll(arg0, 0x64); msmMusPauseAll(pause, 0x64);
} }
void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2) { void HuAudSeqPause(s32 musNo, s32 pause, s32 speed) {
if (musicOffF != 0 || omSysExitReq != 0) { if (musicOffF != 0 || omSysExitReq != 0) {
return; return;
} }
msmMusPause(arg0, arg1, arg2); msmMusPause(musNo, pause, speed);
} }
s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2) { s32 HuAudSeqMidiCtrlGet(s32 musNo, s8 channel, s8 ctrl) {
if (musicOffF != 0 || omSysExitReq != 0) { if (musicOffF != 0 || omSysExitReq != 0) {
return 0; return 0;
} }
return msmMusGetMidiCtrl(arg0, arg1, arg2); return msmMusGetMidiCtrl(musNo, channel, ctrl);
} }
s32 HuAudSStreamPlay(s16 streamId) { s32 HuAudSStreamPlay(s16 streamId) {
@ -326,28 +326,28 @@ s32 HuAudSStreamPlay(s16 streamId) {
return result; return result;
} }
void HuAudSStreamStop(s32 arg0) { void HuAudSStreamStop(s32 seNo) {
if (musicOffF == 0) { if (musicOffF == 0) {
msmStreamStop(arg0, 0); msmStreamStop(seNo, 0);
} }
} }
void HuAudSStreamFadeOut(s32 arg0, s32 arg1) { void HuAudSStreamFadeOut(s32 seNo, s32 speed) {
if (musicOffF == 0) { if (musicOffF == 0) {
msmStreamStop(arg0, arg1); msmStreamStop(seNo, speed);
} }
} }
void HuAudSStreamAllFadeOut(s32 arg0) { void HuAudSStreamAllFadeOut(s32 speed) {
msmStreamStopAll(arg0); msmStreamStopAll(speed);
} }
void HuAudSStreamAllStop(void) { void HuAudSStreamAllStop(void) {
msmStreamStopAll(0); msmStreamStopAll(0);
} }
s32 HuAudSStreamStatGet(s32 arg0) { s32 HuAudSStreamStatGet(s32 seNo) {
return msmStreamGetStatus(arg0); return msmStreamGetStatus(seNo);
} }
SNDGRPTBL sndGrpTable[] = { SNDGRPTBL sndGrpTable[] = {
@ -445,75 +445,75 @@ SNDGRPTBL sndGrpTable[] = {
}; };
void HuAudDllSndGrpSet(u16 ovl) { void HuAudDllSndGrpSet(u16 ovl) {
SNDGRPTBL *var_r31; SNDGRPTBL *sndGrp;
s16 var_r29; s16 grpSet;
var_r31 = sndGrpTable; sndGrp = sndGrpTable;
while (1) { while (1) {
if (var_r31->ovl == ovl) { if (sndGrp->ovl == ovl) {
var_r29 = var_r31->grpSet; grpSet = sndGrp->grpSet;
break; break;
} }
if (var_r31->ovl == OVL_INVALID) { if (sndGrp->ovl == OVL_INVALID) {
var_r29 = 0x12; grpSet = 0x12;
break; break;
} }
var_r31++; sndGrp++;
} }
if (var_r29 != -1) { if (grpSet != -1) {
OSReport("SOUND ##########################\n"); OSReport("SOUND ##########################\n");
HuAudSndGrpSetSet(var_r29); HuAudSndGrpSetSet(grpSet);
if (var_r31->auxANo != auxANoBak || var_r31->auxBNo != auxBNoBak) { if (sndGrp->auxANo != auxANoBak || sndGrp->auxBNo != auxBNoBak) {
msmSysSetAux(var_r31->auxANo, var_r31->auxBNo); msmSysSetAux(sndGrp->auxANo, sndGrp->auxBNo);
OSReport("Change AUX %d,%d\n", var_r31->auxANo, var_r31->auxBNo); OSReport("Change AUX %d,%d\n", sndGrp->auxANo, sndGrp->auxBNo);
auxANoBak = var_r31->auxANo; auxANoBak = sndGrp->auxANo;
auxBNoBak = var_r31->auxBNo; auxBNoBak = sndGrp->auxBNo;
HuPrcVSleep(); HuPrcVSleep();
} }
HuAudAUXVolSet(var_r31->auxAVol, var_r31->auxBVol); HuAudAUXVolSet(sndGrp->auxAVol, sndGrp->auxBVol);
OSReport("##########################\n"); OSReport("##########################\n");
} }
} }
void HuAudSndGrpSetSet(s16 arg0) { void HuAudSndGrpSetSet(s16 data_size) {
void *temp_r3; void *buf;
OSTick temp_r31; OSTick osTick;
s32 temp_r26; s32 numPlay;
s32 temp_r27; s32 err;
if (sndGroupBak != arg0) { if (sndGroupBak != data_size) {
msmMusStopAll(1, 0); msmMusStopAll(1, 0);
msmSeStopAll(1, 0); msmSeStopAll(1, 0);
temp_r31 = OSGetTick(); osTick = OSGetTick();
while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0)
&& OSTicksToMilliseconds(OSGetTick() - temp_r31) < 500); && OSTicksToMilliseconds(OSGetTick() - osTick) < 500);
OSReport("%d\n", OSTicksToMilliseconds(OSGetTick() - temp_r31)); OSReport("%d\n", OSTicksToMilliseconds(OSGetTick() - osTick));
if (OSTicksToMilliseconds(OSGetTick() - temp_r31) >= 500) { if (OSTicksToMilliseconds(OSGetTick() - osTick) >= 500) {
temp_r26 = msmSeGetNumPlay(1); numPlay = msmSeGetNumPlay(1);
OSReport("Timed Out! Mus %d:SE %d\n", msmMusGetNumPlay(1), temp_r26); OSReport("Timed Out! Mus %d:SE %d\n", msmMusGetNumPlay(1), numPlay);
} }
OSReport("GroupSet %d\n", arg0); OSReport("GroupSet %d\n", data_size);
sndGroupBak = arg0; sndGroupBak = data_size;
temp_r27 = msmSysDelGroupAll(); err = msmSysDelGroupAll();
temp_r3 = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(1)); buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(1));
temp_r27 = msmSysLoadGroupSet(arg0, temp_r3); err = msmSysLoadGroupSet(data_size, buf);
OSReport("***********GroupSet Error %d\n", temp_r27); OSReport("***********GroupSet Error %d\n", err);
HuMemDirectFree(temp_r3); HuMemDirectFree(buf);
} }
} }
void HuAudSndGrpSet(s16 arg0) { void HuAudSndGrpSet(s16 grpId) {
void *temp_r3; void *buf;
temp_r3 = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(arg0)); buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId));
msmSysLoadGroup(arg0, temp_r3, 0); msmSysLoadGroup(grpId, buf, 0);
HuMemDirectFree(temp_r3); HuMemDirectFree(buf);
} }
void HuAudSndCommonGrpSet(s16 arg0, s32 arg1) { void HuAudSndCommonGrpSet(s16 grpId, s32 groupCheck) {
s16 temp_r30; s16 err;
OSTick temp_r27; OSTick osTick;
void *temp_r3; void *buf;
s16 i; s16 i;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
@ -521,75 +521,75 @@ void HuAudSndCommonGrpSet(s16 arg0, s32 arg1) {
} }
msmMusStopAll(1, 0); msmMusStopAll(1, 0);
msmSeStopAll(1, 0); msmSeStopAll(1, 0);
temp_r27 = OSGetTick(); osTick = OSGetTick();
while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0)
&& OSTicksToMilliseconds(OSGetTick() - temp_r27) < 500); && OSTicksToMilliseconds(OSGetTick() - osTick) < 500);
OSReport("CommonGrpSet %d\n", arg0); OSReport("CommonGrpSet %d\n", grpId);
if (arg1 != 0) { if (groupCheck != 0) {
temp_r30 = msmSysDelGroupBase(0); err = msmSysDelGroupBase(0);
if (temp_r30 < 0) { if (err < 0) {
OSReport("Del Group Error %d\n", temp_r30); OSReport("Del Group Error %d\n", err);
} }
} }
temp_r3 = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(arg0)); buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId));
msmSysLoadGroupBase(arg0, temp_r3); msmSysLoadGroupBase(grpId, buf);
HuMemDirectFree(temp_r3); HuMemDirectFree(buf);
sndGroupBak = -1; sndGroupBak = -1;
} }
void HuAudAUXSet(s32 arg0, s32 arg1) { void HuAudAUXSet(s32 auxA, s32 auxB) {
if (arg0 == -1) { if (auxA == -1) {
arg0 = 0; auxA = 0;
} }
if (arg1 == -1) { if (auxB == -1) {
arg1 = 1; auxB = 1;
} }
msmSysSetAux(arg0, arg1); msmSysSetAux(auxA, auxB);
} }
void HuAudAUXVolSet(s8 arg0, s8 arg1) { void HuAudAUXVolSet(s8 auxA, s8 auxB) {
HuAuxAVol = arg0; HuAuxAVol = auxA;
HuAuxBVol = arg1; HuAuxBVol = auxB;
} }
void HuAudVoiceInit(s16 ovl) { void HuAudVoiceInit(s16 ovl) {
SNDGRPTBL *var_r29; SNDGRPTBL *sndGrp;
OSTick temp_r23; OSTick osTick;
s16 var_r27; s16 numNotChars;
s16 temp_r26; s16 grpId;
s16 temp_r25; s16 temp_r25;
s16 temp_r30; s16 character;
void *temp_r3; void *buf;
s16 i; s16 i;
if (ovl != OVL_INVALID) { if (ovl != OVL_INVALID) {
var_r29 = sndGrpTable; sndGrp = sndGrpTable;
while (1) { while (1) {
if (var_r29->ovl == ovl && var_r29->grpSet == -1) { if (sndGrp->ovl == ovl && sndGrp->grpSet == -1) {
return; return;
} }
if (var_r29->ovl == OVL_INVALID) { if (sndGrp->ovl == OVL_INVALID) {
break; break;
} }
var_r29++; sndGrp++;
} }
} }
for (i = var_r27 = 0; i < 4; i++) { for (i = numNotChars = 0; i < 4; i++) {
temp_r30 = GWPlayerCfg[i].character; character = GWPlayerCfg[i].character;
if (temp_r30 < 0 || temp_r30 >= 8 || temp_r30 == 0xFF || charVoiceGroupStat[temp_r30] != 0) { if (character < 0 || character >= 8 || character == 0xFF || charVoiceGroupStat[character] != 0) {
var_r27++; numNotChars++;
} }
} }
if (var_r27 < 4) { if (numNotChars < 4) {
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
charVoiceGroupStat[i] = 0; charVoiceGroupStat[i] = 0;
} }
msmMusStopAll(1, 0); msmMusStopAll(1, 0);
msmSeStopAll(1, 0); msmSeStopAll(1, 0);
temp_r23 = OSGetTick(); osTick = OSGetTick();
while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0)
&& OSTicksToMilliseconds(OSGetTick() - temp_r23) < 500); && OSTicksToMilliseconds(OSGetTick() - osTick) < 500);
OSReport("############CharGrpSet\n"); OSReport("############CharGrpSet\n");
temp_r25 = msmSysDelGroupBase(0); temp_r25 = msmSysDelGroupBase(0);
if (temp_r25 < 0) { if (temp_r25 < 0) {
@ -598,39 +598,39 @@ void HuAudVoiceInit(s16 ovl) {
OSReport("Del Group OK\n"); OSReport("Del Group OK\n");
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
temp_r30 = GWPlayerCfg[i].character; character = GWPlayerCfg[i].character;
if (temp_r30 >= 0 && temp_r30 < 8 && temp_r30 != 0xFF) { if (character >= 0 && character < 8 && character != 0xFF) {
charVoiceGroupStat[temp_r30] = 1; charVoiceGroupStat[character] = 1;
temp_r26 = temp_r30 + 0xA; grpId = character + 10;
temp_r3 = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(temp_r26)); buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId));
#if VERSION_NTSC #if VERSION_NTSC
msmSysLoadGroupBase(temp_r26, temp_r3); msmSysLoadGroupBase(grpId, buf);
#else #else
temp_r25 = msmSysLoadGroupBase(temp_r26, temp_r3); temp_r25 = msmSysLoadGroupBase(grpId, buf);
#endif #endif
HuMemDirectFree(temp_r3); HuMemDirectFree(buf);
} }
} }
sndGroupBak = -1; sndGroupBak = -1;
} }
} }
s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1) { s32 HuAudPlayerVoicePlay(s16 player, s16 seId) {
s16 temp_r31 = GWPlayerCfg[arg0].character; s16 charNo = GWPlayerCfg[player].character;
return HuAudCharVoicePlay(temp_r31, arg1); return HuAudCharVoicePlay(charNo, seId);
} }
s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2) { s32 HuAudPlayerVoicePlayPos(s16 player, s16 seId, Vec *pos) {
s16 temp_r31 = GWPlayerCfg[arg0].character; s16 charNo = GWPlayerCfg[player].character;
return HuAudCharVoicePlayPos(temp_r31, arg1, arg2); return HuAudCharVoicePlayPos(charNo, seId, pos);
} }
void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1) { void HuAudPlayerVoicePlayEntry(s16 player, s16 seId) {
s16 temp_r31 = GWPlayerCfg[arg0].character; s16 charNo = GWPlayerCfg[player].character;
HuAudCharVoicePlayEntry(temp_r31, arg1); HuAudCharVoicePlayEntry(charNo, seId);
} }
s32 HuAudCharVoicePlay(s16 charNo, s16 seId) s32 HuAudCharVoicePlay(s16 charNo, s16 seId)
@ -676,14 +676,14 @@ s32 HuAudCharVoicePlayPos(s16 charNo, s16 seId, Vec *pos) {
} }
void HuAudCharVoicePlayEntry(s16 charNo, s16 seId) { void HuAudCharVoicePlayEntry(s16 charNo, s16 seId) {
int spC[MSM_ENTRY_SENO_MAX]; // size unknown (min: 30, max: 33) int seNoTbl[MSM_ENTRY_SENO_MAX]; // size unknown (min: 30, max: 33)
u16 temp_r29; u16 id;
u16 i; u16 i;
seId += (charNo << 6); seId += (charNo << 6);
temp_r29 = msmSeGetEntryID(seId, spC); id = msmSeGetEntryID(seId, seNoTbl);
for (i = 0; i < temp_r29; i++) { for (i = 0; i < id; i++) {
msmSeStop(spC[i], 0); msmSeStop(seNoTbl[i], 0);
} }
} }

View file

@ -15,64 +15,64 @@ static s16 boardMusTbl[] = {
}; };
void BoardMusStartBoard(void) { void BoardMusStartBoard(void) {
s16 temp_r31 = boardMusTbl[GWBoardGet()]; s16 musIdx = boardMusTbl[GWBoardGet()];
BoardMusStart(0, temp_r31, 0x7F, 0); BoardMusStart(0, musIdx, 0x7F, 0);
BoardAudFXPlay(); BoardAudFXPlay();
} }
void BoardMusStart(s32 arg0, s32 arg1, s8 arg2, u16 arg3) { void BoardMusStart(s32 boardNo, s32 musId, s8 vol, u16 speed) {
s16 *temp_r31 = boardSeq[arg0]; s16 *board = boardSeq[boardNo];
MSM_MUSPARAM param; MSM_MUSPARAM param;
if (arg1 == temp_r31[1]) { if (musId == board[1]) {
return; return;
} }
if (temp_r31[0] != -1) { if (board[0] != -1) {
BoardAudSeqFadeOutFast(temp_r31[0]); BoardAudSeqFadeOutFast(board[0]);
} }
param.flag = MSM_MUSPARAM_CHAN; param.flag = MSM_MUSPARAM_CHAN;
if (arg3 != 0) { if (speed != 0) {
param.flag |= MSM_MUSPARAM_FADESPEED; param.flag |= MSM_MUSPARAM_FADESPEED;
} }
if (arg2 < 0) { if (vol < 0) {
param.flag |= MSM_MUSPARAM_VOL; param.flag |= MSM_MUSPARAM_VOL;
arg2 = 0x7F; vol = 0x7F;
} }
param.fadeSpeed = arg3; param.fadeSpeed = speed;
param.vol = arg2; param.vol = vol;
param.chan = arg0; param.chan = boardNo;
temp_r31[0] = msmMusPlay(arg1, &param); board[0] = msmMusPlay(musId, &param);
temp_r31[1] = arg1; board[1] = musId;
} }
void BoardAudSeqFadeOutFast(s32 arg0) { void BoardAudSeqFadeOutFast(s32 boardNo) {
BoardAudSeqFadeOut(arg0, 0x64); BoardAudSeqFadeOut(boardNo, 0x64);
} }
void BoardAudSeqFadeOut(s32 arg0, u16 arg1) { void BoardAudSeqFadeOut(s32 boardNo, u16 speed) {
s16 *temp_r31 = boardSeq[arg0]; s16 *board = boardSeq[boardNo];
if (temp_r31[0] == -1) { if (board[0] == -1) {
return; return;
} }
HuAudSeqFadeOut(temp_r31[0], arg1); HuAudSeqFadeOut(board[0], speed);
temp_r31[1] = temp_r31[0] = -1; board[1] = board[0] = -1;
} }
void BoardMusLoudSet(s32 arg0, s32 arg1) { void BoardMusLoudSet(s32 boardNo, s32 isQuieter) {
if (arg1 != 0) { if (isQuieter != 0) {
BoardMusVolPanSet(arg0, 0x60, 0x1F4); BoardMusVolPanSet(boardNo, 0x60, 0x1F4);
} else { } else {
BoardMusVolPanSet(arg0, 0x7F, 0x1F4); BoardMusVolPanSet(boardNo, 0x7F, 0x1F4);
} }
} }
void BoardMusVolPanSet(s32 arg0, s8 vol, u16 fadeSpeed) { void BoardMusVolPanSet(s32 boardNo, s8 vol, u16 fadeSpeed) {
s16 *temp_r31 = boardSeq[arg0]; s16 *board = boardSeq[boardNo];
MSM_MUSPARAM param; MSM_MUSPARAM param;
if (temp_r31[0] == -1) { if (board[0] == -1) {
return; return;
} }
param.flag = MSM_MUSPARAM_CHAN; param.flag = MSM_MUSPARAM_CHAN;
@ -82,32 +82,32 @@ void BoardMusVolPanSet(s32 arg0, s8 vol, u16 fadeSpeed) {
} }
param.fadeSpeed = fadeSpeed; param.fadeSpeed = fadeSpeed;
param.vol = vol; param.vol = vol;
msmMusSetParam(temp_r31[0], &param); msmMusSetParam(board[0], &param);
} }
void BoardAudSeqPause(s32 arg0, s32 arg1, u16 arg2) { void BoardAudSeqPause(s32 boardNo, s32 pause, u16 speed) {
s16 *temp_r31 = boardSeq[arg0]; s16 *board = boardSeq[boardNo];
if (temp_r31[0] == -1) { if (board[0] == -1) {
return; return;
} }
if (arg1 != 0) { if (pause != 0) {
if (BoardMusStatusGet(arg0) == 3) { if (BoardMusStatusGet(boardNo) == 3) {
return; return;
} }
} else if (BoardMusStatusGet(arg0) != 3) { } else if (BoardMusStatusGet(boardNo) != 3) {
return; return;
} }
HuAudSeqPause(temp_r31[0], arg1, arg2); HuAudSeqPause(board[0], pause, speed);
} }
s32 BoardMusStatusGet(s32 arg0) { s32 BoardMusStatusGet(s32 boardNo) {
s16 *temp_r31 = boardSeq[arg0]; s16 *board = boardSeq[boardNo];
if (temp_r31[0] == -1) { if (board[0] == -1) {
return 0; return 0;
} }
return msmMusGetStatus(temp_r31[0]); return msmMusGetStatus(board[0]);
} }
void BoardAudSeqClear(void) { void BoardAudSeqClear(void) {
@ -134,20 +134,20 @@ void BoardAudSeqFadeOutAll(void) {
} }
void BoardAudFXPlay(void) { void BoardAudFXPlay(void) {
s32 var_r31; s32 seId;
switch (GWBoardGet()) { switch (GWBoardGet()) {
case BOARD_ID_MAIN5: case BOARD_ID_MAIN5:
var_r31 = 0x48D; seId = 0x48D;
break; break;
case BOARD_ID_MAIN6: case BOARD_ID_MAIN6:
var_r31 = 0x4A2; seId = 0x4A2;
break; break;
default: default:
return; return;
} }
if (boardFX == -1) { if (boardFX == -1) {
boardFX = HuAudFXPlay(var_r31); boardFX = HuAudFXPlay(seId);
} }
} }