More fixes

This commit is contained in:
dbalatoni13 2025-04-06 22:04:10 +02:00
parent dee0ba15d4
commit 10efa92153
8 changed files with 99 additions and 39 deletions

View file

@ -26,6 +26,8 @@ if(APPLE)
add_compile_options(-Wno-declaration-after-statement) add_compile_options(-Wno-declaration-after-statement)
endif () endif ()
add_compile_options(-fsanitize=address)
add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) add_subdirectory(extern/aurora EXCLUDE_FROM_ALL)
add_subdirectory(extern/musyx EXCLUDE_FROM_ALL) add_subdirectory(extern/musyx EXCLUDE_FROM_ALL)

View file

@ -23,10 +23,15 @@ extern "C" {
#endif #endif
typedef s64 OSTime; typedef s64 OSTime;
typedef u32 OSTick; typedef u32 OSTick;
#ifdef __MWERKS__
u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h
u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h
#define OS_BUS_CLOCK (u32) __OSBusClock #define OS_BUS_CLOCK (u32) __OSBusClock
#define OS_CORE_CLOCK __OSCoreClock #define OS_CORE_CLOCK __OSCoreClock
#else
#define OS_BUS_CLOCK 162000000
#define OS_BUS_CLOCK 486000000
#endif
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4) #define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
#ifndef _DEBUG #ifndef _DEBUG

View file

@ -126,7 +126,7 @@ void ObjectSetup(void)
// HuSprPosSet(group, 1, 288, 240); // HuSprPosSet(group, 1, 288, 240);
// HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); // HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
HuWinInit(1); HuWinInit(1);
BootTitleCreate(); //BootTitleCreate();
SystemInitF = 1; SystemInitF = 1;
} }
else { else {
@ -167,16 +167,16 @@ void ObjectSetup(void)
// TODO PC // TODO PC
MGSeqInit(); MGSeqInit();
#endif #endif
HuWinInit(1); //HuWinInit(1);
BootTitleCreate(); //BootTitleCreate();
// data = HuSprAnimReadFile(TITLE_HUDSON_ANM); // data = HuSprAnimReadFile(TITLE_HUDSON_ANM);
// sprite_hudson = HuSprCreate(data, 0, 0); // sprite_hudson = HuSprCreate(data, 0, 0);
// HuSprGrpMemberSet(group, 1, sprite_hudson); // HuSprGrpMemberSet(group, 1, sprite_hudson);
HuSprPosSet(group, 1, 288, 240); HuSprPosSet(group, 1, 288, 240);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) {
HuPrcVSleep(); // HuPrcVSleep();
} //}
} }
else { else {
for (i = 0; i < 180; i++) { for (i = 0; i < 180; i++) {
@ -209,9 +209,9 @@ void ObjectSetup(void)
//group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); //group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0));
//msmSysLoadGroup(0, group_samp, 0); //msmSysLoadGroup(0, group_samp, 0);
//HuMemDirectFree(group_samp); //HuMemDirectFree(group_samp);
while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) {
HuPrcVSleep(); // HuPrcVSleep();
} //}
} }
else { else {
for (i = 0; i < 180; i++) { for (i = 0; i < 180; i++) {
@ -234,14 +234,14 @@ void ObjectSetup(void)
while (WipeStatGet()) { while (WipeStatGet()) {
HuPrcVSleep(); HuPrcVSleep();
} }
tick_prev = OSGetTick(); //tick_prev = OSGetTick();
if (!SystemInitF) { //if (!SystemInitF) {
HuAudSndGrpSetSet(0); // HuAudSndGrpSetSet(0);
SystemInitF = 1; // SystemInitF = 1;
} //}
while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) { //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) {
HuPrcVSleep(); // HuPrcVSleep();
} //}
HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
group_thp = HuSprGrpCreate(1); group_thp = HuSprGrpCreate(1);
@ -249,11 +249,11 @@ void ObjectSetup(void)
//HuSprGrpMemberSet(group_thp, 0, sprite_thp); //HuSprGrpMemberSet(group_thp, 0, sprite_thp);
//HuSprPosSet(group_thp, 0, 288, 240); //HuSprPosSet(group_thp, 0, 288, 240);
HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4));
demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); //demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0);
HuWinMesSpeedSet(demoWinId, 0); //HuWinMesSpeedSet(demoWinId, 0);
HuWinBGTPLvlSet(demoWinId, 0); //HuWinBGTPLvlSet(demoWinId, 0);
HuWinPriSet(demoWinId, 10); //HuWinPriSet(demoWinId, 10);
HuWinAttrSet(demoWinId, 0x800); //HuWinAttrSet(demoWinId, 0x800);
HuPrcSleep(5); HuPrcSleep(5);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10);
while (WipeStatGet()) { while (WipeStatGet()) {
@ -622,7 +622,7 @@ void ObjectSetup(void)
OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo));
OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0));
#endif #endif
HuAudSStreamPlay(20); //HuAudSStreamPlay(20);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30);
while (WipeStatGet()) { while (WipeStatGet()) {
HuPrcVSleep(); HuPrcVSleep();

View file

@ -761,7 +761,7 @@ void fn_1_97F8(s32 arg0)
temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2); temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2);
temp_r30->unk00_bit0 = 0; temp_r30->unk00_bit0 = 0;
temp_r30->unk4 = arg0; temp_r30->unk4 = arg0;
temp_r30->unk_0C = HuMemDirectMallocNum(0, 0x190, MEMORY_DEFAULT_NUM); temp_r30->unk_0C = HuMemDirectMallocNum(0, 20 * sizeof(unkTemp), MEMORY_DEFAULT_NUM);
BoardPlayerPosGet(arg0, &sp8); BoardPlayerPosGet(arg0, &sp8);
temp_r30->unk8 = (80.0f + sp8.y); temp_r30->unk8 = (80.0f + sp8.y);
memset(temp_r30->unk_0C, 0, 0x190); memset(temp_r30->unk_0C, 0, 0x190);

