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)
endif ()
add_compile_options(-fsanitize=address)
add_subdirectory(extern/aurora EXCLUDE_FROM_ALL)
add_subdirectory(extern/musyx EXCLUDE_FROM_ALL)

View file

@ -23,10 +23,15 @@ extern "C" {
#endif
typedef s64 OSTime;
typedef u32 OSTick;
#ifdef __MWERKS__
u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h
u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h
#define OS_BUS_CLOCK (u32) __OSBusClock
#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)
#ifndef _DEBUG

View file

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

View file

@ -761,7 +761,7 @@ void fn_1_97F8(s32 arg0)
temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2);
temp_r30->unk00_bit0 = 0;
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);
temp_r30->unk8 = (80.0f + sp8.y);
memset(temp_r30->unk_0C, 0, 0x190);

View file

@ -157,7 +157,7 @@ void fn_1_9D0C(omObjData *arg0)
s32 var_r30;
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->unk_02 = 5;
temp_r31->unk_04 = 0x3C;
@ -318,7 +318,7 @@ void fn_1_A5B0(omObjData *arg0)
BoardModelVisibilitySet(lbl_1_bss_D4, 1);
BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f);
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;
lbl_1_bss_C8->work[1] = 1;
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_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->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) {
lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00));
HuSprAnimLock(lbl_1_bss_78);

View file

@ -3,12 +3,56 @@
#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
#define MEM_SIZE (64 * 1024 * 1024)
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()
{
puts("OSInit is a stub");
@ -16,16 +60,25 @@ void OSInit()
OSSetArenaLo(arena);
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)
{
return 0;
return (OSTime)GetGCTicks();
}
OSTick OSGetTick(void)
{
return 0;
return (OSTick)GetGCTicks();
}
u32 OSGetPhysicalMemSize(void)

View file

@ -536,53 +536,53 @@ VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback)
void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1)
{
puts("GXSetGPMetric is a stub");
// puts("GXSetGPMetric is a stub");
}
void GXReadGPMetric(u32 *cnt0, u32 *cnt1)
{
puts("GXReadGPMetric is a stub");
// puts("GXReadGPMetric is a stub");
}
void GXClearGPMetric(void)
{
puts("GXClearGPMetric is a stub");
// puts("GXClearGPMetric is a stub");
}
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)
{
puts("GXReadMemMetric is a stub");
// puts("GXReadMemMetric is a stub");
}
void GXClearMemMetric(void)
{
puts("GXClearMemMetric is a stub");
// puts("GXClearMemMetric is a stub");
}
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)
{
puts("GXReadPixMetric is a stub");
// puts("GXReadPixMetric is a stub");
}
void GXClearPixMetric(void)
{
puts("GXClearPixMetric is a stub");
// puts("GXClearPixMetric is a stub");
}
void GXSetVCacheMetric(GXVCachePerf attr)
{
puts("GXSetVCacheMetric is a stub");
// puts("GXSetVCacheMetric is a stub");
}
void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall)
{
puts("GXReadVCacheMetric is a stub");
// puts("GXReadVCacheMetric is a stub");
}
void GXSetDrawSync(u16 token)