Merge pull request #162 from Cuyler36/jsyswrap

Implement & link jsyswrap.cpp
This commit is contained in:
Cuyler36
2023-11-26 12:49:21 -05:00
committed by GitHub
39 changed files with 1213 additions and 200 deletions
+1
View File
@@ -342,6 +342,7 @@ BOOT_CFLAGS = CFLAGS + [
] + DOL_DEFINES
DOL_CFLAGS_NO_SDATA = CFLAGS + [
"-inline on",
"-enum int",
"-sdata 0",
"-sdata2 0"
] + DOL_DEFINES
+5
View File
@@ -16,6 +16,11 @@ boot.c:
.rodata: [0x800a97e0, 0x800a97e8]
.data: [0x800af860, 0x800afe50]
.bss: [0x800e2280, 0x800e2318]
jsyswrap.cpp:
.text: [0x8000663c, 0x80007188]
.ctors: [0x800a9784, 0x800a9788]
.data: [0x800afe50, 0x800b05e8]
.bss: [0x800e2318, 0x800e2640]
version.c:
.data: [0x800b05e8, 0x800b0608]
initial_menu.c:
+1
View File
@@ -3709,6 +3709,7 @@ global:
0x802185b0: __GBAReset
0x802185b8: texture_cache_num
0x802185bc: texture_cache_data_entry_num
0x8021860a: FrameCansel
0x8021861c: __OSReport_MonopolyThread
0x80218620: __OSReport_disable
0x80218628: this
+3
View File
@@ -636,6 +636,9 @@ class CSource(Source):
elif path.startswith("src/TRK") and not path.startswith("src/TRK/init"):
self.cc = c.CC
self.cflags = c.DOL_TRK_CFLAGS
elif os.path.dirname(path).endswith("src"):
self.cflags = c.DOL_CFLAGS_SDATA0_CFLAGS
self.cc = c.CC
else:
self.cflags = ctx.cflags
self.cc = c.CC_R
+1 -1
View File
@@ -288,7 +288,7 @@ inline void JKRFreeToAram(JKRAramBlock* block)
inline u8* JKRAramToMainRam(u32 address, u8* buf, u32 bufSize, JKRExpandSwitch expandSwitch, u32 p5, JKRHeap* heap, int id, u32* pSize)
{
JKRAram::aramToMainRam(address, buf, bufSize, expandSwitch, p5, heap, id, pSize);
return JKRAram::aramToMainRam(address, buf, bufSize, expandSwitch, p5, heap, id, pSize);
}
inline JKRAramBlock* JKRMainRamToAram(u8* buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap, int id, u32)
+8 -1
View File
@@ -2,9 +2,12 @@
#define JKRDISPOSER_H
#include "types.h"
#include "JSystem/JSupport/JSUList.h"
#ifdef __cplusplus
extern "C" {
#endif
class JKRHeap;
class JKRDisposer
@@ -18,4 +21,8 @@ public:
JSULink<JKRDisposer> mPointerLinks; // _8
};
#ifdef __cplusplus
}
#endif
#endif
+8
View File
@@ -3,6 +3,10 @@
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
class JSUPtrLink;
class JSUPtrList
@@ -220,4 +224,8 @@ private:
JSUTree<T> *mTree;
};
#ifdef __cplusplus
}
#endif
#endif /* JSULIST_H */
+210
View File
@@ -0,0 +1,210 @@
#ifndef JUTGAMEPAD_H
#define JUTGAMEPAD_H
#include "types.h"
#include "dolphin/os.h"
#include "dolphin/os/OSTime.h"
#include "dolphin/pad.h"
#include "JSystem/JKernel/JKRDisposer.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*JUTResetBtnCb)(int, void*);
class JUTGamePad : public JKRDisposer
{
public:
enum EPadPort
{
Port_unknown = -999,
Port_Invalid = -1,
Port1 = 0,
Port2,
Port3,
Port4,
PortRecorder
};
enum EButtons
{
MAINSTICK_UP = 0x8000000,
MAINSTICK_DOWN = 0x4000000,
MAINSTICK_RIGHT = 0x2000000,
MAINSTICK_LEFT = 0x1000000,
CSTICK_UP = 0x80000,
CSTICK_DOWN = 0x40000,
CSTICK_RIGHT = 0x20000,
CSTICK_LEFT = 0x10000,
START = 0x1000,
Y = 0x800,
X = 0x400,
B = 0x200,
A = 0x100,
L = 0x40,
R = 0x20,
Z = 0x10,
DPAD_UP = 0x8,
DPAD_DOWN = 0x4,
DPAD_RIGHT = 0x2,
DPAD_LEFT = 0x1
};
enum EStickMode
{
NonClamped,
Clamped
};
enum EWhichStick
{
WhichStick_MainStick,
WhichStick_SubStick
};
JUTGamePad();
JUTGamePad(EPadPort port);
virtual ~JUTGamePad();
void assign();
void checkResetSwitch();
void clearForReset();
static void init();
void initList();
void read();
static bool recalibrate(u32);
void setButtonRepeat(u32, u32, u32);
void update();
static void setResetCallback(JUTResetBtnCb callback, void *param_0)
{
C3ButtonReset::sCallback = callback;
C3ButtonReset::sCallbackArg = param_0;
}
bool testButton(u32 mask) const {
return mButtons.mButton & mask;
}
bool testTrigger(u32 mask) const {
return mButtons.mTrigger & mask;
}
class CButton
{
public:
CButton();
void clear();
void update(const PADStatus*, u32);
void setRepeat(u32, u32, u32);
u32 mButton; // _0
u32 mTrigger;
u32 mRelease;
u8 mAnalogA; // _C
u8 mAnalogB; // _D
u8 mAnalogL; // _E
u8 mAnalogR; // _F
f32 mAnalogLf; // _10
f32 mAnalogRf; // _14
u32 mRepeat;
u32 _1C;
u32 _20;
u32 _24;
u32 _28;
u32 _2C;
};
class CStick
{
public:
CStick();
void clear();
u32 update(s8 x, s8 y, JUTGamePad::EStickMode, JUTGamePad::EWhichStick);
u32 update(s8 x, s8 y, JUTGamePad::EStickMode, JUTGamePad::EWhichStick, u32);
u32 getButton();
f32 mStickX;
f32 mStickY;
f32 mValue;
s16 mAngle;
};
class CRumble
{
public:
void clear(JUTGamePad*);
static void stopMotor(s32);
static void stopMotorHard(s32);
void update(u16);
void setEnable(u32);
u32 _0;
u32 _4;
u32 _8;
u32 _C;
};
class C3ButtonReset {
public:
C3ButtonReset() { mReset = false; }
static u32 sResetPattern;
static u32 sResetMaskPattern;
static JUTResetBtnCb sCallback;
static void *sCallbackArg;
static OSTime sThreshold;
static s32 sResetOccurredPort;
static bool sResetOccurred;
static bool sResetSwitchPushing;
private:
bool mReset;
};
static bool isPadOk() { // fabricated
bool ret = false;
switch(mPadStatus[0].err) {
case -1:
case 0:
ret = true;
break;
}
return ret;
}
static PADStatus *getPadStatus(int idx) { return &mPadStatus[idx]; }
static EStickMode sStickMode;
static PADStatus mPadStatus[4];
CButton mButtons; // _18
CStick mMainStick; // _48
CStick mSubStick; // _58
CRumble mRumble; // _68
u16 mPort; // _78
s8 mErrorStatus; // _7A
JSULink<JUTGamePad> mPtrLink; // _7C
u32 _8C;
u32 _90;
u32 _94;
C3ButtonReset mButtonReset; // _98
u8 _99;
u8 _9A;
u8 _9B;
u8 _9C;
u8 _9D; // padding?
u8 _9E; // ^^
u8 _9F; // ^^
OSTime mResetTime; // _A0
};
#ifdef __cplusplus
}
#endif
#endif
+76
View File
@@ -0,0 +1,76 @@
#ifndef TCOLOR_H
#define TCOLOR_H
#ifdef __cplusplus
extern "C" {
#endif
#include "types.h"
#include <dolphin/gx.h>
#define TCOLOR_WHITE JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF)
#define TCOLOR_BLACK JUtility::TColor(0, 0, 0, 0)
namespace JUtility {
struct TColor : public GXColor {
TColor() { set(0xFFFFFFFF); }
TColor(u8 _r, u8 _g, u8 _b, u8 _a) { set(_r, _g, _b, _a); }
TColor(u32 u32Color) { set(u32Color); }
TColor(GXColor color) { set(color); }
TColor &operator=(const TColor &other) {
((GXColor *)this)->operator=(other);
return *this;
}
/** @fabricated */
TColor &operator=(const GXColorS10 &other) {
r = other.r;
g = other.g;
b = other.b;
a = other.a;
return *this;
}
operator u32() const { return toUInt32(); }
u32 toUInt32() const { return *(u32 *)&r; }
void set(u8 cR, u8 cG, u8 cB, u8 cA) {
r = cR;
g = cG;
b = cB;
a = cA;
}
void set(u32 u32Color) { *(u32 *)&r = u32Color; }
void set(GXColor gxColor) { *(GXColor *)&r = gxColor; }
void set(TColor color) { *this = color; }
void setRGB(u8 cR, u8 cG, u8 cB) {
r = cR;
g = cG;
b = cB;
}
void setRGB(const TColor &other) { setRGB(other.r, other.g, other.b); }
void setRGBA(const TColor &other) {
r = other.r;
g = other.g;
b = other.b;
a = other.a;
}
// _00 = GXColor (_00 = r, _01 = g, _02 = b, _03 = a)
};
} // namespace JUtility
#ifdef __cplusplus
}
#endif
#endif
+16 -16
View File
@@ -25,22 +25,22 @@ typedef union {
typedef THA_GA_t THA_GA;
extern void THA_GA_ct(THA_GA* this, Gfx* p, size_t n);
extern void THA_GA_dt(THA_GA* this); /* @unused */
extern int THA_GA_isCrash(THA_GA* this);
extern void THA_GA_init(THA_GA* this); /* @unused*/
extern int THA_GA_getFreeBytes(THA_GA* this);
extern void* THA_GA_getTailPtr(THA_GA* this); /* @unused */
extern void* THA_GA_nextPtrN(THA_GA* this, size_t n); /* @unused */
extern void* THA_GA_nextPtr1(THA_GA* this); /* @unused */
extern Gfx* THA_GA_NEXT_DISP(THA_GA* this); /* @unused */
extern void* THA_GA_getHeadPtr(THA_GA* this); /* @unused */
extern void THA_GA_setHeadPtr(THA_GA* this, void *p); /* @unused */
extern Mtx* THA_GA_alloc(THA_GA* this, size_t n); /* @unused */
extern Mtx* THA_GA_allocMtxN(THA_GA* this, size_t n); /* @unused */
extern Mtx* THA_GA_allocMtx1(THA_GA* this); /* @unused */
extern Vtx* THA_GA_allocVtxN(THA_GA* this, size_t n); /* @unused */
extern Vtx* THA_GA_allocVtx1(THA_GA* this); /* @unused */
extern void THA_GA_ct(THA_GA* tha_ga, Gfx* p, size_t n);
extern void THA_GA_dt(THA_GA* tha_ga); /* @unused */
extern int THA_GA_isCrash(THA_GA* tha_ga);
extern void THA_GA_init(THA_GA* tha_ga); /* @unused*/
extern int THA_GA_getFreeBytes(THA_GA* tha_ga);
extern void* THA_GA_getTailPtr(THA_GA* tha_ga); /* @unused */
extern void* THA_GA_nextPtrN(THA_GA* tha_ga, size_t n); /* @unused */
extern void* THA_GA_nextPtr1(THA_GA* tha_ga); /* @unused */
extern Gfx* THA_GA_NEXT_DISP(THA_GA* tha_ga); /* @unused */
extern void* THA_GA_getHeadPtr(THA_GA* tha_ga); /* @unused */
extern void THA_GA_setHeadPtr(THA_GA* tha_ga, void *p); /* @unused */
extern Mtx* THA_GA_alloc(THA_GA* tha_ga, size_t n); /* @unused */
extern Mtx* THA_GA_allocMtxN(THA_GA* tha_ga, size_t n); /* @unused */
extern Mtx* THA_GA_allocMtx1(THA_GA* tha_ga); /* @unused */
extern Vtx* THA_GA_allocVtxN(THA_GA* tha_ga, size_t n); /* @unused */
extern Vtx* THA_GA_allocVtx1(THA_GA* tha_ga); /* @unused */
#ifdef __cplusplus
};
+15 -15
View File
@@ -16,21 +16,21 @@ typedef struct {
typedef TwoHeadArena_t TwoHeadArena;
typedef TwoHeadArena_t THA;
extern void THA_ct(TwoHeadArena* this, char* p, size_t n);
extern void THA_dt(TwoHeadArena* this);
extern void* THA_getHeadPtr(TwoHeadArena* this); /* @unused */
extern void THA_setHeadPtr(TwoHeadArena* this, void* p); /* @unused */
extern void* THA_getTailPtr(TwoHeadArena* this); /* @unused */
extern void* THA_nextPtrN(TwoHeadArena* this, size_t n); /* @unused */
extern void* THA_nextPtr1(TwoHeadArena* this); /* @unused */
extern void* THA_alloc(TwoHeadArena* this, size_t siz);
extern void* THA_alloc16(TwoHeadArena* this, size_t siz);
extern void* THA_allocAlign(TwoHeadArena* this, size_t siz, int mask);
extern int THA_isCrash(TwoHeadArena* this);
extern void THA_init(TwoHeadArena* this);
extern int THA_getFreeBytes16(TwoHeadArena* this);
extern int THA_getFreeBytes(TwoHeadArena* this);
extern int THA_getFreeBytesAlign(TwoHeadArena* this, int mask);
extern void THA_ct(TwoHeadArena* tha, char* p, size_t n);
extern void THA_dt(TwoHeadArena* tha);
extern void* THA_getHeadPtr(TwoHeadArena* tha); /* @unused */
extern void THA_setHeadPtr(TwoHeadArena* tha, void* p); /* @unused */
extern void* THA_getTailPtr(TwoHeadArena* tha); /* @unused */
extern void* THA_nextPtrN(TwoHeadArena* tha, size_t n); /* @unused */
extern void* THA_nextPtr1(TwoHeadArena* tha); /* @unused */
extern void* THA_alloc(TwoHeadArena* tha, size_t siz);
extern void* THA_alloc16(TwoHeadArena* tha, size_t siz);
extern void* THA_allocAlign(TwoHeadArena* tha, size_t siz, int mask);
extern int THA_isCrash(TwoHeadArena* tha);
extern void THA_init(TwoHeadArena* tha);
extern int THA_getFreeBytes16(TwoHeadArena* tha);
extern int THA_getFreeBytes(TwoHeadArena* tha);
extern int THA_getFreeBytesAlign(TwoHeadArena* tha, int mask);
#ifdef __cplusplus
};
+2
View File
@@ -193,6 +193,8 @@ void DVDDumpWaitingQueue();
#define DVD_AIS_SUCCESS 0
DVDDiskID DiskID AT_ADDRESS(0x80000000);
//////////////////////////////////
#ifdef __cplusplus
+27
View File
@@ -25,6 +25,33 @@ extern "C" {
#define PAD_BUTTON_MENU 0x1000
#define PAD_BUTTON_START 0x1000
typedef void (*PADSamplingCallback)(void);
typedef struct PADStatus {
u16 button;
s8 stickX;
s8 stickY;
s8 substickX;
s8 substickY;
u8 triggerLeft;
u8 triggerRight;
u8 analogA;
u8 analogB;
s8 err;
} PADStatus;
BOOL PADInit();
u32 PADRead(PADStatus *status);
BOOL PADReset(u32 mask);
BOOL PADRecalibrate(u32 mask);
void PADClamp(PADStatus *status);
void PADClampCircle(PADStatus *status);
void PADControlMotor(s32 chan, u32 cmd);
void PADSetSpec(u32 spec);
void PADControlAllMotors(const u32 *cmdArr);
void PADSetAnalogMode(u32 mode);
PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback);
#ifdef __cplusplus
}
#endif
+12 -12
View File
@@ -57,23 +57,23 @@ do { \
GAME_NEXT_GAME(t_game, init_name, class_name); \
} while (0)
extern void game_debug_draw_last(GAME* this, GRAPH* graph);
extern void game_debug_draw_last(GAME* game, GRAPH* graph);
extern void game_draw_last(GRAPH* graph);
extern void game_get_controller(GAME* this);
extern void game_get_controller(GAME* game);
extern void SetGameFrame(int frame);
extern void game_main(GAME* this);
extern void game_resize_hyral(GAME* this, int size);
extern void game_ct(GAME* this, void (*init)(GAME*), GRAPH* graph);
extern void game_dt(GAME* this);
extern void (*game_get_next_game_init(GAME* this))(GAME*);
extern void game_main(GAME* game);
extern void game_resize_hyral(GAME* game, int size);
extern void game_ct(GAME* game, void (*init)(GAME*), GRAPH* graph);
extern void game_dt(GAME* game);
extern void (*game_get_next_game_init(GAME* game))(GAME*);
#ifndef MUST_MATCH
extern size_t game_get_next_game_class_size(GAME* this);
extern size_t game_get_next_game_class_size(GAME* game);
#endif
extern int game_is_doing(GAME* this);
extern int game_getFreeBytes(GAME* this);
extern void game_goto_next_game_play(GAME* this);
extern int game_is_doing(GAME* game);
extern int game_getFreeBytes(GAME* game);
extern void game_goto_next_game_play(GAME* game);
#ifndef MUST_MATCH
extern void game_goto_next_game_famicom_emu(GAME* this);
extern void game_goto_next_game_famicom_emu(GAME* game);
#endif
extern GAME* gamePT;
+2 -2
View File
@@ -88,8 +88,8 @@ typedef struct graph_s {
} GRAPH ATTRIBUTE_ALIGN(8); // one of the missing structs is likely aligned to 8 bytes.
extern void graph_proc(void* arg);
extern void graph_ct(GRAPH* this);
extern void graph_dt(GRAPH* this);
extern void graph_ct(GRAPH* graph);
extern void graph_dt(GRAPH* graph);
#define GRAPH_SET_DOING_POINT(g, point) ((g)->doing_point = GRAPH_DOING_##point)
+105 -11
View File
@@ -2,25 +2,119 @@
#define JSYSWRAP_H
#include "types.h"
#include "libjsys/jsyswrapper.h"
#include "dolphin/gx.h"
#include "dolphin/dvd.h"
#include "dolphin/pad.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void JW_JUTReport(int pos_x, int pos_y, int show_count, const char* fmt, ...);
extern void JC_JFWDisplay_startFadeOut(void*, int);
extern void* JC_JFWDisplay_getManager();
extern void JC_JFWDisplay_clearEfb(void*, GXColor*);
extern GXRenderModeObj* JC_JFWDisplay_getRenderMode(void*);
extern void* JC_JFWDisplay_changeToSingleXfb(void*, int);
enum resource_index {
RESOURCE_FGDATA,
RESOURCE_MAIL,
RESOURCE_MAIL_TABLE,
RESOURCE_MAILA,
RESOURCE_MAILA_TABLE,
RESOURCE_MAILB,
RESOURCE_MAILB_TABLE,
RESOURCE_MAILC,
RESOURCE_MAILC_TABLE,
RESOURCE_PALLET_BOY,
RESOURCE_PS,
RESOURCE_PS_TABLE,
RESOURCE_PSZ,
RESOURCE_PSZ_TABLE,
RESOURCE_SELECT,
RESOURCE_SELECT_TABLE,
RESOURCE_STRING,
RESOURCE_STRING_TABLE,
RESOURCE_SUPERZ,
RESOURCE_SUPERZ_TABLE,
RESOURCE_SUPER,
RESOURCE_SUPER_TABLE,
RESOURCE_TEX_BOY,
RESOURCE_FACE_BOY,
RESOURCE_FGNPCDATA,
RESOURCE_MESSAGE,
RESOURCE_MESSAGE_TABLE,
RESOURCE_MY_ORIGINAL,
RESOURCE_NEEDLEWORK_JOYBOOT,
RESOURCE_PLAYER_ROOM_FLOOR,
RESOURCE_PLAYER_ROOM_WALL,
RESOURCE_NPC_NAME_STR_TABLE,
RESOURCE_D_OBJ_NPC_STOCK_SCH,
RESOURCE_D_OBJ_NPC_STOCK_SCL,
RESOURCE_TITLE,
RESOURCE_MURA_SPRING,
RESOURCE_MURA_SUMMER,
RESOURCE_MURA_FALL,
RESOURCE_MURA_WINTER,
RESOURCE_ODEKAKE,
RESOURCE_OMAKE,
RESOURCE_EKI1,
RESOURCE_EKI1_2,
RESOURCE_EKI1_3,
RESOURCE_EKI1_4,
RESOURCE_EKI1_5,
RESOURCE_EKI2,
RESOURCE_EKI2_2,
RESOURCE_EKI2_3,
RESOURCE_EKI2_4,
RESOURCE_EKI2_5,
RESOURCE_EKI3,
RESOURCE_EKI3_2,
RESOURCE_EKI3_3,
RESOURCE_EKI3_4,
RESOURCE_EKI3_5,
RESOURCE_TEGAMI,
RESOURCE_TEGAMI2,
RESOURCE_FAMIKON,
RESOURCE_BOY1,
RESOURCE_BOY2,
RESOURCE_BOY3,
RESOURCE_BOY4,
RESOURCE_BOY5,
RESOURCE_BOY6,
RESOURCE_BOY7,
RESOURCE_BOY8,
RESOURCE_GIRL11,
RESOURCE_GIRL12,
RESOURCE_GIRL13,
RESOURCE_GIRL14,
RESOURCE_GIRL15,
RESOURCE_GIRL16,
RESOURCE_GIRL17,
RESOURCE_GIRL18,
RESOURCE_D_BG_ISLAND_SCH,
extern void JC_JFWDisplay_startFadeIn(void*, int);
extern void JC_JFWDisplay_changeToDoubleXfb(void*);
extern u32 JC__JKRGetResource(char*);
extern int JC__JKRGetMemBlockSize(int, u32);
RESOURCE_NUM
};
extern void JC__JKRRemoveResource(void*);
extern void JW_UpdateVideoMode();
extern void JW_SetProgressiveMode(int enabled);
extern void JW_SetLowResoMode(int enabled);
extern void JW_SetFamicomMode(int enabled);
extern void JW_SetVideoPan(u16 origin_x, u16 origin_y, u16 width, u16 height);
extern void JW_SetLogoMode(int enabled);
extern void JW_JUTGamePad_read();
extern void JW_getPadStatus(PADStatus* padStatus);
extern int JW_JUTGamepad_getErrorStatus();
extern u32 JW_JUTGamepad_getButton();
extern u32 JW_JUTGamepad_getTrigger();
extern f32 JW_JUTGamepad_getSubStickValue();
extern int JW_JUTGamepad_getSubStickAngle();
extern void JW_BeginFrame();
extern void JW_EndFrame();
extern int JW_setClearColor(u8 r, u8 g, u8 b);
extern u32 JW_GetAramAddress(int res_no);
extern u8* _JW_GetResourceAram(u32 aram_addr, u8* dst, u32 size);
extern u32 JW_GetResSizeFileNo(int res_no);
extern void JW_Init();
extern void JW_Init2();
extern void JW_Init3();
extern void JW_Cleanup();
#ifdef __cplusplus
}
+18
View File
@@ -0,0 +1,18 @@
#ifndef JSYSWRAP_CPP_H
#define JSYSWRAP_CPP_H
#include "types.h"
#include "jsyswrap.h"
#include "JSystem/JUtility/JUTGamePad.h"
#ifdef __cplusplus
extern "C" {
#endif
extern JUTGamePad gamePad[];
#ifdef __cplusplus
}
#endif
#endif
+2
View File
@@ -7,6 +7,8 @@
extern "C" {
#endif
extern u8 FrameCansel;
/* These might be signed */
extern void emu64_set_aflags(u32 idx, u32 value);
extern int emu64_get_aflags(u32 idx);
+73 -102
View File
@@ -5,123 +5,45 @@
#include "JSystem/JKernel/JKREnum.h"
#include "JSystem/JUtility/JUTEnum.h"
#include "va_args.h"
#include "dolphin/gx.h"
#ifdef __cplusplus
extern "C" {
#endif
enum resource_index {
RESOURCE_FGDATA,
RESOURCE_MAIL,
RESOURCE_MAIL_TABLE,
RESOURCE_MAILA,
RESOURCE_MAILA_TABLE,
RESOURCE_MAILB,
RESOURCE_MAILB_TABLE,
RESOURCE_MAILC,
RESOURCE_MAILC_TABLE,
RESOURCE_PALLET_BOY,
RESOURCE_PS,
RESOURCE_PS_TABLE,
RESOURCE_PSZ,
RESOURCE_PSZ_TABLE,
RESOURCE_SELECT,
RESOURCE_SELECT_TABLE,
RESOURCE_STRING,
RESOURCE_STRING_TABLE,
RESOURCE_SUPERZ,
RESOURCE_SUPERZ_TABLE,
RESOURCE_SUPER,
RESOURCE_SUPER_TABLE,
RESOURCE_TEX_BOY,
RESOURCE_FACE_BOY,
RESOURCE_FGNPCDATA,
RESOURCE_MESSAGE,
RESOURCE_MESSAGE_TABLE,
RESOURCE_MY_ORIGINAL,
RESOURCE_NEEDLEWORK_JOYBOOT,
RESOURCE_PLAYER_ROOM_FLOOR,
RESOURCE_PLAYER_ROOM_WALL,
RESOURCE_NPC_NAME_STR_TABLE,
RESOURCE_D_OBJ_NPC_STOCK_SCH,
RESOURCE_D_OBJ_NPC_STOCK_SCL,
RESOURCE_TITLE,
RESOURCE_MURA_SPRING,
RESOURCE_MURA_SUMMER,
RESOURCE_MURA_FALL,
RESOURCE_MURA_WINTER,
RESOURCE_ODEKAKE,
RESOURCE_OMAKE,
RESOURCE_EKI1,
RESOURCE_EKI1_2,
RESOURCE_EKI1_3,
RESOURCE_EKI1_4,
RESOURCE_EKI1_5,
RESOURCE_EKI2,
RESOURCE_EKI2_2,
RESOURCE_EKI2_3,
RESOURCE_EKI2_4,
RESOURCE_EKI2_5,
RESOURCE_EKI3,
RESOURCE_EKI3_2,
RESOURCE_EKI3_3,
RESOURCE_EKI3_4,
RESOURCE_EKI3_5,
RESOURCE_TEGAMI,
RESOURCE_TEGAMI2,
RESOURCE_FAMIKON,
RESOURCE_BOY1,
RESOURCE_BOY2,
RESOURCE_BOY3,
RESOURCE_BOY4,
RESOURCE_BOY5,
RESOURCE_BOY6,
RESOURCE_BOY7,
RESOURCE_BOY8,
RESOURCE_GIRL11,
RESOURCE_GIRL12,
RESOURCE_GIRL13,
RESOURCE_GIRL14,
RESOURCE_GIRL15,
RESOURCE_GIRL16,
RESOURCE_GIRL17,
RESOURCE_GIRL18,
RESOURCE_D_BG_ISLAND_SCH,
RESOURCE_NUM
};
extern void JW_Init();
extern void JW_Init2();
extern void JW_Init3();
extern void* JW_Alloc(size_t size, int align);
extern void JW_Free(void* ptr);
extern s32 JW_Resize(void* ptr, size_t new_size);
extern size_t JW_GetMemBlockSize(void* ptr);
extern size_t JW_GetResSizeFileNo(int file_no);
extern void JW_BeginFrame();
extern void JW_EndFrame();
extern void JW_JUTReport(int x, int y, int show_count, const char* fmt, ...);
extern void JW_SetLowResoMode(BOOL enable);
extern void JW_SetProgressiveMode(BOOL enable);
extern u32 JW_GetAramAddress(int resource_no);
extern u8* _JW_GetResourceAram(u32 aram_addr, u8* dst, size_t size);
extern void JW_SetFamicomMode(int enabled);
extern void JW_SetLogoMode(int mode);
extern void JW_Cleanup();
typedef struct {
u16 mFileID; // _00
u16 mHash; // _02
u32 mFlag; // _04
u32 mDataOffset; // _08
u32 mSize; // _0C
void* mData; // _10
} CSDIFileEntry;
extern void* JC_JFWSystem_getSystemConsole();
extern void* JC_JFWSystem_getRootHeap();
extern void* JC_JFWSystem_getSystemHeap();
extern void* JC_JUTVideo_getManager();
extern u16 JC_JUTVideo_getFbWidth(void* manager);
extern u16 JC_JUTVideo_getEfbHeight(void* manager);
extern void JC_JUTVideo_setRenderMode(void* manager, GXRenderModeObj* renderMode);
extern void* JC_JFWDisplay_getManager();
extern void JC_JFWDisplay_startFadeOut(void* manager, int len);
extern void JC_JFWDisplay_startFadeIn(void* manager, int len);
extern void JC_JFWDisplay_setFrameRate(void* manager, u16 framerate);
extern void JC_JFWDisplay_endFrame(void* manager);
extern void JC_JFWDisplay_beginRender(void* manager);
extern void JC_JFWDisplay_endRender(void* manager);
extern void JC_JFWDisplay_setClearColor(void* manager, GXColor color);
extern void JC_JKRAramHeap_dump(void* heap);
extern void* JC_JKRAram_getAramHeap();
extern u32 JC_JKRAramArchive_getAramAddress_byName(void* archive, u32 root_name, const char* res_name);
extern CSDIFileEntry* JC__JKRGetResourceEntry_byName(u32 root_name, const char* res_name, void* archive);
extern int JC_JKRHeap_dump(void* heap);
extern s32 JC_JKRHeap_getTotalFreeSize(void* heap);
@@ -146,6 +68,7 @@ extern void JC_JUTConsole_scroll(void* console, int amount);
extern u32 JC_JUTConsole_getHeight(void* console);
extern u32 JC_JUTConsole_getUsedLine(void* console);
extern void JC_JUTConsole_print_f_va(void* console, const char* fmt, va_list arg);
extern void JC_JUTConsole_print_f(void* console, const char* fmt, ...);
extern void* JC_JUTConsoleManager_getManager();
extern void JC_JUTConsoleManager_drawDirect(void* manager, int direct);
@@ -169,10 +92,58 @@ extern void JC_JUTAssertion_changeDevice(int device);
extern void JC_JUTAssertion_changeDisplayTime(int displayTime);
extern void JC_JUTGamePad_read();
extern void JC_JFWDisplay_startFadeOut(void* manager, int fadeout);
extern void JC_JFWDisplay_clearEfb(void* manager, GXColor* color);
extern GXRenderModeObj* JC_JFWDisplay_getRenderMode(void* manager);
extern void* JC_JFWDisplay_changeToSingleXfb(void* manager, int param);
extern u16 JC_JFWDisplay_getEfbWidth(void* manager);
extern u16 JC_JFWDisplay_getEfbHeight(void* manager);
extern void JC_JFWSystem_setMaxStdHeap(int max);
extern void JC_JFWSystem_setSysHeapSize(u32 size);
extern void JC_JFWSystem_setFifoBufSize(u32 size);
extern void JC_JFWSystem_setAramAudioBufSize(u32 size);
extern void JC_JFWSystem_setAramGraphBufSize(u32 size);
extern void JC_JFWSystem_init();
extern void* JC_JFWDisplay_createManager_0(GXRenderModeObj* renderMode, void* heap, int param0, int param1);
extern void JC_JFWDisplay_setFader(void* manager, void* fader);
extern void JC_JFWDisplay_setGamma(void* manager, int gamma);
extern void JC_JFWDisplay_destroyManager();
extern u32 JW_JUTGamepad_getButton();
extern u32 JW_JUTGamepad_getTrigger();
extern u32 JW_JUTGamepad_getErrorStatus();
extern void* JC_J2DOrthoGraph_new();
extern void JC_J2DOrthoGraph_delete(void* orthograph);
extern void* JC_JUTFader_new(int ul_x, int ul_y, int br_x, int br_y, u32* color);
extern void JC_JUTFader_delete(void* fader);
extern void JC_JFWDisplay_changeToDoubleXfb(void* manager);
extern u32 JC__JKRGetResource(char* resourceName);
extern int JC__JKRGetMemBlockSize(int, u32);
extern void JC__JKRRemoveResource(void* res);
extern void JC_J2DOrthoGraph_setOrtho(void* gport, u16 ul_x, u16 ul_y, u16 br_x, u16 br_y);
extern void JC_J2DOrthoGraph_setPort(void* gport);
extern void* JC_JKRAramArchive_new();
extern BOOL JC__JKRMountFixedAramArchive(void* aram_archive, const char* file);
extern BOOL JC__JKRUnmountFixedAramArchive(void* aram_archive);
extern void JC_JKRAramArchive_delete(void* aram_archive);
extern u32 JC_JKRHeap_getFreeSize(void* heap);
extern void* JC_JKRHeap_alloc(void* heap, u32 size, int align);
extern void JC_JKRHeap_free(void* heap, void* mem);
extern void* JW_Alloc(size_t size, int align);
extern void JW_Free(void* ptr);
extern s32 JW_Resize(void* ptr, size_t new_size);
extern size_t JW_GetMemBlockSize(void* ptr);
extern void JW_JUTReport(int x, int y, int show_count, const char* fmt, ...);
#ifdef JSYSWRAPPER_DEBUG
#define JSYSWRAPPER_PRINTF(console, fmt, ...) JC_JUTConsole_print_f(console, fmt, ...)
#else
#define JSYSWRAPPER_PRINTF(console, fmt, ...)
#endif
#ifdef __cplusplus
}
+1 -1
View File
@@ -8,7 +8,7 @@
#include "gfxalloc.h"
#include "gamealloc.h"
#include "THA_GA.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
GAME* gamePT = NULL;
+1 -1
View File
@@ -8,7 +8,7 @@
#include "irqmgr.h"
#include "libc64/malloc.h"
#include "libforest/emu64/emu64_wrapper.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "libu64/debug.h"
#include "libultra/libultra.h"
#include "m_bgm.h"
+1 -1
View File
@@ -19,7 +19,7 @@
#include "m_debug.h"
#include "libu64/u64types.h"
#include "dolphin/os.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "libc64/__osMalloc.h"
#include "m_rcp.h"
#include "main.h"
+22 -22
View File
@@ -24,7 +24,7 @@
#include "m_card.h"
#include "m_flashrom.h"
#include "dolphin/dvd.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "boot.h"
#include "m_common_data.h"
@@ -145,7 +145,7 @@ static void Debug_Print2_output(gfxprint_t* gfxprint) {
}
}
#define PAD_BUTTON_DOWN(buttons, button) (((int)(buttons) | (~(int)(button))) == -1)
#define PAD_BUTTON_IS_DOWN(buttons, button) (((int)(buttons) | (~(int)(button))) == -1)
static int Debug_console(pad_t* pad) {
static f32 console_scroll;
@@ -161,7 +161,7 @@ static int Debug_console(pad_t* pad) {
if (sys_console != NULL) {
/* Toggle console visiblity when Z button is released */
if (PAD_BUTTON_DOWN(pad->on.button, BUTTON_Z) && (pad->now.button & (~BUTTON_Z)) == 0) {
if (PAD_BUTTON_IS_DOWN(pad->on.button, BUTTON_Z) && (pad->now.button & (~BUTTON_Z)) == 0) {
JC_JUTConsole_setVisible(sys_console, !JC_JUTConsole_isVisible(sys_console));
}
@@ -171,12 +171,12 @@ static int Debug_console(pad_t* pad) {
f32 log_stick_y = (f32)pad->off.stick_y / 60.0f;
/* B button clears console */
if (PAD_BUTTON_DOWN(pad->on.button, BUTTON_B)) {
if (PAD_BUTTON_IS_DOWN(pad->on.button, BUTTON_B)) {
JC_JUTConsole_clear(sys_console);
}
/* L button to scroll */
if (PAD_BUTTON_DOWN(pad->now.button, BUTTON_L)) {
if (PAD_BUTTON_IS_DOWN(pad->now.button, BUTTON_L)) {
console_scroll -= log_stick_y;
if (console_scroll > 1.0f) {
@@ -221,7 +221,7 @@ static int Debug_console(pad_t* pad) {
}
/* R button re-prints console */
if (PAD_BUTTON_DOWN(pad->on.button, BUTTON_R)) {
if (PAD_BUTTON_IS_DOWN(pad->on.button, BUTTON_R)) {
JC_JUTConsole_dumpToTerminal(sys_console, -1); /* -1 is probably a define */
JC_JUTConsole_setOutput(sys_console, 3); /* Again, 3 is probably a define */
}
@@ -257,7 +257,7 @@ extern void Debug_mode_input(pad_t* pad) {
int dpad = now_button & (BUTTON_DRIGHT | BUTTON_DLEFT | BUTTON_DDOWN | BUTTON_DUP);
/* L + R held shows the disk info, copy date, and zurumode/appNMI buffer state */
if (PAD_BUTTON_DOWN(now_button, BUTTON_L) && PAD_BUTTON_DOWN(now_button, BUTTON_R)) {
if (PAD_BUTTON_IS_DOWN(now_button, BUTTON_L) && PAD_BUTTON_IS_DOWN(now_button, BUTTON_R)) {
DVDDiskID* diskid = DVDGetCurrentDiskID();
if (diskid != NULL) {
JW_JUTReport(50, 50, 1, "%.4s %.2s 0x%02x(%d)", diskid->gameName, diskid->company, diskid->gameVersion, diskid->gameVersion);
@@ -270,7 +270,7 @@ extern void Debug_mode_input(pad_t* pad) {
JW_JUTReport(50, 60, 1, "Z=%d Z2=%d ANB=%08x", zurumode_flag != 0, zurumode_flag >= 2, APPNMI_GETVAL());
/* Additionally, pressing Z after L + R will print out each bit in debug appNMI buffer */
if (PAD_BUTTON_DOWN(pad->now.button, BUTTON_Z)) {
if (PAD_BUTTON_IS_DOWN(pad->now.button, BUTTON_Z)) {
int i;
for (i = 0; i < 32; i++) {
JW_JUTReport(50 + i * 12, 70, 1, "%1x", (APPNMI_GETVAL() >> (31 - i)) & 1);
@@ -278,7 +278,7 @@ extern void Debug_mode_input(pad_t* pad) {
}
}
if (zurumode_flag >= 2 && (PAD_BUTTON_DOWN(pad->now.button, BUTTON_L) || PAD_BUTTON_DOWN(pad->now.button, BUTTON_R) || PAD_BUTTON_DOWN(pad->now.button, BUTTON_START))) {
if (zurumode_flag >= 2 && (PAD_BUTTON_IS_DOWN(pad->now.button, BUTTON_L) || PAD_BUTTON_IS_DOWN(pad->now.button, BUTTON_R) || PAD_BUTTON_IS_DOWN(pad->now.button, BUTTON_START))) {
/* Button combos to get to each register */
static debug_reg_keycombo_t key_data[DEBUG_REG_MAX] = {
{BUTTON_L, BUTTON_CUP}, /* REG */
@@ -324,8 +324,8 @@ extern void Debug_mode_input(pad_t* pad) {
int i;
for (i = 0; i < DEBUG_REG_MAX; i++) {
if (PAD_BUTTON_DOWN(pad->now.button, key_data[i].held) &&
PAD_BUTTON_DOWN(pad->on.button, key_data[i].pressed)) {
if (PAD_BUTTON_IS_DOWN(pad->now.button, key_data[i].held) &&
PAD_BUTTON_IS_DOWN(pad->on.button, key_data[i].pressed)) {
break;
}
}
@@ -379,37 +379,37 @@ extern void Debug_mode_input(pad_t* pad) {
**/
if (dpad & BUTTON_DRIGHT) {
u16 btn = pad->now.button;
if (PAD_BUTTON_DOWN(btn, BUTTON_CUP)) {
if (PAD_BUTTON_IS_DOWN(btn, BUTTON_CUP)) {
increment = 0x1000;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_CDOWN)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_CDOWN)) {
increment = 0x100;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_A | BUTTON_B)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_A | BUTTON_B)) {
increment = 1000;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_A)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_A)) {
increment = 100;
} else {
increment = 1;
if (PAD_BUTTON_DOWN(btn, BUTTON_B)) {
if (PAD_BUTTON_IS_DOWN(btn, BUTTON_B)) {
increment = 10;
}
}
} else if (dpad & BUTTON_DLEFT) {
u16 btn = pad->now.button;
if (PAD_BUTTON_DOWN(btn, BUTTON_CUP)) {
if (PAD_BUTTON_IS_DOWN(btn, BUTTON_CUP)) {
increment = -0x1000;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_CDOWN)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_CDOWN)) {
increment = -0x100;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_A | BUTTON_B)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_A | BUTTON_B)) {
increment = -1000;
}
/* lol the missed duplicated case */
else if (PAD_BUTTON_DOWN(btn, BUTTON_A | BUTTON_B)) {
else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_A | BUTTON_B)) {
increment = -1000;
} else if (PAD_BUTTON_DOWN(btn, BUTTON_A)) {
} else if (PAD_BUTTON_IS_DOWN(btn, BUTTON_A)) {
increment = -100;
} else {
increment = -1;
if (PAD_BUTTON_DOWN(btn, BUTTON_B)) {
if (PAD_BUTTON_IS_DOWN(btn, BUTTON_B)) {
increment = -10;
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
#include "lb_rtc.h"
#include "m_scene_table.h"
#include "m_malloc.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#define CRC32_POLYNOMIAL 0xEDB88320
#define CRC32_START_VALUE 0xAA478422
+1 -1
View File
@@ -7,7 +7,7 @@
#include "m_scene_table.h"
#include "m_random_field.h"
#include "m_soncho.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_malloc.h"
#include "libultra/libultra.h"
#include "m_bg_tex.h"
+1 -1
View File
@@ -1,6 +1,6 @@
#include "m_handbill.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_msg.h"
#include "m_string.h"
#include "m_font.h"
+1 -1
View File
@@ -5,7 +5,7 @@
#include "m_random_field.h"
#include "m_malloc.h"
#include "libultra/libultra.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
static Island_c l_keepIsland;
static u16 l_keepIslandComb[mISL_FG_BLOCK_X_NUM * mISL_FG_BLOCK_Z_NUM];
+1 -1
View File
@@ -3,7 +3,7 @@
#include "m_string.h"
#include "m_private.h"
#include "m_common_data.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "libultra/libultra.h"
#include "m_lib.h"
+1 -1
View File
@@ -13,7 +13,7 @@
#include "ac_my_room.h"
#include "m_mail_password_check.h"
#include "libultra/libultra.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
extern mNpc_Default_Data_c npc_def_list[];
extern s8 npc_grow_list[];
+1 -1
View File
@@ -8,7 +8,7 @@
#include "game.h"
#include "m_house.h"
#include "dolphin/os/OSCache.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_player_lib.h"
typedef struct ftr_place_data_s {
+1 -1
View File
@@ -2,7 +2,7 @@
#include "m_player_lib.h"
#include "libultra/libultra.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_play.h"
#include "m_common_data.h"
#include "m_npc.h"
+1 -1
View File
@@ -1,7 +1,7 @@
#include "m_string.h"
#include "m_msg.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_lib.h"
#include "m_font.h"
#include "m_mail.h"
+1 -1
View File
@@ -27,7 +27,7 @@
#include "m_vibctl.h"
#include "sys_matrix.h"
#include "sys_vimgr.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "libc64/qrand.h"
#include "m_common_data.h"
#include "m_play.h"
+1 -1
View File
@@ -6,7 +6,7 @@
#include "graph.h"
#include "libultra/osMesg.h"
#include "libultra/os_thread.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "m_card.h"
#include "_mem.h"
#include "padmgr.h"
+1 -1
View File
@@ -13,7 +13,7 @@
#include "libc64/sleep.h"
#include "libforest/osreport.h"
#include "libforest/emu64/emu64_wrapper.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "libultra/initialize.h"
#include "libultra/contreaddata.h"
#include "libultra/libultra.h"
+1 -1
View File
@@ -4,7 +4,7 @@
#include "dolphin/dvd.h"
#include "libforest/gbi_extensions.h"
#include "libforest/emu64/emu64_wrapper.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "dolphin/vi.h"
#include "dolphin/gx.h"
+1 -1
View File
@@ -3,7 +3,7 @@
#include "libforest/gbi_extensions.h"
#include "m_nmibuf.h"
#include "dolphin/dvd.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "boot.h"
#include "dolphin/os/OSFont.h"
#include "bootdata.h"
+588
View File
@@ -0,0 +1,588 @@
#include "jsyswrap_cpp.h"
#include "JSystem/JSystem.h"
#include "JSystem/JUtility/JUTGamePad.h"
#include "JSystem/JUtility/TColor.h"
#include "libforest/emu64.h"
#include "_mem.h"
#include "m_lib.h"
#include "dolphin/os/OSArena.h"
#include "libc64/malloc.h"
/* These bytes are probably generated by an unused function that got stripped... thanks mwcc */
#ifdef MUST_MATCH
#pragma force_active on
u8 _jsyswrap_autogen_match[0x40];
#pragma force_active reset
#endif
JUTGamePad gamePad[4];
static void* jc_fader = nullptr;
static void* forest_arc_aram_p = nullptr;
static void* forest_arc_aram2_p = nullptr;
static void* gameheap_base;
static void* jc_gport = nullptr;
static void* jc_sysConsole = nullptr;
static u8 video_progressive = 0;
static u8 video_lowreso = 0;
static u8 video_famicom = 0;
static u8 video_logo = 0;
static u8 video_pan_enable = 0;
static u16 video_pan_xorg = 0;
static u16 video_pan_yorg = 0;
static u16 video_pan_width = 0;
static u16 video_pan_height = 0;
static u32 SystemHeapSize = 0x16C7000;
static u32 gameheap_len = 0x380000;
static GXRenderModeObj customized_GXNtsc240Ds = {
VI_TVMODE_NTSC_DS,
640,
240,
240,
30,
0,
660,
480,
VI_XFBMODE_SF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 0, 0, 21, 22, 21, 0, 0 }
};
static GXRenderModeObj customized_GXNtsc240Prog = {
VI_TVMODE_NTSC_PROG,
640,
240,
480,
30,
0,
660,
480,
VI_XFBMODE_SF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 0, 0, 21, 22, 21, 0, 0 }
};
static GXRenderModeObj customized_GXNtsc240IntDf = {
VI_TVMODE_NTSC_INT,
640,
240,
480,
30,
0,
660,
480,
VI_XFBMODE_DF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 8, 8, 10, 12, 10, 8, 8 }
};
static GXRenderModeObj customized_GXNtsc480Ds = {
VI_TVMODE_NTSC_DS,
640,
480,
240,
30,
0,
660,
480,
VI_XFBMODE_SF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 0, 0, 21, 22, 21, 0, 0 }
};
static GXRenderModeObj customized_GXNtsc480IntDf = {
VI_TVMODE_NTSC_INT,
640,
480,
480,
30,
0,
660,
480,
VI_XFBMODE_DF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 8, 8, 10, 12, 10, 8, 8 }
};
static GXRenderModeObj customized_GXNtsc480Prog = {
VI_TVMODE_NTSC_PROG,
640,
480,
480,
30,
0,
660,
480,
VI_XFBMODE_SF,
FALSE,
FALSE,
{
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 },
{ 6, 6 }
},
{ 0, 0, 21, 22, 21, 0, 0 }
};
static void ReportDiskID() {
DVDDiskID* disk_id = DVDGetCurrentDiskID();
/* @NOTE: taken from e+ */
JSYSWRAPPER_PRINTF(jc_sysConsole, "DiskID %.4s %.2s %d 0x%02x(%d)\n", disk_id->gameName, disk_id->company, disk_id->diskNumber, disk_id->gameVersion);
}
extern void JW_UpdateVideoMode() {
GXRenderModeObj* renderMode;
if (video_famicom) {
video_pan_xorg = 32;
video_pan_yorg = 8;
video_pan_width = 256;
video_pan_height = 232;
if (video_lowreso != FALSE && video_progressive == FALSE) {
renderMode = &customized_GXNtsc240Ds;
}
else {
video_pan_yorg *= 2;
video_pan_height *= 2;
if (video_progressive != FALSE) {
renderMode = &customized_GXNtsc240Prog;
}
else {
renderMode = &customized_GXNtsc240IntDf;
}
}
}
else {
if (video_logo) {
video_pan_xorg = 0;
video_pan_yorg = 0;
video_pan_width = 640;
video_pan_height = 480;
}
else {
video_pan_xorg = 20;
video_pan_yorg = 6;
video_pan_width = 598;
video_pan_height = 464;
}
if (video_progressive) {
renderMode = &customized_GXNtsc480Prog;
}
else {
renderMode = &customized_GXNtsc480IntDf;
}
}
if (renderMode != NULL) {
VIWaitForRetrace();
JC_JUTVideo_setRenderMode(JC_JUTVideo_getManager(), renderMode);
}
if (video_pan_enable) {
VIConfigurePan(video_pan_xorg, video_pan_yorg, video_pan_width, video_pan_height);
}
}
extern void JW_SetProgressiveMode(int enabled) {
if (video_progressive != enabled) {
video_progressive = enabled;
JW_UpdateVideoMode();
}
}
extern void JW_SetLowResoMode(int enabled) {
if (video_lowreso != enabled) {
video_lowreso = enabled;
JW_UpdateVideoMode();
}
}
extern void JW_SetFamicomMode(int enabled) {
if (video_famicom != enabled) {
video_famicom = enabled;
JW_UpdateVideoMode();
}
}
extern void JW_SetVideoPan(u16 origin_x, u16 origin_y, u16 width, u16 height) {
if (video_pan_xorg != origin_x || video_pan_yorg != origin_y || video_pan_width != width || video_pan_height != height) {
video_pan_enable = TRUE;
video_pan_xorg = origin_x;
video_pan_yorg = origin_y;
video_pan_width = width;
video_pan_height = height;
}
}
extern void JW_SetLogoMode(int enabled) {
if (video_logo != enabled) {
video_logo = enabled;
JW_UpdateVideoMode();
}
}
extern void JW_JUTGamePad_read() {
static OSTime last_pad_read;
OSTime now = OSGetTime();
if (now > last_pad_read + OSMillisecondsToTicks(16) || now < last_pad_read) {
last_pad_read = now;
JC_JUTGamePad_read();
}
}
extern void JW_getPadStatus(PADStatus* padStatus) {
memcpy(&padStatus[0], &JUTGamePad::mPadStatus[0], sizeof(PADStatus));
memcpy(&padStatus[1], &JUTGamePad::mPadStatus[1], sizeof(PADStatus));
memcpy(&padStatus[2], &JUTGamePad::mPadStatus[2], sizeof(PADStatus));
memcpy(&padStatus[3], &JUTGamePad::mPadStatus[3], sizeof(PADStatus));
}
extern int JW_JUTGamepad_getErrorStatus() {
return (s8)gamePad[0].mErrorStatus;
}
extern u32 JW_JUTGamepad_getButton() {
return gamePad[0].mButtons.mButton;
}
extern u32 JW_JUTGamepad_getTrigger() {
return gamePad[0].mButtons.mTrigger;
}
extern f32 JW_JUTGamepad_getSubStickValue() {
return gamePad[0].mSubStick.mValue;
}
extern int JW_JUTGamepad_getSubStickAngle() {
return gamePad[0].mSubStick.mAngle;
}
static bool FrameDrawing = false;
extern void JW_BeginFrame() {
while (FrameCansel) {
VIWaitForRetrace();
}
FrameDrawing = true;
void* displayManager = JC_JFWDisplay_getManager();
JC_JFWDisplay_endFrame(displayManager);
JC_JFWDisplay_beginRender(displayManager);
JC_J2DOrthoGraph_setOrtho(jc_gport, 0, 0, JC_JFWDisplay_getEfbWidth(displayManager), JC_JFWDisplay_getEfbHeight(displayManager));
JC_J2DOrthoGraph_setPort(jc_gport);
}
extern void JW_EndFrame() {
JC_JFWDisplay_endRender(JC_JFWDisplay_getManager());
FrameDrawing = false;
}
extern int JW_setClearColor(u8 r, u8 g, u8 b) {
static GXColor clear_color;
if (clear_color.r != r || clear_color.g != g || clear_color.b != b) {
void* manager = JC_JFWDisplay_getManager();
clear_color.r = r;
clear_color.g = g;
clear_color.b = b;
JC_JFWDisplay_setClearColor(manager, clear_color);
return TRUE;
}
return FALSE;
}
static const char* aram_resName[] = {
"fgdata.bin",
"mail_data.bin",
"mail_data_table.bin",
"maila_data.bin",
"maila_data_table.bin",
"mailb_data.bin",
"mailb_data_table.bin",
"mailc_data.bin",
"mailc_data_table.bin",
"pallet_boy.bin",
"ps_data.bin",
"ps_data_table.bin",
"psz_data.bin",
"psz_data_table.bin",
"select_data.bin",
"select_data_table.bin",
"string_data.bin",
"string_data_table.bin",
"superz_data.bin",
"superz_data_table.bin",
"super_data.bin",
"super_data_table.bin",
"tex_boy.bin",
"face_boy.bin",
"fgnpcdata.bin",
"message_data.bin",
"message_data_table.bin",
"my_original.bin",
"needlework.bin",
"player_room_floor.bin",
"player_room_wall.bin",
"npc_name_str_table.bin",
"d_obj_npc_stock_sch.bin",
"d_obj_npc_stock_scl.bin",
"title.bti",
"mura_spring.bti",
"mura_summer.bti",
"mura_fall.bti",
"mura_winter.bti",
"odekake.bti",
"omake.bti",
"eki1.bti",
"eki1_2.bti",
"eki1_3.bti",
"eki1_4.bti",
"eki1_5.bti",
"eki2.bti",
"eki2_2.bti",
"eki2_3.bti",
"eki2_4.bti",
"eki2_5.bti",
"eki3.bti",
"eki3_2.bti",
"eki3_3.bti",
"eki3_4.bti",
"eki3_5.bti",
"tegami.bti",
"tegami2.bti",
"famikon.bti",
"boy1.bti",
"boy2.bti",
"boy3.bti",
"boy4.bti",
"boy5.bti",
"boy6.bti",
"boy7.bti",
"boy8.bti",
"girl1.bti",
"girl2.bti",
"girl3.bti",
"girl4.bti",
"girl5.bti",
"girl6.bti",
"girl7.bti",
"girl8.bti",
"d_bg_island_sch.bin"
};
extern u32 JW_GetAramAddress(int res_no) {
int address = 0;
if (res_no >= RESOURCE_FGDATA && res_no < RESOURCE_FGNPCDATA) {
address = JC_JKRAramArchive_getAramAddress_byName(forest_arc_aram_p, (u32)'DATA', aram_resName[res_no]);
}
else if (res_no >= RESOURCE_FGNPCDATA && res_no < RESOURCE_NUM) {
address = JC_JKRAramArchive_getAramAddress_byName(forest_arc_aram2_p, (u32)'DATA', aram_resName[res_no]);
}
return address;
}
extern u8* _JW_GetResourceAram(u32 aram_addr, u8* dst, u32 size) {
return JKRAramToMainRam(aram_addr, dst, size, EXPAND_SWITCH_DEFAULT, 0, nullptr, -1, nullptr);
}
extern u32 JW_GetResSizeFileNo(int res_no) {
int res_size = 0;
if (res_no >= RESOURCE_FGDATA && res_no < RESOURCE_FGNPCDATA) {
CSDIFileEntry* entry = JC__JKRGetResourceEntry_byName((u32)'DATA', aram_resName[res_no], forest_arc_aram_p);
if (entry != nullptr) {
res_size = entry->mSize;
}
}
else if (res_no >= RESOURCE_FGNPCDATA && res_no < RESOURCE_NUM) {
CSDIFileEntry* entry = JC__JKRGetResourceEntry_byName((u32)'DATA', aram_resName[res_no], forest_arc_aram2_p);
if (entry != nullptr) {
res_size = entry->mSize;
}
}
return res_size;
}
extern void JW_Init() {
const u32 soundAramSize = 0x810000;
const u32 graphAramSize = 0x6A3780;
void* arena_hi = OSGetArenaHi();
void* arena_lo = OSGetArenaLo();
SystemHeapSize = (u32)arena_hi - (u32)arena_lo - 0xD0;
JC_JFWSystem_setMaxStdHeap(1);
JC_JFWSystem_setSysHeapSize(SystemHeapSize);
JC_JFWSystem_setFifoBufSize(0x10001);
OSReport("soundAramSize=%08x graphAramSize=%08x totalAramSize=%08x\n", soundAramSize, graphAramSize, soundAramSize + graphAramSize);
JC_JFWSystem_setAramAudioBufSize(soundAramSize);
JC_JFWSystem_setAramGraphBufSize(graphAramSize);
JC_JFWSystem_init();
JC_JKRExpHeap_changeGroupID(JC_JFWSystem_getSystemHeap(), 1);
jc_sysConsole = JC_JFWSystem_getSystemConsole();
JC_JUTConsole_setOutput(jc_sysConsole, 3);
JC_JUTConsole_setPosition(jc_sysConsole, 32, 42);
void* display_manager = JC_JFWDisplay_createManager_0(&GXNtsc480IntDf, JC_JFWSystem_getSystemHeap(), 2, 1);
JC_JUTProcBar_setVisible(JC_JUTProcBar_getManager(), FALSE);
JC_JUTProcBar_setVisibleHeapBar(JC_JUTProcBar_getManager(), FALSE);
jc_gport = JC_J2DOrthoGraph_new();
u32 color = TCOLOR_BLACK;
jc_fader = JC_JUTFader_new(0, 0, JC_JUTVideo_getFbWidth(JC_JUTVideo_getManager()), JC_JUTVideo_getEfbHeight(JC_JUTVideo_getManager()), &color);
JC_JFWDisplay_setFader(display_manager, jc_fader);
JC_JFWDisplay_setClearColor(display_manager, TCOLOR_BLACK);
JC_JFWDisplay_setGamma(display_manager, 0);
JW_SetVideoPan(20, 6, 598, 464);
JW_SetLogoMode(1);
JC_JKRExpHeap_changeGroupID(JC_JFWSystem_getSystemHeap(), 2);
}
extern void JW_Init2() {
JC_JKRExpHeap_changeGroupID(JC_JFWSystem_getSystemHeap(), 3);
ReportDiskID();
if (forest_arc_aram_p == nullptr) {
forest_arc_aram_p = JC_JKRAramArchive_new();
if (forest_arc_aram_p == nullptr || JC__JKRMountFixedAramArchive(forest_arc_aram_p, "forest_1st.arc") == FALSE) {
OSDVDFatalError();
}
}
gameheap_len = JC_JKRHeap_getFreeSize(JC_JFWSystem_getSystemHeap()) - 0x10000;
gameheap_base = JC_JKRHeap_alloc(JC_JFWSystem_getSystemHeap(), gameheap_len, 32);
MallocInit(gameheap_base, gameheap_len);
JC_JKRExpHeap_changeGroupID(JC_JFWSystem_getSystemHeap(), 4);
}
extern void JW_Init3() {
if (forest_arc_aram2_p == nullptr) {
forest_arc_aram2_p = JC_JKRAramArchive_new();
if (forest_arc_aram2_p == nullptr || JC__JKRMountFixedAramArchive(forest_arc_aram2_p, "forest_2nd.arc") == FALSE) {
OSDVDFatalError();
}
}
}
extern void JW_Cleanup() {
MallocCleanup();
JC_JKRHeap_free(JC_JFWSystem_getSystemHeap(), gameheap_base);
gameheap_base = nullptr;
if (forest_arc_aram_p != nullptr) {
JC__JKRUnmountFixedAramArchive(forest_arc_aram_p);
JC_JKRAramArchive_delete(forest_arc_aram_p);
forest_arc_aram_p = nullptr;
}
if (forest_arc_aram2_p != nullptr) {
JC__JKRUnmountFixedAramArchive(forest_arc_aram2_p);
JC_JKRAramArchive_delete(forest_arc_aram2_p);
forest_arc_aram2_p = nullptr;
}
JC_JFWDisplay_destroyManager();
if (jc_fader != nullptr) {
JC_JUTFader_delete(jc_fader);
jc_fader = nullptr;
}
if (jc_gport != nullptr) {
JC_J2DOrthoGraph_delete(jc_gport);
jc_gport = nullptr;
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
#include "libforest/fault.h"
#include "terminal.h"
#include "va_args.h"
#include "libjsys/jsyswrapper.h"
#include "jsyswrap.h"
#include "dolphin/os.h"
static fault* this = NULL;