More fixes
This commit is contained in:
parent
dee0ba15d4
commit
10efa92153
8 changed files with 99 additions and 39 deletions
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue