Decompile `game.c`

This commit is contained in:
MMDecomp 2020-06-23 01:08:52 +02:00 committed by Kenix3
parent 2d191e301a
commit 7d61d4e6ff
16 changed files with 598 additions and 83 deletions

24
include/convert.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef _ULTRA64_CONVERT_H_
#define _ULTRA64_CONVERT_H_
#define OS_CLOCK_RATE 62500000LL
#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4)
/* Macros */
#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))
#define OS_K0_TO_PHYSICAL(x) (u32)(((char*)(x)-0x80000000))
#define OS_K1_TO_PHYSICAL(x) (u32)(((char*)(x)-0xA0000000))
#define OS_PHYSICAL_TO_K0(x) (void*)(((u32)(x)+0x80000000))
#define OS_PHYSICAL_TO_K1(x) (void*)(((u32)(x)+0xA0000000))
/* Functions */
extern u32 osVirtualToPhysical(void*);
extern void* osPhysicalToVirtual(u32);
#endif

View File

@ -1530,7 +1530,7 @@ s32 func_800E8F08(Vec3s* param_1, Vec3s* param_2); // func_800E8F08
s32 func_800E8FA4(Actor* actor, Vec3f* param_2, Vec3s* param_3, Vec3s* param_4); // func_800E8FA4
s32 func_800E9138(GlobalContext* ctxt, Actor* actor, Vec3s* param_3, Vec3s* param_4, f32 param_5); // func_800E9138
s32 func_800E9250(GlobalContext* ctxt, Actor* actor, Vec3s* param_3, Vec3s* param_4, Vec3f param_5); // func_800E9250
void func_800E9360(void); // func_800E9360
u8 func_800E9360(void); // func_800E9360
void static_context_init(void); // func_800E93E0
void func_800E9470(void); // func_800E9470
void func_800E9488(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE1 param_10, UNK_TYPE1 param_11, UNK_TYPE1 param_12, UNK_TYPE1 param_13, UNK_TYPE2 param_14, UNK_TYPE4 param_15); // func_800E9488
@ -2760,13 +2760,13 @@ void func_80140260(OSViMode* vimode); // func_80140260
void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, int param_3, int param_4, int param_5, int param_6, int param_7, int param_8, UNK_TYPE4 param_9, int param_10, short param_11, unsigned int param_12, UNK_TYPE4 param_13); // func_8014026C
void func_80140730(void); // func_80140730
void func_80140810(void); // func_80140810
void func_80140898(void); // func_80140898
void func_80140900(void); // func_80140900
void func_80140898(void* arg0); // func_80140898
void func_80140900(void* arg0); // func_80140900
void func_8014090C(void); // func_8014090C
void func_80140970(void); // func_80140970
void func_80140CE0(void); // func_80140CE0
void func_80140D04(void); // func_80140D04
void func_80140D10(void); // func_80140D10
void func_80140CE0(void* arg0); // func_80140CE0
void func_80140D04(void* arg0); // func_80140D04
void func_80140D10(void* arg0, Gfx** gfx, u32 arg2); // func_80140D10
void func_80140E80(void* param_1); // func_80140E80
void func_80140EA0(void); // func_80140EA0
void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_80140EAC
@ -2777,15 +2777,15 @@ void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_
void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_8014151C
void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_80141678
void func_80141778(void); // func_80141778
void func_801418B0(void); // func_801418B0
void func_80141900(void); // func_80141900
void func_801418B0(void* arg0); // func_801418B0
void func_80141900(void* arg0); // func_80141900
void func_80141924(void); // func_80141924
void func_80141C34(void); // func_80141C34
void func_80141E60(void); // func_80141E60
void VisMono_Draw(void* arg0, Gfx** gfx, u32 arg2); // VisMono_Draw
void func_8014204C(void); // func_8014204C
void func_801420C0(void); // func_801420C0
void func_801420F4(void); // func_801420F4
void func_80142100(void); // func_80142100
void func_801420C0(void* arg0); // func_801420C0
void func_801420F4(void* arg0); // func_801420F4
void func_80142100(void* arg0, Gfx** gfx, u32 arg2); // func_80142100
void func_80142440(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9); // func_80142440
void func_80143148(void); // func_80143148
void func_801431E8(void); // func_801431E8
@ -3121,15 +3121,15 @@ void Audio_Stop(void); // func_80172EAC
void Audio_ThreadEntry(AudioThreadStruct* audio); // func_80172ED0
void Audio_WaitForInit(AudioThreadStruct* param_1); // func_80173048
void Audio_Start(AudioThreadStruct* audio, s32* audioThreadStackEnd, OSPri pri, OSId id, SchedThreadStruct* sched, IrqMgr* irq); // func_80173074
void func_80173130(void); // func_80173130
void Initial_Init2(GameState* ctxt); // func_801732DC
void Initial_Fini(void); // func_8017332C
void Initial_Init(GameState* ctxt); // func_80173338
void TitleSetup_GameStateResetContext(void); // func_80173130
void TitleSetup_InitImpl(GameState* gameState); // func_801732DC
void TitleSetup_Destroy(GameState* gameState); // func_8017332C
void TitleSetup_Init(GameState* gameState); // func_80173338
void Game_UpdateFramerateVariables(s32 divisor); // func_80173360
void Game_SetFramerateDivisor(GameState* iParm1, u32 divisor); // func_801733A8
void func_801733DC(void); // func_801733DC
void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); // func_801733A8
void GameState_SetFBFilter(Gfx** gfx, u32 arg1); // func_801733DC
void Game_Nop80173534(GameState* ctxt); // func_80173534
void func_80173540(GameState* ctxt, GraphicsContext* gCtxt); // func_80173540
void GameState_Draw(GameState* ctxt, GraphicsContext* gCtxt); // func_80173540
void Game_ResetSegments(GraphicsContext* gCtxt); // func_80173644
void func_801736DC(GraphicsContext* gCtxt); // func_801736DC
void Game_UpdateInput(GameState* ctxt); // func_80173754
@ -3137,13 +3137,13 @@ void Game_Update(GameState* ctxt); // func_8017377C
void Game_IncrementFrameCount(GameState* ctxt); // func_801737E4
void Game_InitHeap(GameState* ctxt, u32 size); // func_80173810
void Game_ResizeHeap(GameState* ctxt, u32 size); // func_80173880
void Game_StateInit(GameState* ctxt, func_ptr gameStateInit, GraphicsContext* gCtxt); // func_80173950
void Game_StateInit(GameState* ctxt, GameStateFunc gameStateInit, GraphicsContext* gCtxt); // func_80173950
void Game_StateFini(GameState* ctxt); // func_80173A50
UNK_TYPE4 Game_GetNextStateInit(GameState* ctxt); // func_80173B00
GameStateFunc Game_GetNextStateInit(GameState* ctxt); // func_80173B00
u32 Game_GetNextStateSize(GameState* ctxt); // func_80173B0C
u32 Game_GetShouldContinue(GameState* ctxt); // func_80173B18
void Game_GetHeapFreeSize(GameState* ctxt); // func_80173B24
int func_80173B48(GameState* ctxt); // func_80173B48
s32 Game_GetHeapFreeSize(GameState* ctxt); // func_80173B24
s32 func_80173B48(GameState* ctxt); // func_80173B48
GameAlloc* func_80173BF0(GameAlloc* heap); // func_80173BF0
void* Gamealloc_Alloc(GameAlloc* heap, u32 size); // func_80173C10
void Gamealloc_Free(GameAlloc* heap, void* ptr); // func_80173C7C
@ -3222,12 +3222,12 @@ void Sched_ThreadEntry(SchedThreadStruct* sched); // func_8017715C
void func_80177280(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12); // func_80177280
void Sched_Start(SchedThreadStruct* sched, void* stack, OSPri pri, UNK_TYPE4 param_4, UNK_TYPE4 param_5, IrqMgr* irqmgrStruct); // func_801772A0
void func_80177390(void); // func_80177390
void func_801773A0(void); // func_801773A0
void func_801773C4(void); // func_801773C4
void func_801773D0(void); // func_801773D0
void func_801773A0(void* arg0); // func_801773A0
void func_801773C4(void* arg0); // func_801773C4
void SpeedMeter_DrawTimeEntries(void* displayList, GraphicsContext* gCtx); // func_801773D0
void func_80177A84(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9); // func_80177A84
void func_80177AC8(void); // func_80177AC8
void func_80177E58(void); // func_80177E58
void SpeedMeter_DrawAllocEntries(void* displayList, GraphicsContext *gCtx, GameState *ctx); // func_80177E58
void func_801780F0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); // func_801780F0
void func_801781EC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_801781EC
void func_8017842C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // func_8017842C
@ -3455,7 +3455,7 @@ void func_801857A0(void); // func_801857A0
void func_801857C0(void); // func_801857C0
char* func_801857D0(void); // func_801857D0
void func_80185864(void); // func_80185864
void func_80185908(void); // func_80185908
u32 func_80185908(void); // func_80185908
void func_80185968(void); // func_80185968
void func_801859F0(void); // func_801859F0
void func_80185A2C(void); // func_80185A2C

View File

@ -1,8 +1,10 @@
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include "macros.h"
#include "structs.h"
#include "functions.h"
#include "regs.h"
#include "variables.h"
#include "macros.h"

View File

@ -1,6 +1,8 @@
#ifndef _MACROS_H_
#define _MACROS_H_
#include "convert.h"
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
@ -12,4 +14,11 @@
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
#endif
// Currently most often called ctxt in MM, TODO: Refactor names when its used
#define ACTIVE_CAM globalCtx->cameraPtrs[globalCtx->activeCamera]
#define SET_NEXT_GAMESTATE(curState, newInit, newStruct) \
(curState)->nextGameStateInit = (GameStateFunc)newInit; \
(curState)->nextGameStateSize = sizeof(newStruct);
#endif // _MACROS_H_

103
include/regs.h Normal file
View File

@ -0,0 +1,103 @@
/* Header taken as placeholder from OoT sister project */
/* Confirm as needed */
#ifndef _REGS_H_
#define _REGS_H_
#define REG_GROUPS 29 // number of REG groups, i.e. REG, SREG, OREG, etc.
#define REG_PAGES 6
#define REG_PER_PAGE 16
#define REG_PER_GROUP REG_PAGES * REG_PER_PAGE
/* We probably want a better name for gStaticContext based on OoT discussions */
#define BASE_REG(n, r) gStaticContext->data[n * REG_PER_GROUP + r]
#define REG(r) BASE_REG(0, r)
#define SREG(r) BASE_REG(1, r)
#define OREG(r) BASE_REG(2, r)
#define PREG(r) BASE_REG(3, r)
#define QREG(r) BASE_REG(4, r)
#define MREG(r) BASE_REG(5, r)
#define YREG(r) BASE_REG(6, r)
#define DREG(r) BASE_REG(7, r)
#define UREG(r) BASE_REG(8, r)
#define IREG(r) BASE_REG(9, r)
#define ZREG(r) BASE_REG(10, r)
#define CREG(r) BASE_REG(11, r)
#define NREG(r) BASE_REG(12, r)
#define KREG(r) BASE_REG(13, r)
#define XREG(r) BASE_REG(14, r)
#define cREG(r) BASE_REG(15, r)
#define sREG(r) BASE_REG(16, r)
#define iREG(r) BASE_REG(17, r)
#define WREG(r) BASE_REG(18, r)
#define AREG(r) BASE_REG(19, r)
#define VREG(r) BASE_REG(20, r)
#define HREG(r) BASE_REG(21, r)
#define GREG(r) BASE_REG(22, r)
#define mREG(r) BASE_REG(23, r)
#define nREG(r) BASE_REG(24, r)
#define BREG(r) BASE_REG(25, r)
#define dREG(r) BASE_REG(26, r)
#define kREG(r) BASE_REG(27, r)
#define bREG(r) BASE_REG(28, r)
/* TODO: Actually confirm these, in case of miss-match it's at least a simple list to `sed` */
#define R_ENABLE_ARENA_DBG SREG(0)
#define R_RUN_SPEED_LIMIT REG(45)
#define R_UPDATE_RATE SREG(30)
#define R_PAUSE_MENU_MODE SREG(94)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
#define R_START_LABEL_DD(i) ZREG(48 + i)
#define R_START_LABEL_Y(i) ZREG(51 + i)
#define R_START_LABEL_X(i) ZREG(54 + i)
#define R_C_UP_BTN_X ZREG(62)
#define R_C_UP_BTN_Y ZREG(63)
#define R_START_BTN_X ZREG(68)
#define R_START_BTN_Y ZREG(69)
#define R_ITEM_BTN_X(i) ZREG(70 + i)
#define R_ITEM_BTN_Y(i) ZREG(74 + i)
#define R_ITEM_BTN_DD(i) ZREG(78 + i)
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
#define R_A_BTN_Y XREG(16)
#define R_A_BTN_X XREG(17)
#define R_A_ICON_Y XREG(19)
#define R_A_ICON_X XREG(20)
#define R_A_BTN_COLOR(i) XREG(22 + i)
#define R_MAGIC_BAR_SMALL_Y XREG(48)
#define R_MAGIC_BAR_X XREG(49)
#define R_MAGIC_BAR_LARGE_Y XREG(50)
#define R_MAGIC_FILL_X XREG(51)
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_MINIMAP_TOGGLED WREG(31)
#define R_B_LABEL_X(i) WREG(40 + i)
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
#define R_COMPASS_SCALE_X VREG(14)
#define R_COMPASS_SCALE_Y VREG(15)
#define R_COMPASS_OFFSET_X VREG(16)
#define R_COMPASS_OFFSET_Y VREG(17)
#define R_MINIMAP_COLOR(i) VREG(18 + i)
#define R_ITEM_AMMO_X(i) VREG(64 + i)
#define R_ITEM_AMMO_Y(i) VREG(68 + i)
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
#define R_FB_FILTER_TYPE SREG(80)
#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
#define R_FB_FILTER_A SREG(84)
#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
#endif

