x64 and hsfload improvements, build every REL (#582)

* Port some of hsfload.c

* More byteswaps in hsfload.c

* Finish hsfload besides cenv

* hsfload fixes

* Some x64 improvements

* More x64 improvements

* 64 bit improvements

* Link in lots of files

* Fix armem bug

* Fix dll killing, load modeseldll

* Fixes, clearing TODOs

* Tons of warning/error fixes

* Linux build fixes

* Add -fPIC flag to fix build on x64 linux

* GXSETARRAY sizes and misc fixes

* More fixes

* Build all RELs

* Implement C_Quat functions

* Fix PAL build
This commit is contained in:
Dávid Balatoni 2025-04-14 18:02:42 +02:00 committed by GitHub
parent bc19d2263b
commit 34cf507e3f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
186 changed files with 3256 additions and 1540 deletions

View file

@ -2,6 +2,7 @@
#define _GAME_AUDIO_H
#include "dolphin.h"
#include "version.h"
typedef struct sndGrpTbl_s {
s16 ovl;
@ -74,6 +75,6 @@ extern float Snd3DDistOffset;
extern s32 musicOffF;
extern u8 fadeStat;
extern SNDGRPTBL sndGrpTable[];
SHARED_SYM extern SNDGRPTBL sndGrpTable[];
#endif

View file

@ -3,6 +3,8 @@
#include "dolphin.h"
void BoardLandBlueExec(s32 player, s32 space);
void BoardLandRedExec(s32 player, s32 space);
void BoardEventLandBlue(s32, s32);
void BoardEventLandRed(s32, s32);
s8 BoardCoinChgCreate(Vec*, s8);

View file

@ -8,10 +8,6 @@ s16 BoardBooCreate(s32 arg0, Vec *arg1);
void BoardBooKill(void);
s32 BoardBooStealTypeSet(s32 arg0);
s32 BoardBooStealMain(void);
BOOL CheckBallCoinDone(void);
void TakeBallStar(void);
void ExecTakeBallStar(omObjData *arg0);
BOOL CheckTakeBallStarDone(void);
s32 BoardBooStealValueGet(s16 *arg0, s16 *arg1);
BOOL BoardBooStealLightCheck(void);

View file

@ -8,6 +8,7 @@ void BoardBooHouseHostSet(s16);
s16 BoardBooHouseHostGet(void);
void BoardBooHouseCreate(void);
void BoardBooHouseExec(s32);
void BoardBooHouseKill(void);
s32 BoardBooComUseCheck(s32);
void BoardBooHouseTutorialExec(void);

View file

@ -0,0 +1,8 @@
#ifndef _BOARD_BOWSER_H
#define _BOARD_BOWSER_H
#include "game/process.h"
void BoardBowserExec(s32 player, s32 space);
#endif

View file

@ -0,0 +1,8 @@
#ifndef _BOARD_FORTUNE_H
#define _BOARD_FORTUNE_H
#include "game/process.h"
void BoardFortuneExec(s32 player, s32 space);
#endif

View file

@ -6,5 +6,8 @@
void BoardItemStart(s32 arg0, s32 arg1);
BOOL BoardItemDoneCheck(void);
void BoardItemBagItemSet(s16 *arg0);
#ifndef __MWERKS__
void BoardItemPlayerRestore(s32 arg0, s32 arg1);
#endif
#endif

View file

@ -1,72 +1,73 @@
#ifndef _BOARD_MAIN_H
#define _BOARD_MAIN_H
#include "dolphin.h"
#include "game/data.h"
#include "game/gamework_data.h"
#include "game/object.h"
#include "game/data.h"
#include "dolphin.h"
#define BOARD_ID_MAIN1 0 //TOADS_MIDWAY_MADNESS
#define BOARD_ID_MAIN2 1 //GOOMBAS_GREEDY_GALA
#define BOARD_ID_MAIN3 2 //SHY_GUYS_JUNGLE_JAM
#define BOARD_ID_MAIN4 3 //BOOS_HAUNTED_BASH
#define BOARD_ID_MAIN5 4 //KOOPAS_SEASIDE_SOIREE
#define BOARD_ID_MAIN6 5 //BOWSERS_GNARLY_PARTY
#define BOARD_ID_TUTORIAL 6 //TUTORIAL_BOARD
#define BOARD_ID_EXTRA1 7 //MEGA_BOARD_MAYHEM
#define BOARD_ID_EXTRA2 8 //MINI_BOARD_MAD_DASH
#define BOARD_ID_MAIN1 0 // TOADS_MIDWAY_MADNESS
#define BOARD_ID_MAIN2 1 // GOOMBAS_GREEDY_GALA
#define BOARD_ID_MAIN3 2 // SHY_GUYS_JUNGLE_JAM
#define BOARD_ID_MAIN4 3 // BOOS_HAUNTED_BASH
#define BOARD_ID_MAIN5 4 // KOOPAS_SEASIDE_SOIREE
#define BOARD_ID_MAIN6 5 // BOWSERS_GNARLY_PARTY
#define BOARD_ID_TUTORIAL 6 // TUTORIAL_BOARD
#define BOARD_ID_EXTRA1 7 // MEGA_BOARD_MAYHEM
#define BOARD_ID_EXTRA2 8 // MINI_BOARD_MAD_DASH
#define BOARD_FABS(value) ((value < 0) ? -(value) : (value))
typedef struct board_focus_data {
u16 view_type;
s16 time;
s16 max_time;
float fov_start;
float fov_end;
float zoom_start;
float zoom_end;
Vec rot_start;
Vec rot_end;
Vec target_start;
Vec target_end;
u16 view_type;
s16 time;
s16 max_time;
float fov_start;
float fov_end;
float zoom_start;
float zoom_end;
Vec rot_start;
Vec rot_end;
Vec target_start;
Vec target_end;
} BoardFocusData;
typedef struct board_camera_data {
struct {
u8 hide_all : 1;
u8 moving : 1;
u8 quaking : 1;
};
u16 mask;
s16 target_mdl;
s16 target_space;
s32 quake_timer;
float quake_strength;
float fov;
float near;
float far;
float aspect;
float viewport_x;
float viewport_y;
float viewport_w;
float viewport_h;
float viewport_near;
float viewport_far;
Vec pos;
Vec up;
Vec target;
Vec offset;
Vec rot;
float zoom;
void (*pos_calc)(struct board_camera_data *);
BoardFocusData focus;
struct {
u8 hide_all : 1;
u8 moving : 1;
u8 quaking : 1;
};
u16 mask;
s16 target_mdl;
s16 target_space;
s32 quake_timer;
float quake_strength;
float fov;
float nnear;
float ffar;
float aspect;
float viewport_x;
float viewport_y;
float viewport_w;
float viewport_h;
float viewport_near;
float viewport_far;
Vec pos;
Vec up;
Vec target;
Vec offset;
Vec rot;
float zoom;
void (*pos_calc)(struct board_camera_data *);
BoardFocusData focus;
} BoardCameraData;
extern BoardCameraData boardCamera;
extern Process *boardObjMan;
extern Process *boardMainProc;
extern u32 boardRandSeed;
SHARED_SYM extern Process *boardObjMan;
SHARED_SYM extern Process *boardMainProc;
SHARED_SYM extern u32 boardRandSeed;
extern omObjData *boardMainObj;
typedef void (*BoardFunc)(void);
@ -78,11 +79,11 @@ typedef void (*BoardCameraPosCalcFunc)(BoardCameraData *camera);
typedef void (*BoardTurnStartHook)(s32 player, s32 space);
extern BoardTurnStartHook boardTurnStartFunc;
extern void (*boardStarShowNextHook)(void);
extern void (*boardStarGiveHook)(void);
extern BoardBowserHook boardBowserHook;
extern BoardFunc boardTurnFunc;
SHARED_SYM extern BoardTurnStartHook boardTurnStartFunc;
SHARED_SYM extern void (*boardStarShowNextHook)(void);
SHARED_SYM extern void (*boardStarGiveHook)(void);
SHARED_SYM extern BoardBowserHook boardBowserHook;
SHARED_SYM extern BoardFunc boardTurnFunc;
extern BoardLightHook boardLightResetHook;
extern BoardLightHook boardLightSetHook;
@ -119,12 +120,15 @@ void BoardCameraTargetSpaceSet(s32 space);
void BoardCameraQuakeSet(s32 duration, float strength);
void BoardCameraQuakeReset();
void BoardCameraTargetSet(float x, float y, float z);
#ifndef __MWERKS__
void BoardCameraPosCalcFuncSet(BoardCameraPosCalcFunc func);
#endif
void BoardCameraPosSet(float x, float y, float z);
void BoardCameraXRotZoomSet(float zoom, float x_rot);
void BoardCameraZoomSet(float zoom);
void BoardCameraRotSet(float x, float y);
void BoardCameraNearFarSet(float near, float far);
void BoardCameraNearFarGet(float *near, float *far);
void BoardCameraNearFarSet(float nnear, float ffar);
void BoardCameraNearFarGet(float *nnear, float *ffar);
void BoardCameraMotionStart(s16 model_target, Vec *rot_target, float zoom_target, float fov_target);
void BoardCameraMotionStartEx(s16 model_target, Vec *rot_target, Vec *offset_end, float zoom_target, float fov_target, s16 max_time);
void BoardCameraFovSet(float fov);
@ -166,4 +170,4 @@ void BoardTauntKill(void);
s32 BoardDataDirReadAsync(s32 data_num);
void BoardDataAsyncWait(s32 status);
#endif
#endif

View file

@ -41,6 +41,7 @@ s32 BoardModelMotionUpdateSet(s16 model, s32 flag);
s32 BoardModelVoiceEnableSet(s16 model, s32 motion, s32 flag);
s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr);
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
s32 BoardModelMotionShiftIDGet(s16 model);
s32 BoardModelAttrSet(s16 model, u32 attr);
s32 BoardModelAttrReset(s16 model, u32 attr);
s32 BoardModelMotionTimeSet(s16 model, float time);

View file

@ -13,7 +13,7 @@
#include "game/board/space.h"
#include "game/board/ui.h"
extern s16 boardPlayerMdl[4];
SHARED_SYM extern s16 boardPlayerMdl[4];
static inline s32 BoardPlayerHandicapGet(s32 player)
{
@ -97,6 +97,9 @@ void BoardJunctionMaskReset(s32);
void BoardJunctionMaskZero(void);
void BoardPlayerVoiceEnableSet(s32, s32, s32);
#ifndef __MWERKS__
void BoardPlayerMoveBetween(s32 arg0, s32 arg1, s32 arg2);
#endif
void BoardPlayerMoveTo(s32, s32);
void BoardPlayerMoveToAsync(s32, s32);

View file

@ -17,6 +17,7 @@ typedef struct board_space {
u16 link[BOARD_SPACE_LINKMAX+1];
} BoardSpace;
s32 BoardSpaceWalkExec(s32 player, s32 space);
void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func);
void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func);
void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func);
@ -27,6 +28,7 @@ BoardSpace *BoardSpaceGet(s32 layer, s32 index);
void BoardSpaceAttrSet(s32 layer, u32 attr);
void BoardSpaceAttrReset(s32 layer, u32 attr);
u32 BoardSpaceFlagGet(s32 layer, s32 index);
void BoardSpaceTypeForce(u16 from, u16 to);
s32 BoardSpaceTypeGet(s32 layer, s32 index);
void BoardSpaceTypeSet(s32 layer, s32 index, s32 type);
s32 BoardSpacePosGet(s32 layer, s32 index, Vec *pos);
@ -40,6 +42,7 @@ s32 BoardSpaceLinkTargetListGet(s32 layer, s32 target, s16 *list);
s32 BoardSpaceLinkTypeSearch(s32 layer, s32 target, u16 type);
s32 BoardSpaceLinkTransformGet(s32 flag, Vec *pos, Vec *rot, Vec *scale);
void BoardSpaceHostSet(s32 space);
void BoardSpaceHide(s32 value);
void BoardSpaceStarSetIndex(s32 index);
s32 BoardSpaceStarGetNext(void);
s32 BoardSpaceStarGetRandom(s32 excl_pos);
@ -49,6 +52,7 @@ s32 BoardSpaceStarGetCurr(void);
s32 BoardSpaceStarCheck(s32 index);
void BoardSpaceLandExec(s32 player, s32 space);
void BoardSpaceCameraSet(u16 mask);
s32 BoardSpaceBlockExec(s32 player, s32 space);
void BoardSpaceBlockPosSet(void);
void BoardSpaceInit(s32 data_num);
void BoardSpaceDestroy(void);

View file

@ -2,6 +2,7 @@
#define _BOARD_TUTORIAL_H
#include "dolphin/types.h"
#include "version.h"
void BoardTutorialInit(void);
void BoardTutorialKill(void);
@ -16,7 +17,7 @@ void BoardTutorialItemSet(s8 arg0);
void BoardTutorialHostSet(s16 arg0);
void BoardTutorialHostHide(s8 arg0);
extern s32 boardTutorialData[4];
SHARED_SYM extern s32 boardTutorialData[4];
extern s8 boardTutorialDirInputX;
extern s8 boardTutorialDirInputY;
extern s16 boardTutorialDirInputTime;
@ -24,6 +25,6 @@ extern s32 boardTutorialBlockPos;
extern s8 boardTutorialBlockItem;
extern s8 boardTutorialBlockF;
extern s8 boardTutorialUseItem;
extern s8 boardTutorialF;
SHARED_SYM extern s8 boardTutorialF;
#endif

View file

@ -2,8 +2,9 @@
#define _GAME_CARD_H
#include "dolphin.h"
#include "version.h"
extern u8 UnMountCnt;
SHARED_SYM extern u8 UnMountCnt;
void HuCardInit(void);
s32 HuCardCheck(void);

View file

@ -34,7 +34,6 @@ s32 HuDataReadChk(s32 data_num);
DataReadStat *HuDataGetStatus(void *dir_ptr);
void *HuDataGetDirPtr(s32 data_num);
DataReadStat *HuDataDirRead(s32 data_num);
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num);
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num);
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo);
s32 HuDataDirReadAsync(s32 data_num);