View file

@ -157,7 +157,7 @@ void fn_1_9D0C(omObjData *arg0)
s32 var_r30; s32 var_r30;
dataCopy2 *temp_r31; dataCopy2 *temp_r31;
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, MEMORY_DEFAULT_NUM); arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy2), MEMORY_DEFAULT_NUM);
temp_r31 = arg0->data; temp_r31 = arg0->data;
temp_r31->unk_02 = 5; temp_r31->unk_02 = 5;
temp_r31->unk_04 = 0x3C; temp_r31->unk_04 = 0x3C;
@ -318,7 +318,7 @@ void fn_1_A5B0(omObjData *arg0)
BoardModelVisibilitySet(lbl_1_bss_D4, 1); BoardModelVisibilitySet(lbl_1_bss_D4, 1);
BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f); BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f);
lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4); lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4);
temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0xC, MEMORY_DEFAULT_NUM); temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Vec), MEMORY_DEFAULT_NUM);
temp_r31 = temp_r29->data; temp_r31 = temp_r29->data;
lbl_1_bss_C8->work[1] = 1; lbl_1_bss_C8->work[1] = 1;
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14);

View file

@ -114,7 +114,7 @@ void fn_1_6B7C(void)
lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284); lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284);
lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0); lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0);
lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL); lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL);
lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14, MEMORY_DEFAULT_NUM); lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy), MEMORY_DEFAULT_NUM);
if (lbl_1_bss_78 == NULL) { if (lbl_1_bss_78 == NULL) {
lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00)); lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00));
HuSprAnimLock(lbl_1_bss_78); HuSprAnimLock(lbl_1_bss_78);

View file