View File

@ -496,11 +496,13 @@ typedef struct {
/* 0x2B8 */ DispBuf polyXlu;
/* 0x2C8 */ s32 displaylistCounter;
/* 0x2CC */ void* framebuffer;
/* 0x2D0 */ UNK_TYPE1 pad2D0[0xB];
/* 0x2D0 */ int pad2D0;
/* 0x2D4 */ u32 viConfigFeatures;
/* 0x2D8 */ UNK_TYPE1 gap2D8[0x3];
/* 0x2DB */ u8 framebufferCounter;
/* 0x2DC */ UNK_TYPE1 pad2DC[0x8];
/* 0x2E4 */ f32 unk2E4;
/* 0x2E8 */ f32 unk2E8;
/* 0x2E4 */ f32 viConfigXScale;
/* 0x2E8 */ f32 viConfigYScale;
/* 0x2EC */ UNK_TYPE1 pad2EC[0x4];
} GraphicsContext; // size = 0x2F0
@ -2134,11 +2136,12 @@ struct GameAlloc {
/* 0x10 */ GameAllocNode* head;
}; // size = 0x14
typedef void (*GameStateFunc)(struct GameState* gameState);
struct GameState {
/* 0x00 */ GraphicsContext* gfxCtx;
/* 0x04 */ func_ptr main;
/* 0x08 */ func_ptr destroy;
/* 0x0C */ func_ptr nextGameStateInit;
/* 0x04 */ GameStateFunc main;
/* 0x08 */ GameStateFunc destroy;
/* 0x0C */ GameStateFunc nextGameStateInit;
/* 0x10 */ u32 nextGameStateSize;
/* 0x14 */ Input input[4];
/* 0x74 */ GameStateHeap heap;
@ -3100,5 +3103,27 @@ struct ActorBgIknvObj {
/* 0x1AC */ actor_func updateFunc;
}; // size = 0x1B0
typedef struct {
/* 0x00 */ u32 type;
/* 0x04 */ u32 setScissor;
/* 0x08 */ ColorRGBA8 color;
/* 0x0C */ ColorRGBA8 envColor;
} struct_801F8010; // size = 0x10
typedef struct {
/* 0x00 */ u32 useRgba;
/* 0x04 */ u32 setScissor;
/* 0x08 */ ColorRGBA8 primColor;
/* 0x08 */ ColorRGBA8 envColor;
} struct_801F8020; // size = 0x10
typedef struct {
/* 0x00 */ u32 unk_00;
/* 0x04 */ u32 setScissor;
/* 0x08 */ ColorRGBA8 primColor;
/* 0x0C */ ColorRGBA8 envColor;
/* 0x10 */ u16* tlut;
/* 0x14 */ Gfx* monoDl;
} VisMono; // size = 0x18
#endif

View File

@ -2319,12 +2319,12 @@ extern UNK_TYPE2 D_801D14E0; // D_801D14E0
extern UNK_TYPE2 D_801D14E4; // D_801D14E4
extern UNK_TYPE2 D_801D14E8; // D_801D14E8
extern UNK_TYPE4 D_801D14F0; // D_801D14F0
extern UNK_TYPE4 gFramerateDivisor; // D_801D1500
extern s32 gFramerateDivisor; // D_801D1500
extern f32 gFramerateDivisorF; // D_801D1504
extern f32 gFramerateDivisorHalf; // D_801D1508
extern f32 gFramerateDivisorThird; // D_801D150C
extern UNK_TYPE4 D_801D1510; // D_801D1510
extern UNK_TYPE4 D_801D1514; // D_801D1514
extern u32 D_801D1510; // D_801D1510
extern u32 D_801D1514[3]; // D_801D1514
extern s32 gScreenWidth; // D_801D1520
extern s32 gScreenHeight; // D_801D1524
extern UNK_TYPE4 startHeapSize; // D_801D1528
@ -4098,9 +4098,9 @@ extern StackEntry slowlyStackEntry; // D_801F6FC8
extern u8 slowlyStack[4096]; // D_801F6FE8
extern UNK_TYPE1 D_801F7FE8; // D_801F7FE8
extern UNK_TYPE1 D_801F7FF0; // D_801F7FF0
extern UNK_TYPE1 D_801F8010; // D_801F8010
extern UNK_TYPE1 D_801F8020; // D_801F8020
extern UNK_TYPE1 D_801F8030; // D_801F8030
extern struct_801F8010 D_801F8010; // D_801F8010
extern struct_801F8020 D_801F8020; // D_801F8020
extern VisMono sMonoColors; // sMonoColors
extern UNK_TYPE1 D_801F8048; // D_801F8048
extern FaultAddrConvClient grapgFaultAddrConvClient; // D_801F80D0
extern FaultClient graphFaultClient; // D_801F80E0
@ -4138,8 +4138,8 @@ extern UNK_TYPE1 D_801FBAD0; // D_801FBAD0
extern UNK_TYPE1 D_801FBAD4; // D_801FBAD4
extern UNK_TYPE1 D_801FBAE0; // D_801FBAE0
extern UNK_TYPE1 D_801FBAE8; // D_801FBAE8
extern u64 D_801FBAF0; // D_801FBAF0
extern u64 lastRenderFrameDuration; // D_801FBAF8
extern volatile OSTime D_801FBAF0; // D_801FBAF0
extern volatile OSTime lastRenderFrameDuration; // D_801FBAF8
extern UNK_TYPE1 D_801FBB00; // D_801FBB00
extern UNK_TYPE1 D_801FBB04; // D_801FBB04
extern UNK_TYPE1 D_801FBB08; // D_801FBB08

View File

@ -416,7 +416,8 @@ SECTIONS
build/asm/code_0x80172A00.o(.text)
build/asm/code_0x80172BC0.o(.text)
build/asm/code_0x80172C30.o(.text)
build/asm/game.o(.text)
build/src/code/title_setup.o(.text)
build/src/code/game.o(.text)
build/asm/gamealloc.o(.text)
build/asm/graph.o(.text)
build/asm/code_0x80174A40.o(.text)
@ -515,7 +516,7 @@ SECTIONS
build/asm/code_data_z_play.o(.text)
build/asm/code_data_z_play_hireso.o(.text)
build/asm/code_data_0x80172C30.o(.text)
build/asm/code_data_game.o(.text)
build/src/code/game.o(.data)
build/asm/code_data_graph.o(.text)
build/asm/code_data_padmgr.o(.text)
build/asm/code_data_speed_meter.o(.text)
@ -587,7 +588,7 @@ SECTIONS
build/asm/code_rodata_PreRender.o(.text)
build/asm/code_rodata_0x80172BC0.o(.text)
build/asm/code_rodata_0x80172C30.o(.text)
build/asm/code_rodata_game.o(.text)
build/src/code/game.o(.rodata)
build/asm/code_rodata_graph.o(.text)
build/asm/code_rodata_main.o(.text)
build/asm/code_rodata_padmgr.o(.text)

262
src/code/game.c Normal file
View File

@ -0,0 +1,262 @@
#include <ultra64.h>
#include <global.h>
s32 gFramerateDivisor = 1;
f32 gFramerateDivisorF = 1.0f;
f32 gFramerateDivisorHalf = 1.0f / 2.0f;
f32 gFramerateDivisorThird = 1.0f / 3.0f;
u32 D_801D1510 = 0x0000000A;
u32 D_801D1514[3] = { 0 };
void Game_UpdateFramerateVariables(s32 divisor) {
gFramerateDivisor = divisor;
gFramerateDivisorF = (f32) divisor;
gFramerateDivisorHalf = (f32) (divisor * 0.5f);
gFramerateDivisorThird = (f32) (divisor / 3.0f);
}
void Game_SetFramerateDivisor(GameState *gameState, s32 divisor) {
R_UPDATE_RATE = (s16) divisor;
gameState->framerateDivisor = divisor;
Game_UpdateFramerateVariables(divisor);
}
void GameState_SetFBFilter(Gfx** gfx, u32 arg1) {
Gfx* _gfx = *gfx;
if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) {
D_801F8010.type = R_FB_FILTER_TYPE;
D_801F8010.color.red = R_FB_FILTER_PRIM_COLOR(0);
D_801F8010.color.green = R_FB_FILTER_PRIM_COLOR(1);
D_801F8010.color.blue = R_FB_FILTER_PRIM_COLOR(2);
D_801F8010.color.alpha = R_FB_FILTER_A;
func_80140D10(&D_801F8010, &_gfx, arg1);
} else {
if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
D_801F8020.useRgba = (R_FB_FILTER_TYPE == 6);
D_801F8020.primColor.red = R_FB_FILTER_PRIM_COLOR(0);
D_801F8020.primColor.green = R_FB_FILTER_PRIM_COLOR(1);
D_801F8020.primColor.blue = R_FB_FILTER_PRIM_COLOR(2);
D_801F8020.primColor.alpha = R_FB_FILTER_A;
D_801F8020.envColor.red = R_FB_FILTER_ENV_COLOR(0);
D_801F8020.envColor.green = R_FB_FILTER_ENV_COLOR(1);
D_801F8020.envColor.blue = R_FB_FILTER_ENV_COLOR(2);
D_801F8020.envColor.alpha = R_FB_FILTER_A;
func_80142100(&D_801F8020, &_gfx, arg1);
} else {
if (R_FB_FILTER_TYPE == 7) {
sMonoColors.unk_00 = 0;
sMonoColors.primColor.red = R_FB_FILTER_PRIM_COLOR(0);
sMonoColors.primColor.green = R_FB_FILTER_PRIM_COLOR(1);
sMonoColors.primColor.blue = R_FB_FILTER_PRIM_COLOR(2);
sMonoColors.primColor.alpha = R_FB_FILTER_A;
sMonoColors.envColor.red = R_FB_FILTER_ENV_COLOR(0);
sMonoColors.envColor.green = R_FB_FILTER_ENV_COLOR(1);
sMonoColors.envColor.blue = R_FB_FILTER_ENV_COLOR(2);
sMonoColors.envColor.alpha = R_FB_FILTER_A;
VisMono_Draw(&sMonoColors, &_gfx, arg1);
}
}
}
*gfx = _gfx;
}
void Game_Nop80173534(GameState *ctxt) {
;
}
void GameState_Draw(GameState *ctxt, GraphicsContext *gCtxt) {
Gfx* nextDisplayList;
Gfx* _polyOpa;
// Unused vars impact regalloc
Gfx* temp_t2;
u32 temp_v1;
_polyOpa = gCtxt->polyOpa.p;
nextDisplayList = Graph_GfxPlusOne(gCtxt->polyOpa.p);
gSPDisplayList(gCtxt->overlay.p++, nextDisplayList);
if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) {
GameState_SetFBFilter(&nextDisplayList, (u32) gCtxt->zbuffer);
}
if (R_ENABLE_ARENA_DBG < 0) {
R_ENABLE_ARENA_DBG = 0;
}
gSPEndDisplayList(nextDisplayList++);
Graph_BranchDlist(_polyOpa, nextDisplayList);
gCtxt->polyOpa.p = nextDisplayList;
lblUnk:; // Label prevents reordering, if(1) around the above block don't seem to help unlike in OoT
func_800E9F78(gCtxt);
if (R_ENABLE_ARENA_DBG != 0) {
SpeedMeter_DrawTimeEntries(&D_801F7FF0, gCtxt);
SpeedMeter_DrawAllocEntries(&D_801F7FF0, gCtxt, ctxt);
}
}
void Game_ResetSegments(GraphicsContext *gCtxt) {
gSPSegment(gCtxt->polyOpa.p++, 0, 0);
gSPSegment(gCtxt->polyOpa.p++, 0xF, gCtxt->framebuffer);
gSPSegment(gCtxt->polyXlu.p++, 0, 0);
gSPSegment(gCtxt->polyXlu.p++, 0xF, gCtxt->framebuffer);
gSPSegment(gCtxt->overlay.p++, 0, 0);
gSPSegment(gCtxt->overlay.p++, 0xF, gCtxt->framebuffer);
}
void func_801736DC(GraphicsContext *gCtxt) {
Gfx* nextDisplayList;
Gfx* _polyOpa;
nextDisplayList = Graph_GfxPlusOne(_polyOpa = gCtxt->polyOpa.p);
gSPDisplayList(gCtxt->overlay.p++, nextDisplayList);
gSPEndDisplayList(nextDisplayList++);
Graph_BranchDlist(_polyOpa, nextDisplayList);
gCtxt->polyOpa.p = nextDisplayList;
}
void Game_UpdateInput(GameState *ctxt) {
Padmgr_GetInput(ctxt->input, 1);
}
void Game_Update(GameState *ctxt) {
GraphicsContext* _gCtx;
_gCtx = ctxt->gfxCtx;
Game_ResetSegments(ctxt->gfxCtx);
ctxt->main(ctxt);
if (R_PAUSE_MENU_MODE != 2) {
GameState_Draw(ctxt, _gCtx);
func_801736DC(_gCtx);
}
}
void Game_IncrementFrameCount(GameState *ctxt) {
Game_Nop80173534(ctxt);
ctxt->frames++;
}
void Game_InitHeap(GameState *ctxt, u32 size) {
GameState *_ctx;
void *buf;
_ctx = ctxt;
buf = Gamealloc_Alloc(&_ctx->alloc, size);
if (buf) {
GameStateHeap_Init(&ctxt->heap, buf, size);
return;
}
GameStateHeap_Init(&ctxt->heap, NULL, 0);
assert_fail("../game.c", 0x40B);
}
void Game_ResizeHeap(GameState *ctxt, u32 size)
{
GameAlloc *alloc;
void *buf;
u32 systemMaxFree;
u32 bytesFree;
u32 bytesAllocated;
void *heapStart;
heapStart = ctxt->heap.heapStart;
alloc = &ctxt->alloc;
GameStateHeap_Clear(&ctxt->heap);
Gamealloc_Free(alloc, heapStart);
StartHeap_AnalyzeArena(&systemMaxFree, &bytesFree, &bytesAllocated);
size = ((systemMaxFree - (sizeof(ArenaNode))) < size) ? (0) : (size);
if (!size)
{
size = systemMaxFree - (sizeof(ArenaNode));
}
if (buf = Gamealloc_Alloc(alloc, size))
{
GameStateHeap_Init(&ctxt->heap, buf, size);
}
else
{
GameStateHeap_Init(&ctxt->heap, 0, 0);
assert_fail("../game.c", 0x432);
}
}
void Game_StateInit(GameState *ctxt, GameStateFunc gameStateInit, GraphicsContext *gCtxt) {
ctxt->gfxCtx = gCtxt;
ctxt->frames = 0U;
ctxt->main = NULL;
ctxt->destroy = NULL;
ctxt->running = 1;
gCtxt->unk274 = D_801FBB88;
gCtxt->viConfigFeatures = gViConfigFeatures;
gCtxt->viConfigXScale = gViConfigXScale;
gCtxt->viConfigYScale = gViConfigYScale;
ctxt->nextGameStateInit = NULL;
ctxt->nextGameStateSize = 0U;
lblUnk:;
Gamealloc_Init(&ctxt->alloc);
Game_InitHeap(ctxt, 0x100000);
Game_SetFramerateDivisor(ctxt, 3);
gameStateInit(ctxt);
func_80140CE0(&D_801F8010);
func_801420C0(&D_801F8020);
func_801418B0(&sMonoColors);
func_80140898(&D_801F8048);
func_801773A0(&D_801F7FF0);
func_8013ED9C();
osSendMesg(&ctxt->gfxCtx->unk5C, NULL, 1);
}
void Game_StateFini(GameState *ctxt) {
func_80172BC0();
func_8019E014();
osRecvMesg(&ctxt->gfxCtx->unk5C, 0, 1);
if (ctxt->destroy != 0) {
ctxt->destroy(ctxt);
}
func_8013EDD0();
func_801773C4(&D_801F7FF0);
func_80140D04(&D_801F8010);
func_801420F4(&D_801F8020);
func_80141900(&sMonoColors);
func_80140900(&D_801F8048);
GameStateHeap_Clear(&ctxt->heap);
Gamealloc_FreeAll(&ctxt->alloc);
}
GameStateFunc Game_GetNextStateInit(GameState *ctxt) {
return ctxt->nextGameStateInit;
}
u32 Game_GetNextStateSize(GameState *ctxt) {
return ctxt->nextGameStateSize;
}
u32 Game_GetShouldContinue(GameState *ctxt) {
return ctxt->running;
}
s32 Game_GetHeapFreeSize(GameState *ctxt) {
return GameStateHeap_GetFreeSize(&ctxt->heap);
}
s32 func_80173B48(GameState *ctxt) {
s32 result;
result = OS_CYCLES_TO_NSEC(ctxt->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(D_801FBAF0);
return result;
}

66
src/code/title_setup.c Normal file
View File

@ -0,0 +1,66 @@
#include <ultra64.h>
#include <global.h>
void TitleSetup_GameStateResetContext(void) {
XREG(2) = 0;
XREG(10) = 0x1A;
XREG(11) = 0x14;
XREG(12) = 0xE;
XREG(13) = 0;
XREG(31) = 0;
XREG(41) = 0x50;
XREG(43) = 0xFFFFFC54;
XREG(44) = 0xD7;
XREG(45) = 0xDA;
XREG(68) = 0x61;
XREG(69) = 0x93;
XREG(70) = 0x28;
XREG(73) = 0x1E;
XREG(74) = 0x42;
XREG(75) = 0x1E;
XREG(76) = 0x1C;
XREG(77) = 0x3C;
XREG(78) = 0x2F;
XREG(79) = 0x62;
XREG(87) = 0;
XREG(88) = 0x56;
XREG(89) = 0x258;
XREG(90) = 0x1C2;
XREG(91) = 0;
XREG(94) = 0;
XREG(95) = 0;
YREG(32) = 0x50;
YREG(33) = 0x3C;
YREG(34) = 0xDC;
YREG(35) = 0x3C;
YREG(36) = 0x50;
YREG(37) = 0xA0;
YREG(38) = 0xDC;
YREG(39) = 0xA0;
YREG(40) = 0x8E;
YREG(41) = 0x6C;
YREG(42) = 0xCC;
YREG(43) = 0xB1;
}
void TitleSetup_InitImpl(GameState *gameState) {
func_80185908();
func_800E9360();
TitleSetup_GameStateResetContext();
gameState->running = 0;
setNextGamestate:; // This label is probably a leftover of a debug ifdef, it's essential to not have gameState->running reordered!
SET_NEXT_GAMESTATE(gameState, &Title_Init, TitleContext);
}
void TitleSetup_Destroy(GameState *gameState) {
;
}
void TitleSetup_Init(GameState *gameState) {
gameState->destroy = &TitleSetup_Destroy;
TitleSetup_InitImpl(gameState);
}

View File

@ -43,8 +43,8 @@ void PreNMI_Main(PreNMIContext* prenmiCtx) {
void PreNMI_Destroy(PreNMIContext* prenmiCtx) {}
void PreNMI_Init(PreNMIContext* prenmiCtx) {
prenmiCtx->state.main = (func_ptr)PreNMI_Main;
prenmiCtx->state.destroy = (func_ptr)PreNMI_Destroy;
prenmiCtx->state.main = (GameStateFunc)PreNMI_Main;
prenmiCtx->state.destroy = (GameStateFunc)PreNMI_Destroy;
prenmiCtx->timer = 30;
prenmiCtx->unkA8 = 10;

View File

@ -1307,7 +1307,7 @@ GLOBAL_ASM("asm/non_matchings/z_rcp/func_8012CF0C.asm")
#endif
void func_8012D374(GraphicsContext* gCtxt, u8 r, u8 g, u8 b) {
if ((gStaticContext->data[0xbe] < 2) && (D_801F6D10 < 2)) {
if ((R_PAUSE_MENU_MODE < 2) && (D_801F6D10 < 2)) {
func_8012CF0C(gCtxt, 1, 1, r, g, b);
}
else {

View File

@ -1527,7 +1527,7 @@
0x800E8FA4:("func_800E8FA4","s32","Actor* actor, Vec3f* param_2, Vec3s* param_3, Vec3s* param_4"),
0x800E9138:("func_800E9138","s32","GlobalContext* ctxt, Actor* actor, Vec3s* param_3, Vec3s* param_4, f32 param_5"),
0x800E9250:("func_800E9250","s32","GlobalContext* ctxt, Actor* actor, Vec3s* param_3, Vec3s* param_4, Vec3f param_5"),
0x800E9360:("func_800E9360","void","void"),
0x800E9360:("func_800E9360","u8","void"),
0x800E93E0:("static_context_init","void","void"),
0x800E9470:("func_800E9470","void","void"),
0x800E9488:("func_800E9488","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE1 param_10, UNK_TYPE1 param_11, UNK_TYPE1 param_12, UNK_TYPE1 param_13, UNK_TYPE2 param_14, UNK_TYPE4 param_15"),
@ -2757,13 +2757,13 @@
0x8014026C:("func_8014026C","void","OSViMode* param_1, UNK_TYPE1 param_2, int param_3, int param_4, int param_5, int param_6, int param_7, int param_8, UNK_TYPE4 param_9, int param_10, short param_11, unsigned int param_12, UNK_TYPE4 param_13"),
0x80140730:("func_80140730","void","void"),
0x80140810:("func_80140810","void","void"),
0x80140898:("func_80140898","void","void"),
0x80140900:("func_80140900","void","void"),
0x80140898:("func_80140898","void","void* arg0"),
0x80140900:("func_80140900","void","void* arg0"),
0x8014090C:("func_8014090C","void","void"),
0x80140970:("func_80140970","void","void"),
0x80140CE0:("func_80140CE0","void","void"),
0x80140D04:("func_80140D04","void","void"),
0x80140D10:("func_80140D10","void","void"),
0x80140CE0:("func_80140CE0","void","void* arg0"),
0x80140D04:("func_80140D04","void","void* arg0"),
0x80140D10:("func_80140D10","void","void* arg0, Gfx** gfx, u32 arg2"),
0x80140E80:("func_80140E80","void","void* param_1"),
0x80140EA0:("func_80140EA0","void","void"),
0x80140EAC:("func_80140EAC","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6"),
@ -2774,15 +2774,15 @@
0x8014151C:("func_8014151C","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6"),
0x80141678:("func_80141678","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
0x80141778:("func_80141778","void","void"),
0x801418B0:("func_801418B0","void","void"),
0x80141900:("func_80141900","void","void"),
0x801418B0:("func_801418B0","void","void* arg0"),
0x80141900:("func_80141900","void","void* arg0"),
0x80141924:("func_80141924","void","void"),
0x80141C34:("func_80141C34","void","void"),
0x80141E60:("func_80141E60","void","void"),
0x80141E60:("VisMono_Draw","void","void* arg0, Gfx** gfx, u32 arg2"),
0x8014204C:("func_8014204C","void","void"),
0x801420C0:("func_801420C0","void","void"),
0x801420F4:("func_801420F4","void","void"),
0x80142100:("func_80142100","void","void"),
0x801420C0:("func_801420C0","void","void* arg0"),
0x801420F4:("func_801420F4","void","void* arg0"),
0x80142100:("func_80142100","void","void* arg0, Gfx** gfx, u32 arg2"),
0x80142440:("func_80142440","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9"),
0x80143148:("func_80143148","void","void"),
0x801431E8:("func_801431E8","void","void"),
@ -3118,15 +3118,15 @@
0x80172ED0:("Audio_ThreadEntry","void","AudioThreadStruct* audio"),
0x80173048:("Audio_WaitForInit","void","AudioThreadStruct* param_1"),
0x80173074:("Audio_Start","void","AudioThreadStruct* audio, s32* audioThreadStackEnd, OSPri pri, OSId id, SchedThreadStruct* sched, IrqMgr* irq"),
0x80173130:("func_80173130","void","void"),
0x801732DC:("Initial_Init2","void","GameState* ctxt"),
0x8017332C:("Initial_Fini","void","void"),
0x80173338:("Initial_Init","void","GameState* ctxt"),
0x80173130:("TitleSetup_GameStateResetContext","void","void"),
0x801732DC:("TitleSetup_InitImpl","void","GameState* gameState"),
0x8017332C:("TitleSetup_Destroy","void","GameState* gameState"),
0x80173338:("TitleSetup_Init","void","GameState* gameState"),
0x80173360:("Game_UpdateFramerateVariables","void","s32 divisor"),
0x801733A8:("Game_SetFramerateDivisor","void","GameState* iParm1, u32 divisor"),
0x801733DC:("func_801733DC","void","void"),
0x801733A8:("Game_SetFramerateDivisor","void","GameState* gameState, s32 divisor"),
0x801733DC:("GameState_SetFBFilter","void","Gfx** gfx, u32 arg1"),
0x80173534:("Game_Nop80173534","void","GameState* ctxt"),
0x80173540:("func_80173540","void","GameState* ctxt, GraphicsContext* gCtxt"),
0x80173540:("GameState_Draw","void","GameState* ctxt, GraphicsContext* gCtxt"),
0x80173644:("Game_ResetSegments","void","GraphicsContext* gCtxt"),
0x801736DC:("func_801736DC","void","GraphicsContext* gCtxt"),
0x80173754:("Game_UpdateInput","void","GameState* ctxt"),
@ -3134,13 +3134,13 @@
0x801737E4:("Game_IncrementFrameCount","void","GameState* ctxt"),
0x80173810:("Game_InitHeap","void","GameState* ctxt, u32 size"),
0x80173880:("Game_ResizeHeap","void","GameState* ctxt, u32 size"),
0x80173950:("Game_StateInit","void","GameState* ctxt, func_ptr gameStateInit, GraphicsContext* gCtxt"),
0x80173950:("Game_StateInit","void","GameState* ctxt, GameStateFunc gameStateInit, GraphicsContext* gCtxt"),
0x80173A50:("Game_StateFini","void","GameState* ctxt"),
0x80173B00:("Game_GetNextStateInit","UNK_TYPE4","GameState* ctxt"),
0x80173B00:("Game_GetNextStateInit","GameStateFunc","GameState* ctxt"),
0x80173B0C:("Game_GetNextStateSize","u32","GameState* ctxt"),
0x80173B18:("Game_GetShouldContinue","u32","GameState* ctxt"),
0x80173B24:("Game_GetHeapFreeSize","void","GameState* ctxt"),
0x80173B48:("func_80173B48","int","GameState* ctxt"),
0x80173B24:("Game_GetHeapFreeSize","s32","GameState* ctxt"),
0x80173B48:("func_80173B48","s32","GameState* ctxt"),
0x80173BF0:("func_80173BF0","GameAlloc*","GameAlloc* heap"),
0x80173C10:("Gamealloc_Alloc","void*","GameAlloc* heap, u32 size"),
0x80173C7C:("Gamealloc_Free","void","GameAlloc* heap, void* ptr"),
@ -3219,12 +3219,12 @@
0x80177280:("func_80177280","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12"),
0x801772A0:("Sched_Start","void","SchedThreadStruct* sched, void* stack, OSPri pri, UNK_TYPE4 param_4, UNK_TYPE4 param_5, IrqMgr* irqmgrStruct"),
0x80177390:("func_80177390","void","void"),
0x801773A0:("func_801773A0","void","void"),
0x801773C4:("func_801773C4","void","void"),
0x801773D0:("func_801773D0","void","void"),
0x801773A0:("func_801773A0","void","void* arg0"),
0x801773C4:("func_801773C4","void","void* arg0"),
0x801773D0:("SpeedMeter_DrawTimeEntries","void","void* displayList, GraphicsContext* gCtx"),
0x80177A84:("func_80177A84","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9"),
0x80177AC8:("func_80177AC8","void","void"),
0x80177E58:("func_80177E58","void","void"),
0x80177E58:("SpeedMeter_DrawAllocEntries","void","void* displayList, GraphicsContext *gCtx, GameState *ctx"),
0x801780F0:("func_801780F0","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7"),
0x801781EC:("func_801781EC","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
0x8017842C:("func_8017842C","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11"),
@ -3452,7 +3452,7 @@
0x801857C0:("func_801857C0","void","void"),
0x801857D0:("func_801857D0","char*","void"),
0x80185864:("func_80185864","void","void"),
0x80185908:("func_80185908","void","void"),
0x80185908:("func_80185908","u32","void"),
0x80185968:("func_80185968","void","void"),
0x801859F0:("func_801859F0","void","void"),
0x80185A2C:("func_80185A2C","void","void"),

View File

@ -4217,9 +4217,9 @@
0x801F6FE8:("slowlyStack","u8","[4096]",0x1000),
0x801F7FE8:("D_801F7FE8","UNK_TYPE1","",0x1),
0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x1),
0x801F8010:("D_801F8010","UNK_TYPE1","",0x1),
0x801F8020:("D_801F8020","UNK_TYPE1","",0x1),
0x801F8030:("D_801F8030","UNK_TYPE1","",0x1),
0x801F8010:("D_801F8010","struct_801F8010","",0x10),
0x801F8020:("D_801F8020","struct_801F8020","",0x10),
0x801F8030:("sMonoColors","VisMono","",0x18),
0x801F8048:("D_801F8048","UNK_TYPE1","",0x1),
0x801F80D0:("grapgFaultAddrConvClient","FaultAddrConvClient","",0xc),
0x801F80E0:("graphFaultClient","FaultClient","",0x10),
@ -4257,8 +4257,8 @@
0x801FBAD4:("D_801FBAD4","UNK_TYPE1","",0x1),
0x801FBAE0:("D_801FBAE0","UNK_TYPE1","",0x1),
0x801FBAE8:("D_801FBAE8","UNK_TYPE1","",0x1),
0x801FBAF0:("D_801FBAF0","u64","",0x8),
0x801FBAF8:("lastRenderFrameDuration","u64","",0x8),
0x801FBAF0:("D_801FBAF0","volatile OSTime","",0x8),
0x801FBAF8:("lastRenderFrameDuration","volatile OSTime","",0x8),
0x801FBB00:("D_801FBB00","UNK_TYPE1","",0x1),
0x801FBB04:("D_801FBB04","UNK_TYPE1","",0x1),
0x801FBB08:("D_801FBB08","UNK_TYPE1","",0x1),

23
tools/regconvert.py Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env python3
import argparse
GROUP_SIZE = 0x60
DATA_OFFSET = 0x14
REGISTER_NAMES = " SOPQMYDUIZCNKXcsiWAVHGmnBdkb"
def get_reg_macro(offset):
reg = (offset - DATA_OFFSET) // 2
group = reg // GROUP_SIZE
reg_in_group = reg % GROUP_SIZE
return "%cREG(%d)\n" % (REGISTER_NAMES[group], reg_in_group)
def main():
parser = argparse.ArgumentParser(description="Converts a GameInfo offset to a REG macro.")
parser.add_argument("offset", help="offset to GameInfo in hexadecimal")
args = parser.parse_args()
print(get_reg_macro(int(args.offset, 16)))
if __name__ == "__main__":
main()

View File

@ -379,7 +379,7 @@ D_801F7FE8 = code_bss_start + 0x00014048;
D_801F7FF0 = code_bss_start + 0x00014050;
D_801F8010 = code_bss_start + 0x00014070;
D_801F8020 = code_bss_start + 0x00014080;
D_801F8030 = code_bss_start + 0x00014090;
sMonoColors = code_bss_start + 0x00014090;
D_801F8048 = code_bss_start + 0x000140A8;
grapgFaultAddrConvClient = code_bss_start + 0x00014130;
graphFaultClient = code_bss_start + 0x00014140;