View file

@ -197,7 +197,6 @@ static inline void GWRumbleSet(s32 value)
{
GWGameStat.rumble = value;
if (value == 0) {
// TODO PC: get rumble working
HuPadRumbleAllStop();
}
}

View file

@ -4,6 +4,7 @@
#include "game/hsfformat.h"
#include "game/hsfman.h"
#include "game/animdata.h"
#include "version.h"
typedef struct model_data ModelData;
typedef struct particle_data ParticleData;
@ -138,7 +139,7 @@ void Hu3DParManTimeLimitSet(s16 arg0, s32 arg1);
void Hu3DParManVacumeSet(s16 arg0, float arg1, float arg2, float arg3, float arg4);
void Hu3DParManColorSet(s16 arg0, s16 arg1);
extern Hu3DTexAnimDataStruct Hu3DTexAnimData[256];
extern Hu3DTexScrDataStruct Hu3DTexScrData[16];
SHARED_SYM extern Hu3DTexAnimDataStruct Hu3DTexAnimData[256];
SHARED_SYM extern Hu3DTexScrDataStruct Hu3DTexScrData[16];
#endif

View file

@ -19,7 +19,7 @@ typedef struct hsfdraw_struct_01 {
/* 0x1C */ float unk1C;
/* 0x20 */ float unk20;
/* 0x24 */ float unk24;
/* 0x28 */ float unk28;
/* 0x28 */ float unk28;
/* 0x2C */ float unk2C;
/* 0x30 */ float unk30;
/* 0x34 */ float unk34;

View file

@ -285,8 +285,8 @@ typedef struct hsf_camera {
HsfVector3f pos;
float aspect_dupe;
float fov;
float near;
float far;
float nnear;
float ffar;
} HsfCamera;
typedef struct hsf_light {

View file

@ -5,6 +5,7 @@
#include "game/hsfanim.h"
#include "game/hsfformat.h"
#include "game/memory.h"
#include "version.h"
#define HU3D_MODEL_MAX 512
#define HU3D_MOTION_MAX 256
@ -104,7 +105,7 @@ struct model_data {
u16 unk_26;
u16 unk_28[8];
s16 unk_38[8];
u32 unk_48;
uintptr_t unk_48;
u32 unk_4C;
u32 attr;
u32 motion_attr;
@ -140,8 +141,8 @@ struct model_data {
}; // sizeof 0x124
typedef struct camera_data {
float fov;
float near;
float far;
float nnear;
float ffar;
float aspect;
float aspect_dupe;
Vec pos;
@ -297,23 +298,23 @@ void Hu3DProjectionPosSet(s16, Vec *, Vec *, Vec *);
void Hu3DProjectionTPLvlSet(s16, float);
void Hu3DMipMapSet(char *, s16, s32, float);
extern ModelData Hu3DData[0x200];
extern CameraData Hu3DCamera[0x10];
SHARED_SYM extern ModelData Hu3DData[0x200];
SHARED_SYM extern CameraData Hu3DCamera[0x10];
extern AnimData *reflectAnim[5];
extern AnimData *hiliteAnim[4];
SHARED_SYM extern AnimData *hiliteAnim[4];
extern ThreeDProjectionStruct Hu3DProjection[4];
extern ShadowData Hu3DShadowData;
extern Mtx Hu3DCameraMtx;
extern Mtx Hu3DCameraMtxXPose;
extern LightData Hu3DGlobalLight[0x8];
SHARED_SYM extern ShadowData Hu3DShadowData;
SHARED_SYM extern Mtx Hu3DCameraMtx;
SHARED_SYM extern Mtx Hu3DCameraMtxXPose;
SHARED_SYM extern LightData Hu3DGlobalLight[0x8];
extern s16 reflectMapNo;
extern AnimData *toonAnim;
extern s16 Hu3DShadowCamBit;
extern s32 Hu3DShadowF;
extern s32 shadowModelDrawF;
extern s16 Hu3DCameraNo;
SHARED_SYM extern s16 Hu3DShadowCamBit;
SHARED_SYM extern s32 Hu3DShadowF;
SHARED_SYM extern s32 shadowModelDrawF;
SHARED_SYM extern s16 Hu3DCameraNo;
extern s16 Hu3DCameraBit;
extern s16 Hu3DPauseF;
extern GXColor BGColor;
SHARED_SYM extern GXColor BGColor;
#endif

View file

@ -3,6 +3,7 @@
#include "dolphin.h"
#include "game/hsfformat.h"
#include "version.h"
#define Hu3DMotionCreateFile(data_id) (Hu3DMotionCreate(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA)))
@ -76,6 +77,6 @@ s16 Hu3DJointMotion(s16 arg0, void *arg1);
void JointModel_Motion(s16 arg0, s16 arg1);
void Hu3DMotionCalc(s16 arg0);
extern MotionData Hu3DMotion[256];
SHARED_SYM extern MotionData Hu3DMotion[256];
#endif

View file

@ -2,8 +2,9 @@
#define _GAME_INIT_H
#include "dolphin.h"
#include "version.h"
extern GXRenderModeObj *RenderMode;
SHARED_SYM extern GXRenderModeObj *RenderMode;
extern OSHeapHandle currentHeapHandle;
extern void *DemoFrameBuffer1;
@ -11,7 +12,7 @@ extern void *DemoFrameBuffer2;
extern void *DemoCurrentBuffer;
extern u32 minimumVcount;
extern float minimumVcountf;
extern u32 worstVcount;
SHARED_SYM extern u32 worstVcount;
void HuSysInit(GXRenderModeObj *mode);
void HuSysBeforeRender();

View file

@ -2,15 +2,23 @@
#define _GAME_JMP_H
#ifdef TARGET_PC
#include <setjmp.h>
#include <stdint.h>
#ifdef _M_X64
#include "../extern/longjmp_win64/longjmp_win64.h"
#define SETJMP setjmp_win64
#define LONGJMP longjmp_win64
#define JMPBUF JMP_BUF_WIN64
#else
#include <setjmp.h>
#define SETJMP setjmp
#define LONGJMP longjmp
#define JMPBUF jmp_buf
#endif
#ifndef _JMP_BUF_DEFINED
#if defined(_M_IX86) || defined(__i386__)
#if defined(_M_IX86)
typedef struct __JUMP_BUFFER {
uint32_t Ebp;
uint32_t Ebx;
@ -24,41 +32,27 @@ typedef struct __JUMP_BUFFER {
uint32_t UnwindFunc;
uint32_t UnwindData[6];
} _JUMP_BUFFER;
#elif defined(_M_X64) || defined(__x86_64__)
#ifndef SETJMP_FLOAT128
// TODO do we need to align this?
typedef struct _SETJMP_FLOAT128 {
uint64_t Part[2];
} SETJMP_FLOAT128;
#endif
typedef struct _JUMP_BUFFER {
uint64_t Frame;
#elif defined(__i386__)
typedef struct __JUMP_BUFFER {
uint32_t Bx;
uint32_t Si;
uint32_t Di;
uint32_t Bp;
uint32_t Sp;
uint32_t Pc;
} _JUMP_BUFFER;
#elif defined(__x86_64__)
typedef struct __JUMP_BUFFER {
uint64_t Rbx;
uint64_t Rsp;
uint64_t Rbp;
uint64_t Rsi;
uint64_t Rdi;
uint64_t R12;
uint64_t R13;
uint64_t R14;
uint64_t R15;
uint64_t Rip;
uint32_t MxCsr;
uint16_t FpCsr;
uint16_t Spare;
SETJMP_FLOAT128 Xmm6;
SETJMP_FLOAT128 Xmm7;
SETJMP_FLOAT128 Xmm8;
SETJMP_FLOAT128 Xmm9;
SETJMP_FLOAT128 Xmm10;
SETJMP_FLOAT128 Xmm11;
SETJMP_FLOAT128 Xmm12;
SETJMP_FLOAT128 Xmm13;
SETJMP_FLOAT128 Xmm14;
SETJMP_FLOAT128 Xmm15;
uint64_t Rsp;
uint64_t Pc;
} _JUMP_BUFFER;
#elif defined(_M_ARM) || defined(__arm__)
#elif defined(_M_ARM)
typedef struct _JUMP_BUFFER {
uint32_t Frame;
@ -76,7 +70,7 @@ typedef struct _JUMP_BUFFER {
uint32_t Fpscr;
uint32_t long D[8]; // D8-D15 VFP/NEON regs
} _JUMP_BUFFER;
#elif defined(_M_ARM64) || defined(__aarch64__)
#elif defined(_M_ARM64)
typedef struct _JUMP_BUFFER {
uint64_t Frame;
uint64_t Reserved;
@ -133,21 +127,27 @@ typedef struct _JUMP_BUFFER {
#endif
#endif
#if defined(_M_IX86) || defined(__i386__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Eip = (size_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Esp = (size_t)sp
#elif defined(_M_X64) || defined(__x86_64__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Rip = (size_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Rsp = (size_t)sp
#if defined(_M_IX86)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Eip = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Esp = (uintptr_t)sp
#elif defined(__i386__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Pc = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (uintptr_t)sp
#elif defined(__x86_64__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Pc = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Rsp = (uintptr_t)sp
#elif defined(_M_X64)
#define SETJMP_SET_IP(jump, func) (jump)->rip_getjmp = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) (jump)->rsp_getjmp = (uintptr_t)sp
#elif defined(_M_ARM) || defined(__arm__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Pc = (size_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (size_t)sp
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Pc = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (uintptr_t)sp
#elif defined(_M_ARM64) || defined(__aarch64__)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Lr = (size_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (size_t)sp
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->Lr = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->Sp = (uintptr_t)sp
#elif defined(__riscv)
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->ra = (size_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->sp = (size_t)sp
#define SETJMP_SET_IP(jump, func) ((_JUMP_BUFFER *)((jump)))->ra = (uintptr_t)func
#define SETJMP_SET_SP(jump, sp) ((_JUMP_BUFFER *)((jump)))->sp = (uintptr_t)sp
#endif
#else
@ -166,6 +166,7 @@ typedef struct jmp_buf {
s32 gcsetjmp(jmp_buf *jump);
s32 gclongjmp(jmp_buf *jump, s32 status);
#define JMPBUF jmp_buf
#define SETJMP(jump) gcsetjmp(&(jump))
#define LONGJMP(jump, status) gclongjmp(&(jump), (status))

View file

@ -16,11 +16,11 @@ void CharRotInv(Mtx arg0, Mtx arg1, Vec *arg2, omObjData *arg3);
extern Mtx MapMT;
extern Mtx MapMTR;
extern float AddX;
extern float AddZ;
extern s32 nMap;
extern s32 nChar;
SHARED_SYM extern float AddX;
SHARED_SYM extern float AddZ;
SHARED_SYM extern s32 nMap;
SHARED_SYM extern s32 nChar;
extern s32 HitFaceCount;
extern omObjData *MapObject[16];
SHARED_SYM extern omObjData *MapObject[16];
#endif

View file

@ -117,6 +117,6 @@ s32 MGSeqUpdateRecord(SeqWork *work);
s32 MGSeqInitFlip(SeqWork *work, va_list params);
s32 MGSeqUpdateFlip(SeqWork *work);
extern OverlayID mgSeqOvlPrev;
SHARED_SYM extern OverlayID mgSeqOvlPrev;
#endif

View file

@ -4,6 +4,7 @@
#include "dolphin.h"
#include "game/process.h"
#include "game/gamework_data.h"
#include "version.h"
typedef struct mg_info {
u16 ovl;
@ -22,20 +23,20 @@ void omGameSysInit(Process *objman);
void omVibrate(s16 player_cfg_index, s16 duration, s16 off, s16 on);
extern s16 mgTypeCurr;
extern s16 mgBattleStar[4];
extern s16 mgBattleStarMax;
extern u8 lbl_801D3E94;
extern u32 mgRecordExtra;
extern s32 mgQuitExtraF;
extern s32 mgPracticeEnableF;
extern s32 mgInstExitEnableF;
extern u8 mgBoardHostEnableF;
SHARED_SYM extern s16 mgTypeCurr;
SHARED_SYM extern s16 mgBattleStar[4];
SHARED_SYM extern s16 mgBattleStarMax;
SHARED_SYM extern u8 lbl_801D3E94;
SHARED_SYM extern u32 mgRecordExtra;
SHARED_SYM extern s32 mgQuitExtraF;
SHARED_SYM extern s32 mgPracticeEnableF;
SHARED_SYM extern s32 mgInstExitEnableF;
SHARED_SYM extern u8 mgBoardHostEnableF;
extern s16 mgTicTacToeGrid[3][3];
extern u8 mgIndexList[256];
extern GameStat mgGameStatBackup;
SHARED_SYM extern s16 mgTicTacToeGrid[3][3];
SHARED_SYM extern u8 mgIndexList[256];
SHARED_SYM extern GameStat mgGameStatBackup;
extern MgInfo mgInfoTbl[];
SHARED_SYM extern MgInfo mgInfoTbl[];
#endif

View file

@ -2,6 +2,7 @@
#define _GAME_PRINTFUNC_H
#include "dolphin.h"
#include "version.h"
#define FONT_COLOR_BLACK 0
#define FONT_COLOR_DARK_BLUE 1
@ -29,7 +30,7 @@ void pfDrawFonts(void);
extern BOOL saftyFrameF;
extern u16 strlinecnt;
extern u16 empstrline;
extern int fontcolor;
SHARED_SYM extern int fontcolor;
extern u32 procfunc;
#endif

View file

@ -26,8 +26,8 @@ typedef struct process {
u16 stat;
u16 prio;
s32 sleep_time;
u32 base_sp;
jmp_buf jump;
uintptr_t base_sp;
JMPBUF jump;
void (*dtor)(void);
void *user_data;
} Process;

View file

@ -24,13 +24,13 @@ typedef union save_buf_all {
u8 ATTRIBUTE_ALIGN(32) buf[SAVE_BUF_SIZE];
} SaveBufAll;
extern char *SaveFileNameTbl[];
extern CARDFileInfo curFileInfo;
extern SaveBufAll saveBuf;
SHARED_SYM extern char *SaveFileNameTbl[];
SHARED_SYM extern CARDFileInfo curFileInfo;
SHARED_SYM extern SaveBufAll saveBuf;
extern u64 SLSerialNo;
extern s32 saveExecF;
SHARED_SYM extern s32 saveExecF;
extern u8 curBoxNo;
extern s16 curSlotNo;
SHARED_SYM extern s16 curSlotNo;
s32 SLFileOpen(char *fileName);
s32 SLFileCreate(char *fileName, u32 size, void *addr);

View file

@ -113,7 +113,7 @@ void HuSprGrpCenterSet(s16 group, float x, float y);
void HuSprGrpZRotSet(s16 group, float z_rot);
void HuSprGrpScaleSet(s16 group, float x, float y);
void HuSprGrpTPLvlSet(s16 group, float tp_lvl);
#ifndef HUSPR_USE_OLD_DEFS
#if !defined(HUSPR_USE_OLD_DEFS) || !defined(__MWERKS__)
void HuSprGrpDrawNoSet(s16 group, s32 draw_no);
#endif
void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no);
@ -127,7 +127,7 @@ void AnimDebug(AnimData *anim);
void HuSprDispInit(void);
void HuSprDisp(HuSprite *sprite);
#ifndef HUSPR_USE_OLD_DEFS
#if !defined(HUSPR_USE_OLD_DEFS) || !defined(__MWERKS__)
void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter);
#endif
void HuSprExecLayerSet(s16 draw_no, s16 layer);