@ -3,12 +3,56 @@
#include <dolphin.h> #include <dolphin.h>
#ifndef _WIN32
#include <sys/time.h>
#include <unistd.h>
#if __APPLE__
#include <mach/mach_time.h>
#endif
#endif
#ifdef _WIN32
#include <windows.h>
#endif
#if __APPLE__
static u64 MachToDolphinNum;
static u64 MachToDolphinDenom;
#elif _WIN32
static LARGE_INTEGER PerfFrequency;
#endif
// Credits: Super Monkey Ball // Credits: Super Monkey Ball
#define MEM_SIZE (64 * 1024 * 1024) #define MEM_SIZE (64 * 1024 * 1024)
u8 LC_CACHE_BASE[4096]; u8 LC_CACHE_BASE[4096];
static u64 GetGCTicksPerSec()
{
return 486000000ull;
}
static u64 GetGCTicks()
{
#if __APPLE__
return mach_absolute_time() * MachToDolphinNum / MachToDolphinDenom;
#elif __linux__ || __FreeBSD__
struct timespec tp;
clock_gettime(CLOCK_MONOTONIC, &tp);
return u64((tp.tv_sec * 1000000000ull) + tp.tv_nsec) * GetGCTicksPerSec() / 1000000000ull;
#elif _WIN32
LARGE_INTEGER perf;
QueryPerformanceCounter(&perf);
perf.QuadPart *= GetGCTicksPerSec();
perf.QuadPart /= PerfFrequency.QuadPart;
return perf.QuadPart;
#else
return 0;
#endif
}
void OSInit() void OSInit()
{ {
puts("OSInit is a stub"); puts("OSInit is a stub");
@ -16,16 +60,25 @@ void OSInit()
OSSetArenaLo(arena); OSSetArenaLo(arena);
OSSetArenaHi(arena + MEM_SIZE); OSSetArenaHi(arena + MEM_SIZE);
#if __APPLE__
mach_timebase_info_data_t timebase;
mach_timebase_info(&timebase);
MachToDolphinNum = GetGCTicksPerSec() * timebase.numer;
MachToDolphinDenom = 1000000000ull * timebase.denom;
#elif _WIN32
QueryPerformanceFrequency(&PerfFrequency);
#endif
} }
OSTime OSGetTime(void) OSTime OSGetTime(void)
{ {
return 0; return (OSTime)GetGCTicks();
} }
OSTick OSGetTick(void) OSTick OSGetTick(void)
{ {
return 0; return (OSTick)GetGCTicks();
} }
u32 OSGetPhysicalMemSize(void) u32 OSGetPhysicalMemSize(void)

View file

@ -536,53 +536,53 @@ VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback)
void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1)
{ {
puts("GXSetGPMetric is a stub"); // puts("GXSetGPMetric is a stub");
} }
void GXReadGPMetric(u32 *cnt0, u32 *cnt1) void GXReadGPMetric(u32 *cnt0, u32 *cnt1)
{ {
puts("GXReadGPMetric is a stub"); // puts("GXReadGPMetric is a stub");
} }
void GXClearGPMetric(void) void GXClearGPMetric(void)
{ {
puts("GXClearGPMetric is a stub"); // puts("GXClearGPMetric is a stub");
} }
void GXReadMemMetric( void GXReadMemMetric(
u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, u32 *rf_req, u32 *fi_req) u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, u32 *rf_req, u32 *fi_req)
{ {
puts("GXReadMemMetric is a stub"); // puts("GXReadMemMetric is a stub");
} }
void GXClearMemMetric(void) void GXClearMemMetric(void)
{ {
puts("GXClearMemMetric is a stub"); // puts("GXClearMemMetric is a stub");
} }
void GXClearVCacheMetric(void) void GXClearVCacheMetric(void)
{ {
puts("GXClearVCacheMetric is a stub"); // puts("GXClearVCacheMetric is a stub");
} }
void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, u32 *bot_pixels_in, u32 *bot_pixels_out, u32 *clr_pixels_in, u32 *copy_clks) void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, u32 *bot_pixels_in, u32 *bot_pixels_out, u32 *clr_pixels_in, u32 *copy_clks)
{ {
puts("GXReadPixMetric is a stub"); // puts("GXReadPixMetric is a stub");
} }
void GXClearPixMetric(void) void GXClearPixMetric(void)
{ {
puts("GXClearPixMetric is a stub"); // puts("GXClearPixMetric is a stub");
} }
void GXSetVCacheMetric(GXVCachePerf attr) void GXSetVCacheMetric(GXVCachePerf attr)
{ {
puts("GXSetVCacheMetric is a stub"); // puts("GXSetVCacheMetric is a stub");
} }
void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall)
{ {
puts("GXReadVCacheMetric is a stub"); // puts("GXReadVCacheMetric is a stub");
} }
void GXSetDrawSync(u16 token) void GXSetDrawSync(u16 token)