mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Link gx, pad, si, exi, dvd, card
This commit is contained in:
+49
-43
@@ -168,6 +168,9 @@ config.asflags = [
|
||||
"-mgekko",
|
||||
"--strip-local-absolute",
|
||||
"-I include",
|
||||
"-I include/dolphin",
|
||||
"-I include/libc",
|
||||
"-I src/static/dolphin",
|
||||
f"-I build/{config.version}/include",
|
||||
f"-I build/{config.version}/bin/assets", # needed for JUTResFONT_Ascfont_fix12
|
||||
f"--defsym version={version_num}",
|
||||
@@ -210,6 +213,9 @@ cflags_base = [
|
||||
"-nosyspath",
|
||||
# dtk-specific includes
|
||||
"-i include",
|
||||
"-i include/dolphin",
|
||||
"-i include/libc",
|
||||
"-i src/static/dolphin",
|
||||
f"-i build/{config.version}/include",
|
||||
f"-DVERSION={version_num}",
|
||||
]
|
||||
@@ -262,7 +268,7 @@ def DolphinLib(lib_name: str, objects: List[Object]) -> Dict[str, Any]:
|
||||
return {
|
||||
"lib": lib_name,
|
||||
"mw_version": "GC/1.2.5n",
|
||||
"cflags": [*cflags_runtime],
|
||||
"cflags": [*cflags_runtime, "-char signed"],
|
||||
"progress_category": "sdk",
|
||||
"src_dir": "src/static",
|
||||
"objects": objects,
|
||||
@@ -453,22 +459,22 @@ config.libs = [
|
||||
DolphinLib(
|
||||
"card",
|
||||
[
|
||||
Object(NonMatching, "dolphin/card/CARDBios.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDBlock.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDCheck.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDCreate.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDDelete.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDDir.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDFormat.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDMount.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDNet.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDOpen.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDRdwr.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDRead.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDRename.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDStat.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDStatEx.c"),
|
||||
Object(NonMatching, "dolphin/card/CARDWrite.c"),
|
||||
Object(Matching, "dolphin/card/CARDBios.c"),
|
||||
Object(Matching, "dolphin/card/CARDBlock.c"),
|
||||
Object(Matching, "dolphin/card/CARDCheck.c"),
|
||||
Object(Matching, "dolphin/card/CARDCreate.c"),
|
||||
Object(Matching, "dolphin/card/CARDDelete.c"),
|
||||
Object(Matching, "dolphin/card/CARDDir.c"),
|
||||
Object(Matching, "dolphin/card/CARDFormat.c"),
|
||||
Object(Matching, "dolphin/card/CARDMount.c"),
|
||||
Object(Matching, "dolphin/card/CARDNet.c"),
|
||||
Object(Matching, "dolphin/card/CARDOpen.c"),
|
||||
Object(Matching, "dolphin/card/CARDRdwr.c"),
|
||||
Object(Matching, "dolphin/card/CARDRead.c"),
|
||||
Object(Matching, "dolphin/card/CARDRename.c"),
|
||||
Object(Matching, "dolphin/card/CARDStat.c"),
|
||||
Object(Matching, "dolphin/card/CARDStatEx.c"),
|
||||
Object(Matching, "dolphin/card/CARDWrite.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
@@ -486,19 +492,19 @@ config.libs = [
|
||||
DolphinLib(
|
||||
"dvd",
|
||||
[
|
||||
Object(NonMatching, "dolphin/dvd/dvd.c"),
|
||||
Object(NonMatching, "dolphin/dvd/dvderror.c"),
|
||||
Object(NonMatching, "dolphin/dvd/dvdfs.c"),
|
||||
Object(NonMatching, "dolphin/dvd/dvdlow.c"),
|
||||
Object(NonMatching, "dolphin/dvd/dvdqueue.c"),
|
||||
Object(NonMatching, "dolphin/dvd/fstload.c"),
|
||||
Object(Matching, "dolphin/dvd/dvd.c"),
|
||||
Object(Matching, "dolphin/dvd/dvderror.c"),
|
||||
Object(Matching, "dolphin/dvd/dvdfs.c"),
|
||||
Object(Matching, "dolphin/dvd/dvdlow.c"),
|
||||
Object(Matching, "dolphin/dvd/dvdqueue.c"),
|
||||
Object(Matching, "dolphin/dvd/fstload.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
"exi",
|
||||
[
|
||||
Object(NonMatching, "dolphin/exi/EXIBios.c"),
|
||||
Object(NonMatching, "dolphin/exi/EXIUart.c"),
|
||||
Object(Matching, "dolphin/exi/EXIBios.c"),
|
||||
Object(Matching, "dolphin/exi/EXIUart.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
@@ -515,21 +521,21 @@ config.libs = [
|
||||
DolphinLib(
|
||||
"gx",
|
||||
[
|
||||
Object(NonMatching, "dolphin/gx/GXAttr.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXBump.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXDisplayList.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXFifo.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXFrameBuf.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXGeometry.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXInit.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXLight.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXMisc.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXPerf.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXPixel.c"),
|
||||
Object(Matching, "dolphin/gx/GXAttr.c"),
|
||||
Object(Matching, "dolphin/gx/GXBump.c"),
|
||||
Object(Matching, "dolphin/gx/GXDisplayList.c"),
|
||||
Object(Matching, "dolphin/gx/GXFifo.c"),
|
||||
Object(Matching, "dolphin/gx/GXFrameBuf.c"),
|
||||
Object(Matching, "dolphin/gx/GXGeometry.c"),
|
||||
Object(Matching, "dolphin/gx/GXInit.c"),
|
||||
Object(Matching, "dolphin/gx/GXLight.c"),
|
||||
Object(Matching, "dolphin/gx/GXMisc.c"),
|
||||
Object(Matching, "dolphin/gx/GXPerf.c"),
|
||||
Object(Matching, "dolphin/gx/GXPixel.c"),
|
||||
Object(Matching, "dolphin/gx/GXStubs.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXTev.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXTexture.c"),
|
||||
Object(NonMatching, "dolphin/gx/GXTransform.c"),
|
||||
Object(Matching, "dolphin/gx/GXTev.c"),
|
||||
Object(Matching, "dolphin/gx/GXTexture.c"),
|
||||
Object(Matching, "dolphin/gx/GXTransform.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
@@ -584,15 +590,15 @@ config.libs = [
|
||||
DolphinLib(
|
||||
"pad",
|
||||
[
|
||||
Object(NonMatching, "dolphin/pad/Pad.c"),
|
||||
Object(NonMatching, "dolphin/pad/Padclamp.c"),
|
||||
Object(Matching, "dolphin/pad/Pad.c"),
|
||||
Object(Matching, "dolphin/pad/Padclamp.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
"si",
|
||||
[
|
||||
Object(NonMatching, "dolphin/si/SIBios.c"),
|
||||
Object(NonMatching, "dolphin/si/SISamplingRate.c"),
|
||||
Object(Matching, "dolphin/si/SIBios.c"),
|
||||
Object(Matching, "dolphin/si/SISamplingRate.c"),
|
||||
],
|
||||
),
|
||||
DolphinLib(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _JSYSTEM_JUT_JUTCONSOLE_H
|
||||
#define _JSYSTEM_JUT_JUTCONSOLE_H
|
||||
|
||||
#include "va_args.h"
|
||||
// #include "va_args.h"
|
||||
#include "JSystem/JGadget/linklist.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTFont.h"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define JUTDIRECTPRINT_H
|
||||
|
||||
#include "types.h"
|
||||
#include "va_args.h"
|
||||
// #include "va_args.h"
|
||||
#include "JSystem/JUtility/TColor.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
void changeFrameBuffer(void *framebuffer, u16 w, u16 h );
|
||||
|
||||
// Inline/Unused
|
||||
void printSub(u16, u16, const char *, __va_list_struct *, bool);
|
||||
void printSub(u16, u16, const char *, va_list *, bool);
|
||||
void print(u16, u16, const char *, ...);
|
||||
|
||||
bool isActive() const { return mFramebuffer != nullptr; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define JUTFONT_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/string.h"
|
||||
#include "string.h"
|
||||
#include "dolphin/gx.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "JSystem/JUtility/TColor.h"
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
#define JUTGAMEPAD_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include "dolphin/pad.h"
|
||||
#include <dolphin/os.h>
|
||||
#include <dolphin/pad.h>
|
||||
#include "JSystem/JKernel/JKRDisposer.h"
|
||||
#include "JSystem/JUtility/JUTAssertion.h"
|
||||
|
||||
@@ -103,7 +102,7 @@ public:
|
||||
static void checkResetSwitch();
|
||||
|
||||
static bool mListInitialized;
|
||||
static u8 mPadAssign[PAD_CONTROLLER_NUM];
|
||||
static u8 mPadAssign[PAD_MAX_CONTROLLERS];
|
||||
static u32 mSuppressPadReset;
|
||||
static u32 sAnalogMode;
|
||||
|
||||
@@ -290,7 +289,7 @@ public:
|
||||
|
||||
CRumble(JUTGamePad* gamePad) { this->clear(gamePad); }
|
||||
|
||||
static u8 mStatus[PAD_CONTROLLER_NUM];
|
||||
static u8 mStatus[PAD_MAX_CONTROLLERS];
|
||||
static u32 mEnabled;
|
||||
|
||||
static void startMotor(int port);
|
||||
@@ -332,14 +331,14 @@ public:
|
||||
static PADStatus *getPadStatus(int idx) { return &mPadStatus[idx]; }
|
||||
|
||||
static JSUList<JUTGamePad> mPadList;
|
||||
static CButton mPadButton[PAD_CONTROLLER_NUM];
|
||||
static CStick mPadMStick[PAD_CONTROLLER_NUM];
|
||||
static CStick mPadSStick[PAD_CONTROLLER_NUM];
|
||||
static CButton mPadButton[PAD_MAX_CONTROLLERS];
|
||||
static CStick mPadMStick[PAD_MAX_CONTROLLERS];
|
||||
static CStick mPadSStick[PAD_MAX_CONTROLLERS];
|
||||
static EStickMode sStickMode;
|
||||
static EClampMode sClampMode;
|
||||
static f32 sPressPoint;
|
||||
static f32 sReleasePoint;
|
||||
static PADStatus mPadStatus[PAD_CONTROLLER_NUM];
|
||||
static PADStatus mPadStatus[PAD_MAX_CONTROLLERS];
|
||||
|
||||
|
||||
CButton mButtons; // _18
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
#define MSL_PRINTF_H
|
||||
|
||||
#include "types.h"
|
||||
#include "va_args.h"
|
||||
// #include "va_args.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void vprintf(const char*, va_list);
|
||||
extern void printf(const char*, ...);
|
||||
extern int vprintf(const char*, va_list);
|
||||
extern int printf(const char*, ...);
|
||||
int snprintf(char* s, size_t n, const char* format, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -43,7 +43,7 @@ typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \
|
||||
u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)]
|
||||
|
||||
#define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName))
|
||||
// #define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName))
|
||||
|
||||
typedef struct _YET_SKELETON {
|
||||
cKF_SkeletonInfo_R_c _00; // offset 0, size 0x70
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#ifndef _DOLPHIN_CMATH_H_
|
||||
#define _DOLPHIN_CMATH_H_
|
||||
|
||||
float powf(float x, float y);
|
||||
float tanf(float);
|
||||
|
||||
#endif // _DOLPHIN_CMATH_H_
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef _DOLPHIN_H_
|
||||
#define _DOLPHIN_H_
|
||||
|
||||
#include <dolphin/types.h>
|
||||
#include <dolphin/os.h>
|
||||
#include <dolphin/dsp.h>
|
||||
#include <dolphin/dvd.h>
|
||||
#include <dolphin/gx.h>
|
||||
// #include <dolphin/hio.h>
|
||||
#include <dolphin/mtx.h>
|
||||
#include <dolphin/vi.h>
|
||||
#include <dolphin/card.h>
|
||||
// #include <dolphin/perf.h>
|
||||
// #include <dolphin/ar.h>
|
||||
#include <dolphin/base/PPCArch.h>
|
||||
#include <dolphin/db.h>
|
||||
#include <dolphin/pad.h>
|
||||
// #include <dolphin/dtk.h>
|
||||
#include <dolphin/ai.h>
|
||||
// #include <dolphin/demo.h>
|
||||
|
||||
#include "macros.h"
|
||||
|
||||
#endif
|
||||
+133
-31
@@ -1,11 +1,124 @@
|
||||
#ifndef _DOLPHIN_CARD
|
||||
#define _DOLPHIN_CARD
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
#include <dolphin/dsp.h>
|
||||
#include <dolphin/dvd.h>
|
||||
#include <dolphin/os/OSAlarm.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CARD_FILENAME_MAX 32
|
||||
#define CARD_MAX_FILE 127
|
||||
#define CARD_ICON_MAX 8
|
||||
|
||||
typedef void (*CARDCallback)(s32 chan, s32 result);
|
||||
|
||||
// todo: sort into headers
|
||||
typedef struct CARDFileInfo
|
||||
{
|
||||
/*0x00*/ s32 chan;
|
||||
/*0x04*/ s32 fileNo;
|
||||
/*0x08*/ s32 offset;
|
||||
/*0x0C*/ s32 length;
|
||||
/*0x10*/ u16 iBlock;
|
||||
} CARDFileInfo;
|
||||
|
||||
typedef struct CARDDir
|
||||
{
|
||||
/*0x00*/ u8 gameName[4];
|
||||
/*0x04*/ u8 company[2];
|
||||
/*0x06*/ u8 _padding0;
|
||||
/*0x07*/ u8 bannerFormat;
|
||||
/*0x08*/ u8 fileName[CARD_FILENAME_MAX];
|
||||
/*0x28*/ u32 time; // seconds since 01/01/2000 midnight
|
||||
/*0x2C*/ u32 iconAddr; // 0xffffffff if not used
|
||||
/*0x30*/ u16 iconFormat;
|
||||
/*0x32*/ u16 iconSpeed;
|
||||
/*0x34*/ u8 permission;
|
||||
u8 copyTimes;
|
||||
/*0x36*/ u16 startBlock;
|
||||
u16 length;
|
||||
u8 _padding1[2];
|
||||
u32 commentAddr; // 0xffffffff if not used
|
||||
} CARDDir;
|
||||
|
||||
typedef struct CARDControl
|
||||
{
|
||||
/*0x00*/ BOOL attached;
|
||||
/*0x04*/ s32 result;
|
||||
/*0x08*/ u16 size;
|
||||
/*0x0A*/ u16 pageSize;
|
||||
/*0x0C*/ s32 sectorSize;
|
||||
/*0x10*/ u16 cBlock;
|
||||
/*0x12*/ u16 vendorID;
|
||||
/*0x14*/ s32 latency;
|
||||
/*0x18*/ u8 id[12];
|
||||
/*0x24*/ int mountStep;
|
||||
/*0x28*/ int formatStep;
|
||||
/*0x2C*/ u32 scramble;
|
||||
DSPTaskInfo task;
|
||||
void *workArea;
|
||||
/*0x84*/ CARDDir *currentDir;
|
||||
u16 *currentFat;
|
||||
OSThreadQueue threadQueue;
|
||||
u8 cmd[9];
|
||||
s32 cmdlen;
|
||||
volatile u32 mode;
|
||||
int retry;
|
||||
int repeat;
|
||||
u32 addr;
|
||||
void *buffer;
|
||||
s32 xferred;
|
||||
u16 freeNo;
|
||||
u16 startBlock;
|
||||
/*0xC0*/ CARDFileInfo *fileInfo;
|
||||
CARDCallback extCallback;
|
||||
CARDCallback txCallback;
|
||||
CARDCallback exiCallback;
|
||||
CARDCallback apiCallback;
|
||||
CARDCallback xferCallback;
|
||||
CARDCallback eraseCallback;
|
||||
CARDCallback unlockCallback;
|
||||
OSAlarm alarm;
|
||||
// added in Dec-17-2001 revision
|
||||
/*0x108*/ u32 cid;
|
||||
/*0x10C*/const DVDDiskID* diskID;
|
||||
} CARDControl;
|
||||
|
||||
typedef struct CARDDecParam {
|
||||
/* 0x00 */ u8 * inputAddr;
|
||||
/* 0x04 */ u32 inputLength;
|
||||
/* 0x08 */ u32 aramAddr;
|
||||
/* 0x0C */ u8 * outputAddr;
|
||||
} CARDDecParam;
|
||||
|
||||
typedef struct CARDID {
|
||||
/* 0x000 */ u8 serial[32];
|
||||
/* 0x020 */ u16 deviceID;
|
||||
/* 0x022 */ u16 size;
|
||||
/* 0x024 */ u16 encode;
|
||||
/* 0x026 */ u8 padding[470];
|
||||
/* 0x1FC */ u16 checkSum;
|
||||
/* 0x1FE */ u16 checkSumInv;
|
||||
} CARDID;
|
||||
|
||||
#include <dolphin/card/CARDBios.h>
|
||||
#include <dolphin/card/CARDCheck.h>
|
||||
#include <dolphin/card/CARDCreate.h>
|
||||
#include <dolphin/card/CARDDelete.h>
|
||||
#include <dolphin/card/CARDDir.h>
|
||||
#include <dolphin/card/CARDFormat.h>
|
||||
#include <dolphin/card/CARDMount.h>
|
||||
#include <dolphin/card/CARDOpen.h>
|
||||
#include <dolphin/card/CARDRdwr.h>
|
||||
#include <dolphin/card/CARDRead.h>
|
||||
#include <dolphin/card/CARDRename.h>
|
||||
#include <dolphin/card/CARDStat.h>
|
||||
#include <dolphin/card/CARDWrite.h>
|
||||
|
||||
#define CARD_ENCODE_ANSI 0u
|
||||
#define CARD_ENCODE_SJIS 1u
|
||||
|
||||
@@ -21,6 +134,22 @@ extern "C" {
|
||||
#define CARD_BANNER_WIDTH 96
|
||||
#define CARD_BANNER_HEIGHT 32
|
||||
|
||||
#define CARD_FAT_AVAIL 0x0000u
|
||||
#define CARD_FAT_CHECKSUM 0x0000u
|
||||
#define CARD_FAT_CHECKSUMINV 0x0001u
|
||||
#define CARD_FAT_CHECKCODE 0x0002u
|
||||
#define CARD_FAT_FREEBLOCKS 0x0003u
|
||||
#define CARD_FAT_LASTSLOT 0x0004u
|
||||
|
||||
#define CARD_SEG_SIZE 0x200u
|
||||
#define CARD_PAGE_SIZE 0x80u
|
||||
#define CARD_MAX_SIZE 0x01000000U
|
||||
|
||||
#define CARD_NUM_SYSTEM_BLOCK 5
|
||||
#define CARD_SYSTEM_BLOCK_SIZE (8 * 1024u)
|
||||
|
||||
#define CARD_MAX_MOUNT_STEP (CARD_NUM_SYSTEM_BLOCK + 2)
|
||||
|
||||
/* Icon animation */
|
||||
#define CARD_MODE_NORMAL 0
|
||||
#define CARD_MODE_FAST 1
|
||||
@@ -89,36 +218,9 @@ extern "C" {
|
||||
#define CARD_ATTR_GLOBAL 0x20u
|
||||
#define CARD_ATTR_COMPANY 0x40u
|
||||
|
||||
typedef struct CARDFileInfo {
|
||||
s32 chan;
|
||||
s32 fileNo;
|
||||
|
||||
s32 offset;
|
||||
s32 length;
|
||||
u16 iBlock;
|
||||
u16 __padding;
|
||||
} CARDFileInfo;
|
||||
|
||||
typedef struct CARDStat {
|
||||
char fileName[CARD_FILENAME_MAX];
|
||||
u32 length;
|
||||
u32 time; // seconds since 01/01/2000 midnight
|
||||
u8 gameName[4];
|
||||
u8 company[2];
|
||||
|
||||
u8 bannerFormat;
|
||||
u8 __padding;
|
||||
u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set.
|
||||
u16 iconFormat;
|
||||
u16 iconSpeed;
|
||||
u32 commentAddr; // offset to the pair of 32 byte character strings.
|
||||
|
||||
u32 offsetBanner;
|
||||
u32 offsetBannerTlut;
|
||||
u32 offsetIcon[CARD_ICON_MAX];
|
||||
u32 offsetIconTlut;
|
||||
u32 offsetData;
|
||||
} CARDStat;
|
||||
#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK)
|
||||
#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK)
|
||||
#define CARDGetDirCheck(dir) ((CARDDirCheck *)&(dir)[CARD_MAX_FILE])
|
||||
|
||||
typedef void (*CARDCallback)(s32 chan, s32 result);
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef _DOLPHIN_CARDBIOS_H_
|
||||
#define _DOLPHIN_CARDBIOS_H_
|
||||
|
||||
void CARDInit(void);
|
||||
s32 CARDGetResultCode(s32 chan);
|
||||
s32 CARDFreeBlocks(s32 chan, s32 *byteNotUsed, s32 *filesNotUsed);
|
||||
long CARDGetEncoding(long chan, unsigned short * encode);
|
||||
long CARDGetMemSize(long chan, unsigned short * size);
|
||||
s32 CARDGetSectorSize(s32 chan, u32 *size);
|
||||
|
||||
#endif // _DOLPHIN_CARDBIOS_H_
|
||||
@@ -0,0 +1,7 @@
|
||||
#ifndef _DOLPHIN_CARDCHECK_H_
|
||||
#define _DOLPHIN_CARDCHECK_H_
|
||||
|
||||
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
|
||||
long CARDCheck(long chan);
|
||||
|
||||
#endif // _DOLPHIN_CARDCHECK_H_
|
||||
@@ -0,0 +1,7 @@
|
||||
#ifndef _DOLPHIN_CARDCREATE_H_
|
||||
#define _DOLPHIN_CARDCREATE_H_
|
||||
|
||||
s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, CARDCallback callback);
|
||||
long CARDCreate(long chan, const char * fileName, unsigned long size, struct CARDFileInfo * fileInfo);
|
||||
|
||||
#endif // _DOLPHIN_CARDCREATE_H_
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef _DOLPHIN_CARDDELETE_H_
|
||||
#define _DOLPHIN_CARDDELETE_H_
|
||||
|
||||
s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback);
|
||||
long CARDFastDelete(long chan, long fileNo);
|
||||
s32 CARDDeleteAsync(s32 chan, const char *fileName, CARDCallback callback);
|
||||
s32 CARDDelete(s32 chan, const char *fileName);
|
||||
|
||||
#endif // _DOLPHIN_CARDDELETE_H_
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef _DOLPHIN_CARDDIR_H_
|
||||
#define _DOLPHIN_CARDDIR_H_
|
||||
|
||||
typedef struct CARDDirCheck {
|
||||
/* 0x00 */ u8 padding0[56];
|
||||
/* 0x38 */ u16 padding1;
|
||||
/* 0x3A */ s16 checkCode;
|
||||
/* 0x3C */ u16 checkSum;
|
||||
/* 0x3E */ u16 checkSumInv;
|
||||
} CARDDirCheck;
|
||||
|
||||
#endif // _DOLPHIN_CARDDIR_H_
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _DOLPHIN_CARDFORMAT_H_
|
||||
#define _DOLPHIN_CARDFORMAT_H_
|
||||
|
||||
long CARDFormat(long chan);
|
||||
|
||||
#endif // _DOLPHIN_CARDFORMAT_H_
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef _DOLPHIN_CARDMOUNT_H_
|
||||
#define _DOLPHIN_CARDMOUNT_H_
|
||||
|
||||
int CARDProbe(long chan);
|
||||
s32 CARDProbeEx(s32 chan, s32 *memSize, s32 *sectorSize);
|
||||
s32 CARDMountAsync(s32 chan, void *workArea, CARDCallback detachCallback, CARDCallback attachCallback);
|
||||
s32 CARDMount(s32 chan, void *workArea, CARDCallback detachCallback);
|
||||
s32 CARDUnmount(s32 chan);
|
||||
|
||||
#endif // _DOLPHIN_CARDMOUNT_H_
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef _DOLPHIN_CARDOPEN_H_
|
||||
#define _DOLPHIN_CARDOPEN_H_
|
||||
|
||||
s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo *fileInfo);
|
||||
s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo);
|
||||
s32 CARDClose(CARDFileInfo *fileInfo);
|
||||
|
||||
#endif // _DOLPHIN_CARDOPEN_H_
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _DOLPHIN_CARDRDWR_H_
|
||||
#define _DOLPHIN_CARDRDWR_H_
|
||||
|
||||
long CARDGetXferredBytes(long chan);
|
||||
|
||||
#endif // _DOLPHIN_CARDRDWR_H_
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef _DOLPHIN_CARDREAD_H_
|
||||
#define _DOLPHIN_CARDREAD_H_
|
||||
|
||||
s32 CARDReadAsync(CARDFileInfo *fileInfo, void *buf, s32 length, s32 offset, CARDCallback callback);
|
||||
long CARDRead(struct CARDFileInfo * fileInfo, void * buf, long length, long offset);
|
||||
s32 CARDCancel(CARDFileInfo *fileInfo);
|
||||
|
||||
#endif // _DOLPHIN_CARDREAD_H_
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _DOLPHIN_CARDRENAME_H_
|
||||
#define _DOLPHIN_CARDRENAME_H_
|
||||
|
||||
s32 CARDRename(s32 chan, const char *oldName, const char *newName);
|
||||
|
||||
#endif // _DOLPHIN_CARDRENAME_H_
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef _DOLPHIN_CARDSTAT_H_
|
||||
#define _DOLPHIN_CARDSTAT_H_
|
||||
|
||||
typedef struct CARDStat
|
||||
{
|
||||
/*0x00*/ char fileName[CARD_FILENAME_MAX];
|
||||
/*0x20*/ u32 length;
|
||||
/*0x24*/ u32 time;
|
||||
/*0x28*/ u8 gameName[4];
|
||||
/*0x2C*/ u8 company[2];
|
||||
/*0x2E*/ u8 bannerFormat;
|
||||
/*0x30*/ u32 iconAddr;
|
||||
/*0x34*/ u16 iconFormat;
|
||||
/*0x36*/ u16 iconSpeed;
|
||||
/*0x38*/ u32 commentAddr;
|
||||
/*0x3C*/ u32 offsetBanner;
|
||||
/*0x40*/ u32 offsetBannerTlut;
|
||||
/*0x44*/ u32 offsetIcon[CARD_ICON_MAX];
|
||||
/*0x64*/ u32 offsetIconTlut;
|
||||
/*0x68*/ u32 offsetData;
|
||||
} CARDStat;
|
||||
|
||||
s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat *stat);
|
||||
s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat *stat, CARDCallback callback);
|
||||
long CARDSetStatus(long chan, long fileNo, struct CARDStat * stat);
|
||||
|
||||
#endif // _DOLPHIN_CARDSTAT_H_
|
||||
@@ -0,0 +1,7 @@
|
||||
#ifndef _DOLPHIN_CARDWRITE_H_
|
||||
#define _DOLPHIN_CARDWRITE_H_
|
||||
|
||||
long CARDWriteAsync(struct CARDFileInfo * fileInfo, const void * buf, long length, long offset, void (* callback)(long, long));
|
||||
long CARDWrite(struct CARDFileInfo * fileInfo, const void * buf, long length, long offset);
|
||||
|
||||
#endif // _DOLPHIN_CARDWRITE_H_
|
||||
+37
-9
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_DVD_H
|
||||
#define _DOLPHIN_DVD_H
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -54,11 +54,12 @@ struct DVDCommandBlock {
|
||||
|
||||
// Struct for file information (size 0x3C).
|
||||
// NB: we had this as DVDPlayer previously.
|
||||
struct DVDFileInfo {
|
||||
DVDCommandBlock cBlock; // _00
|
||||
u32 startAddr; // _30
|
||||
u32 length; // _34
|
||||
DVDCallback callback; // _38
|
||||
struct DVDFileInfo
|
||||
{
|
||||
/*0x00*/ DVDCommandBlock cb;
|
||||
/*0x30*/ u32 startAddr;
|
||||
/*0x34*/ u32 length;
|
||||
/*0x38*/ DVDCallback callback;
|
||||
};
|
||||
|
||||
// Struct for directory information (size 0xC).
|
||||
@@ -119,7 +120,7 @@ void DVDResume();
|
||||
void DVDReset();
|
||||
|
||||
BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDCancel(DVDCommandBlock* block);
|
||||
s32 DVDCancel(volatile DVDCommandBlock* block);
|
||||
|
||||
s32 DVDChangeDisk(DVDCommandBlock* block, DVDDiskID* id);
|
||||
BOOL DVDChangeDiskAsync(DVDCommandBlock* block, DVDDiskID* id, DVDCBCallback callback);
|
||||
@@ -152,7 +153,7 @@ BOOL DVDCheckDisk();
|
||||
void DVDPause();
|
||||
s32 DVDSeekPrio(DVDFileInfo* fileInfo, s32 offset, s32 prio);
|
||||
BOOL DVDSeekAsyncPrio(DVDFileInfo* fileInfo, s32 offset, DVDCallback callback, s32 prio);
|
||||
s32 DVDGetFileInfoStatus(DVDFileInfo* fileInfo);
|
||||
// s32 DVDGetFileInfoStatus(DVDFileInfo* fileInfo);
|
||||
BOOL DVDFastOpenDir(s32 entryNum, DVDDir* dir);
|
||||
BOOL DVDCancelAllAsync(DVDCBCallback callback);
|
||||
s32 DVDCancelAll();
|
||||
@@ -164,7 +165,7 @@ void DVDDumpWaitingQueue();
|
||||
// Macro for reading.
|
||||
#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
|
||||
DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
|
||||
#define DVDGetFileInfoStatus(fileInfo) DVDGetCommandBlockStatus(&(fileInfo)->cBlock)
|
||||
#define DVDGetFileInfoStatus(fileInfo) DVDGetCommandBlockStatus(&(fileInfo)->cb)
|
||||
|
||||
// Minimum transfer size.
|
||||
#define DVD_MIN_TRANSFER_SIZE 32
|
||||
@@ -196,6 +197,33 @@ void DVDDumpWaitingQueue();
|
||||
|
||||
#define DVD_AIS_SUCCESS 0
|
||||
|
||||
#define DVD_MIN_TRANSFER_SIZE 32
|
||||
|
||||
// could be bitfields
|
||||
#define DVD_INTTYPE_TC 1
|
||||
#define DVD_INTTYPE_DE 2
|
||||
// unk type 3
|
||||
#define DVD_INTTYPE_CVR 4
|
||||
|
||||
#define DVD_COMMAND_NONE 0
|
||||
#define DVD_COMMAND_READ 1
|
||||
#define DVD_COMMAND_SEEK 2
|
||||
#define DVD_COMMAND_CHANGE_DISK 3
|
||||
#define DVD_COMMAND_BSREAD 4
|
||||
#define DVD_COMMAND_READID 5
|
||||
#define DVD_COMMAND_INITSTREAM 6
|
||||
#define DVD_COMMAND_CANCELSTREAM 7
|
||||
#define DVD_COMMAND_STOP_STREAM_AT_END 8
|
||||
#define DVD_COMMAND_REQUEST_AUDIO_ERROR 9
|
||||
#define DVD_COMMAND_REQUEST_PLAY_ADDR 10
|
||||
#define DVD_COMMAND_REQUEST_START_ADDR 11
|
||||
#define DVD_COMMAND_REQUEST_LENGTH 12
|
||||
#define DVD_COMMAND_AUDIO_BUFFER_CONFIG 13
|
||||
#define DVD_COMMAND_INQUIRY 14
|
||||
#define DVD_COMMAND_BS_CHANGE_DISK 15
|
||||
|
||||
#define DVD_WATYPE_MAX 2
|
||||
|
||||
DVDDiskID DiskID AT_ADDRESS(0x80000000);
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef _DOLPHIN_EXI_H_
|
||||
#define _DOLPHIN_EXI_H_
|
||||
|
||||
#include <dolphin/os/OSContext.h>
|
||||
|
||||
typedef enum {
|
||||
EXI_STATE_DMA_ACCESS = (1 << 0),
|
||||
EXI_STATE_IMM_ACCESS = (1 << 1),
|
||||
EXI_STATE_SELECTED = (1 << 2),
|
||||
EXI_STATE_ATTACHED = (1 << 3),
|
||||
EXI_STATE_LOCKED = (1 << 4),
|
||||
EXI_STATE_BUSY = EXI_STATE_DMA_ACCESS | EXI_STATE_IMM_ACCESS
|
||||
} EXIState;
|
||||
|
||||
typedef enum {
|
||||
EXI_CHAN_0,
|
||||
EXI_CHAN_1,
|
||||
EXI_CHAN_2,
|
||||
EXI_MAX_CHAN
|
||||
} EXIChannel;
|
||||
|
||||
typedef enum {
|
||||
EXI_READ,
|
||||
EXI_WRITE,
|
||||
EXI_TYPE_2,
|
||||
EXI_MAX_TYPE
|
||||
} EXIType;
|
||||
|
||||
typedef void (*EXICallback)(s32 chan, OSContext *context);
|
||||
|
||||
EXICallback EXISetExiCallback(s32 channel, EXICallback callback);
|
||||
|
||||
void EXIInit(void);
|
||||
BOOL EXILock(s32 channel, u32 device, EXICallback callback);
|
||||
BOOL EXIUnlock(s32 channel);
|
||||
BOOL EXISelect(s32 channel, u32 device, u32 frequency);
|
||||
BOOL EXIDeselect(s32 channel);
|
||||
BOOL EXIImm(s32 channel, void *buffer, s32 length, u32 type, EXICallback callback);
|
||||
BOOL EXIImmEx(s32 channel, void *buffer, s32 length, u32 type);
|
||||
BOOL EXIDma(s32 channel, void *buffer, s32 length, u32 type, EXICallback callback);
|
||||
BOOL EXISync(s32 channel);
|
||||
BOOL EXIProbe(s32 channel);
|
||||
s32 EXIProbeEx(s32 channel);
|
||||
BOOL EXIAttach(s32 channel, EXICallback callback);
|
||||
BOOL EXIDetach(s32 channel);
|
||||
u32 EXIGetState(s32 channel);
|
||||
s32 EXIGetID(s32 channel, u32 device, u32* id);
|
||||
void EXIProbeReset(void);
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef DOLPHIN_GX_H
|
||||
#define DOLPHIN_GX_H
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -9,6 +9,7 @@ extern "C" {
|
||||
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
#include <dolphin/gx/GXStruct.h>
|
||||
#include <dolphin/gx/GXRegs.h>
|
||||
|
||||
#include <dolphin/gx/GXBump.h>
|
||||
#include <dolphin/gx/GXCommandList.h>
|
||||
@@ -28,6 +29,7 @@ extern "C" {
|
||||
#include <dolphin/gx/GXTev.h>
|
||||
#include <dolphin/gx/GXTexture.h>
|
||||
#include <dolphin/gx/GXTransform.h>
|
||||
#include <dolphin/gx/GXVerify.h>
|
||||
#include <dolphin/gx/GXVert.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXCULL
|
||||
#define _DOLPHIN_GXCULL
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXDISPLIST
|
||||
#define _DOLPHIN_GXDISPLIST
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -9,7 +9,7 @@ extern "C" {
|
||||
|
||||
void GXBeginDisplayList(void* list, u32 size);
|
||||
u32 GXEndDisplayList(void);
|
||||
void GXCallDisplayList(const void* list, u32 nbytes);
|
||||
void GXCallDisplayList(void* list, u32 nbytes);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXDRAW
|
||||
#define _DOLPHIN_GXDRAW
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXENUM
|
||||
#define _DOLPHIN_GXENUM
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -891,6 +891,35 @@ typedef enum _GXVCachePerf {
|
||||
|
||||
} GXVCachePerf;
|
||||
|
||||
typedef enum _GXAlphaReadMode
|
||||
{
|
||||
GX_READ_00,
|
||||
GX_READ_FF,
|
||||
GX_READ_NONE,
|
||||
} GXAlphaReadMode;
|
||||
|
||||
typedef enum _GXCopyMode
|
||||
{
|
||||
GX_COPY_PROGRESSIVE = 0,
|
||||
GX_COPY_INTLC_EVEN = 2,
|
||||
GX_COPY_INTLC_ODD = 3,
|
||||
} GXCopyMode;
|
||||
|
||||
typedef enum _GXTlutSize
|
||||
{
|
||||
GX_TLUT_16 = 1,
|
||||
GX_TLUT_32 = 2,
|
||||
GX_TLUT_64 = 4,
|
||||
GX_TLUT_128 = 8,
|
||||
GX_TLUT_256 = 16,
|
||||
GX_TLUT_512 = 32,
|
||||
GX_TLUT_1K = 64,
|
||||
GX_TLUT_2K = 128,
|
||||
GX_TLUT_4K = 256,
|
||||
GX_TLUT_8K = 512,
|
||||
GX_TLUT_16K = 1024,
|
||||
} GXTlutSize;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
// Extra types for PC
|
||||
#ifdef TARGET_PC
|
||||
#include <dolphin/gx/GXStruct.h>
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
+28
-21
@@ -1,5 +1,5 @@
|
||||
#ifndef _DOLPHIN_GXFIFO
|
||||
#define _DOLPHIN_GXFIFO
|
||||
#ifndef _DOLPHIN_GX_GXFIFO_H_
|
||||
#define _DOLPHIN_GX_GXFIFO_H_
|
||||
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
#include <dolphin/os/OSThread.h>
|
||||
@@ -8,33 +8,40 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
u8 pad[128];
|
||||
typedef struct
|
||||
{
|
||||
u8 pad[128];
|
||||
} GXFifoObj;
|
||||
|
||||
typedef void (*GXBreakPtCallback)(void);
|
||||
|
||||
void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size);
|
||||
void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr);
|
||||
void GXGetFifoPtrs(GXFifoObj* fifo, void** readPtr, void** writePtr);
|
||||
GXFifoObj* GXGetCPUFifo(void);
|
||||
GXFifoObj* GXGetGPFifo(void);
|
||||
void GXSetCPUFifo(GXFifoObj* fifo);
|
||||
void GXSetGPFifo(GXFifoObj* fifo);
|
||||
void GXSaveCPUFifo(GXFifoObj* fifo);
|
||||
void GXGetFifoStatus(GXFifoObj* fifo, GXBool* overhi, GXBool* underlow, u32* fifoCount,
|
||||
GXBool* cpu_write, GXBool* gp_read, GXBool* fifowrap);
|
||||
void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle, GXBool* cmdIdle,
|
||||
GXBool* brkpt);
|
||||
void GXInitFifoLimits(GXFifoObj* fifo, u32 hiWaterMark, u32 loWaterMark);
|
||||
void GXInitFifoBase(GXFifoObj *fifo, void *base, u32 size);
|
||||
void GXInitFifoPtrs(GXFifoObj *fifo, void *readPtr, void *writePtr);
|
||||
void GXInitFifoLimits(GXFifoObj *fifo, u32 hiWatermark, u32 loWatermark);
|
||||
void GXSetCPUFifo(GXFifoObj *fifo);
|
||||
void GXSetGPFifo(GXFifoObj *fifo);
|
||||
void GXSaveCPUFifo(GXFifoObj *fifo);
|
||||
void GXSaveGPFifo(GXFifoObj *fifo);
|
||||
void GXGetGPStatus(GXBool *overhi, GXBool *underlow, GXBool *readIdle, GXBool *cmdIdle, GXBool *brkpt);
|
||||
void GXGetFifoStatus(GXFifoObj *fifo, GXBool *overhi, GXBool *underflow, u32 *fifoCount, GXBool *cpuWrite, GXBool *gpRead, GXBool *fifowrap);
|
||||
void GXGetFifoPtrs(GXFifoObj *fifo, void **readPtr, void **writePtr);
|
||||
void *GXGetFifoBase(GXFifoObj *fifo);
|
||||
u32 GXGetFifoSize(GXFifoObj *fifo);
|
||||
void GXGetFifoLimits(GXFifoObj *fifo, u32 *hi, u32 *lo);
|
||||
GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb);
|
||||
void GXEnableBreakPt(void* breakPt);
|
||||
void GXEnableBreakPt(void *break_pt);
|
||||
void GXDisableBreakPt(void);
|
||||
OSThread* GXSetCurrentGXThread(void);
|
||||
OSThread* GXGetCurrentGXThread(void);
|
||||
OSThread *GXSetCurrentGXThread(void);
|
||||
OSThread *GXGetCurrentGXThread(void);
|
||||
GXFifoObj *GXGetCPUFifo(void);
|
||||
GXFifoObj *GXGetGPFifo(void);
|
||||
u32 GXGetOverflowCount(void);
|
||||
u32 GXResetOverflowCount(void);
|
||||
volatile void *GXRedirectWriteGatherPipe(void *ptr);
|
||||
void GXRestoreWriteGatherPipe(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _DOLPHIN_GXFIFO
|
||||
#endif
|
||||
|
||||
@@ -51,7 +51,7 @@ void GXSetDispCopyDst(u16 wd, u16 ht);
|
||||
f32 GXGetYScaleFactor(u16 efbHeight, u16 xfbHeight);
|
||||
u32 GXSetDispCopyYScale(f32 vscale);
|
||||
u16 GXGetNumXfbLines(u16 efbHeight, f32 yScale);
|
||||
void GXSetCopyFilter(GXBool aa, u8 sample_pattern[12][2], GXBool vf, u8 vfilter[7]);
|
||||
void GXSetCopyFilter(GXBool aa, const u8 sample_pattern[12][2], GXBool vf, const u8 vfilter[7]);
|
||||
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
|
||||
void GXSetTexCopySrc(u16 left, u16 top, u16 wd, u16 ht);
|
||||
void GXSetTexCopyDst(u16 wd, u16 ht, GXTexFmt fmt, GXBool mipmap);
|
||||
|
||||
@@ -8,7 +8,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
void GXSetVtxDesc(GXAttr attr, GXAttrType type);
|
||||
void GXSetVtxDescv(GXVtxDescList* list);
|
||||
void GXSetVtxDescv(const GXVtxDescList* list);
|
||||
void GXClearVtxDesc(void);
|
||||
void GXSetVtxAttrFmt(GXVtxFmt vtxfmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8 frac);
|
||||
void GXSetNumTexGens(u8 nTexGens);
|
||||
|
||||
@@ -16,8 +16,8 @@ GXTexWrapMode GXGetTexObjWrapS(const GXTexObj* obj);
|
||||
GXTexWrapMode GXGetTexObjWrapT(const GXTexObj* obj);
|
||||
void* GXGetTexObjData(const GXTexObj* obj);
|
||||
void GXGetProjectionv(f32* p);
|
||||
void GXGetLightPos(const GXLightObj* lt_obj, f32* x, f32* y, f32* z);
|
||||
void GXGetLightColor(const GXLightObj* lt_obj, GXColor* color);
|
||||
void GXGetLightPos(GXLightObj* lt_obj, f32* x, f32* y, f32* z);
|
||||
void GXGetLightColor(GXLightObj* lt_obj, GXColor* color);
|
||||
void GXGetVtxAttrFmt(GXVtxFmt idx, GXAttr attr, GXCompCnt* compCnt, GXCompType* compType,
|
||||
u8* shift);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef _DOLPHIN_GXMANAGE
|
||||
#define _DOLPHIN_GXMANAGE
|
||||
#ifndef _DOLPHIN_GX_GXMANAGE_H_
|
||||
#define _DOLPHIN_GX_GXMANAGE_H_
|
||||
|
||||
#include <dolphin/gx/GXFifo.h>
|
||||
|
||||
@@ -7,18 +7,30 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*GXDrawSyncCallback)(u16 token);
|
||||
typedef void (*GXDrawDoneCallback)(void);
|
||||
|
||||
GXFifoObj* GXInit(void* base, u32 size);
|
||||
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb);
|
||||
void GXDrawDone(void);
|
||||
void GXSetDrawDone(void);
|
||||
void GXFlush(void);
|
||||
void GXPixModeSync(void);
|
||||
// Init
|
||||
BOOL IsWriteGatherBufferEmpty(void);
|
||||
GXFifoObj *GXInit(void *base, u32 size);
|
||||
|
||||
// Misc
|
||||
void GXSetMisc(GXMiscToken token, u32 val);
|
||||
void GXFlush(void);
|
||||
void GXResetWriteGatherPipe(void);
|
||||
void GXAbortFrame(void);
|
||||
void GXSetDrawSync(u16 token);
|
||||
u16 GXReadDrawSync(void);
|
||||
void GXSetDrawDone(void);
|
||||
void GXWaitDrawDone(void);
|
||||
void GXDrawDone(void);
|
||||
void GXPixModeSync(void);
|
||||
void GXTexModeSync(void);
|
||||
GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb);
|
||||
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _DOLPHIN_GXMANAGE
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef RVL_SDK_GX_MISC_H
|
||||
#define RVL_SDK_GX_MISC_H
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -17,4 +17,4 @@ void GXAbortFrame();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXPERF
|
||||
#define _DOLPHIN_GXPERF
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -8,10 +8,9 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color);
|
||||
void GXSetFogColor(GXColor color);
|
||||
// ? GXSetFogRangeAdj();
|
||||
void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor,
|
||||
GXLogicOp op);
|
||||
void GXInitFogAdjTable(GXFogAdjTable *table, u16 width, f32 projmtx[4][4]);
|
||||
void GXSetFogRangeAdj(GXBool enable, u16 center, GXFogAdjTable *table);
|
||||
void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp op);
|
||||
void GXSetColorUpdate(GXBool update_enable);
|
||||
void GXSetAlphaUpdate(GXBool update_enable);
|
||||
void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
|
||||
@@ -19,8 +18,8 @@ void GXSetZCompLoc(GXBool before_tex);
|
||||
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
|
||||
void GXSetDither(GXBool dither);
|
||||
void GXSetDstAlpha(GXBool enable, u8 alpha);
|
||||
// ? GXSetFieldMask();
|
||||
// ? GXSetFieldMode();
|
||||
void GXSetFieldMask(GXBool odd_mask, GXBool even_mask);
|
||||
void GXSetFieldMode(GXBool field_mode, GXBool half_aspect_ratio);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifndef _DOLPHIN_GXREGS
|
||||
#define _DOLPHIN_GXREGS
|
||||
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern u16 *__memReg;
|
||||
extern u16 *__peReg;
|
||||
extern u16 *__cpReg;
|
||||
extern u32 *__piReg;
|
||||
|
||||
#define GX_GET_CP_REG(offset) (*(volatile u16*)((__cpReg) + (offset)))
|
||||
#define GX_SET_CP_REG(offset, value) ((*(volatile u16*)((__cpReg) + (offset))) = (value))
|
||||
|
||||
inline u32 __GXReadCPCounterU32(u32 regAddrL, u32 regAddrH)
|
||||
{
|
||||
u32 ctrH0;
|
||||
u32 ctrH1;
|
||||
u32 ctrL;
|
||||
|
||||
ctrH0 = GX_GET_CP_REG(regAddrH);
|
||||
while (TRUE) {
|
||||
ctrH1 = ctrH0;
|
||||
ctrL = GX_GET_CP_REG(regAddrL);
|
||||
ctrH0 = GX_GET_CP_REG(regAddrH);
|
||||
|
||||
if (ctrH0 == ctrH1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (ctrH0 << 16) | (ctrL);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef _DOLPHIN_GXSTRUCT
|
||||
#define _DOLPHIN_GXSTRUCT
|
||||
|
||||
#include <dolphin/types.h>
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
#include <dolphin/vi.h>
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -52,11 +52,6 @@ typedef struct _GXLightObj {
|
||||
u32 dummy[16];
|
||||
} GXLightObj;
|
||||
|
||||
typedef struct _GXVtxDescList {
|
||||
GXAttr attr;
|
||||
GXAttrType type;
|
||||
} GXVtxDescList;
|
||||
|
||||
typedef struct _GXColorS10 {
|
||||
s16 r;
|
||||
s16 g;
|
||||
@@ -72,6 +67,23 @@ typedef struct _GXTlutRegion {
|
||||
u32 dummy[4];
|
||||
} GXTlutRegion;
|
||||
|
||||
typedef struct _GXFogAdjTable
|
||||
{
|
||||
u16 r[10];
|
||||
} GXFogAdjTable;
|
||||
|
||||
typedef struct _GXVtxDescList {
|
||||
GXAttr attr;
|
||||
GXAttrType type;
|
||||
} GXVtxDescList;
|
||||
|
||||
typedef struct _GXVtxAttrFmtList {
|
||||
GXAttr attr;
|
||||
GXCompCnt cnt;
|
||||
GXCompType type;
|
||||
u8 frac;
|
||||
} GXVtxAttrFmtList;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -9,12 +9,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef GXTexRegion* (*GXTexRegionCallback)(const GXTexObj* obj, GXTexMapID id);
|
||||
typedef GXTlutRegion *(*GXTlutRegionCallback)(u32 idx);
|
||||
|
||||
void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format,
|
||||
GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap);
|
||||
void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format,
|
||||
GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap, u32 tlut);
|
||||
void GXInitTexObjData(GXTexObj* obj, const void* data);
|
||||
void GXInitTexObj(GXTexObj *obj, void *image_ptr, u16 width, u16 height, GXTexFmt format, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, u8 mipmap);
|
||||
void GXInitTexObjCI(GXTexObj *obj, void *image_ptr, u16 width, u16 height, GXCITexFmt format, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, u8 mipmap, u32 tlut_name);
|
||||
void GXInitTexObjData(GXTexObj *obj, void *image_ptr);
|
||||
void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod,
|
||||
f32 max_lod, f32 lod_bias, GXBool bias_clamp, GXBool do_edge_lod,
|
||||
GXAnisotropy max_aniso);
|
||||
@@ -22,13 +21,14 @@ void GXLoadTexObj(GXTexObj* obj, GXTexMapID id);
|
||||
u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod);
|
||||
void GXInvalidateTexAll();
|
||||
void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t);
|
||||
void GXInitTlutObj(GXTlutObj* obj, const void* data, GXTlutFmt format, u16 entries);
|
||||
void GXLoadTlut(const GXTlutObj* obj, u32 idx);
|
||||
void GXInitTlutObj(GXTlutObj *tlut_obj, void *lut, GXTlutFmt fmt, u16 n_entries);
|
||||
void GXLoadTlut(GXTlutObj* obj, u32 idx);
|
||||
void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts);
|
||||
void GXInitTexCacheRegion(GXTexRegion* region, GXBool is_32b_mipmap, u32 tmem_even,
|
||||
GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd);
|
||||
GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback);
|
||||
void GXInvalidateTexRegion(const GXTexRegion* region);
|
||||
void GXInvalidateTexRegion(GXTexRegion* region);
|
||||
void GXInitTlutRegion(GXTlutRegion *region, u32 tmem_addr, GXTlutSize tlut_size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef _DOLPHIN_GX_GXVERIFY_H_
|
||||
#define _DOLPHIN_GX_GXVERIFY_H_
|
||||
|
||||
typedef enum {
|
||||
GX_WARN_NONE,
|
||||
GX_WARN_SEVERE,
|
||||
GX_WARN_MEDIUM,
|
||||
GX_WARN_ALL
|
||||
} GXWarningLevel;
|
||||
|
||||
typedef void (*GXVerifyCallback)(GXWarningLevel level, u32 id, char *msg);
|
||||
|
||||
void GXSetVerifyLevel(GXWarningLevel level);
|
||||
GXVerifyCallback GXSetVerifyCallback(GXVerifyCallback cb);
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_GXVERT
|
||||
#define _DOLPHIN_GXVERT
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -23,7 +23,7 @@ typedef union {
|
||||
} PPCWGPipe;
|
||||
|
||||
#ifdef __MWERKS__
|
||||
/*volatile*/ PPCWGPipe GXWGFifo AT_ADDRESS(GXFIFO_ADDR);
|
||||
volatile PPCWGPipe GXWGFifo AT_ADDRESS(GXFIFO_ADDR);
|
||||
#else
|
||||
#define GXWGFifo (*(volatile PPCWGPipe*)GXFIFO_ADDR)
|
||||
#endif
|
||||
|
||||
+55
-55
@@ -2,112 +2,112 @@
|
||||
#define _DOLPHIN_HW_REGS_H_
|
||||
|
||||
#ifdef __MWERKS__
|
||||
volatile u16 __VIRegs[59] : 0xCC002000;
|
||||
volatile u32 __PIRegs[12] : 0xCC003000;
|
||||
volatile u16 __MEMRegs[64] : 0xCC004000;
|
||||
volatile u16 __DSPRegs[] : 0xCC005000;
|
||||
volatile u32 __DIRegs[] : 0xCC006000;
|
||||
volatile u32 __SIRegs[0x100] : 0xCC006400;
|
||||
volatile u32 __EXIRegs[0x40] : 0xCC006800;
|
||||
volatile u32 __AIRegs[8] : 0xCC006C00;
|
||||
volatile u16 __VIRegs[59] : 0xCC002000;
|
||||
volatile u32 __PIRegs[12] : 0xCC003000;
|
||||
volatile u16 __MEMRegs[64] : 0xCC004000;
|
||||
volatile u16 __DSPRegs[] : 0xCC005000;
|
||||
volatile u32 __DIRegs[] : 0xCC006000;
|
||||
volatile u32 __SIRegs[0x100] : 0xCC006400;
|
||||
volatile u32 __EXIRegs[0x40] : 0xCC006800;
|
||||
volatile u32 __AIRegs[8] : 0xCC006C00;
|
||||
#else
|
||||
#define __VIRegs ((volatile u16*)0xCC002000)
|
||||
#define __PIRegs ((volatile u32*)0xCC003000)
|
||||
#define __MEMRegs ((volatile u16*)0xCC004000)
|
||||
#define __DSPRegs ((volatile u16*)0xCC005000)
|
||||
#define __DIRegs ((volatile u32*)0xCC006000)
|
||||
#define __SIRegs ((volatile u32*)0xCC006400)
|
||||
#define __EXIRegs ((volatile u32*)0xCC006800)
|
||||
#define __AIRegs ((volatile u32*)0xCC006C00)
|
||||
#define __VIRegs ((volatile u16 *)0xCC002000)
|
||||
#define __PIRegs ((volatile u32 *)0xCC003000)
|
||||
#define __MEMRegs ((volatile u16 *)0xCC004000)
|
||||
#define __DSPRegs ((volatile u16 *)0xCC005000)
|
||||
#define __DIRegs ((volatile u32 *)0xCC006000)
|
||||
#define __SIRegs ((volatile u32 *)0xCC006400)
|
||||
#define __EXIRegs ((volatile u32 *)0xCC006800)
|
||||
#define __AIRegs ((volatile u32 *)0xCC006C00)
|
||||
#endif
|
||||
|
||||
// Offsets for __VIRegs
|
||||
|
||||
// offsets for __VIRegs[i]
|
||||
#define VI_VERT_TIMING (0)
|
||||
#define VI_DISP_CONFIG (1)
|
||||
#define VI_HORIZ_TIMING_0L (2)
|
||||
#define VI_HORIZ_TIMING_0U (3)
|
||||
#define VI_HORIZ_TIMING_1L (4)
|
||||
#define VI_HORIZ_TIMING_1U (5)
|
||||
#define VI_VERT_TIMING_ODD (6)
|
||||
#define VI_VERT_TIMING_ODD_U (7)
|
||||
#define VI_VERT_TIMING_EVEN (8)
|
||||
#define VI_VERT_TIMING (0)
|
||||
#define VI_DISP_CONFIG (1)
|
||||
#define VI_HORIZ_TIMING_0L (2)
|
||||
#define VI_HORIZ_TIMING_0U (3)
|
||||
#define VI_HORIZ_TIMING_1L (4)
|
||||
#define VI_HORIZ_TIMING_1U (5)
|
||||
#define VI_VERT_TIMING_ODD (6)
|
||||
#define VI_VERT_TIMING_ODD_U (7)
|
||||
#define VI_VERT_TIMING_EVEN (8)
|
||||
#define VI_VERT_TIMING_EVEN_U (9)
|
||||
|
||||
#define VI_BBI_ODD (10) // burst blanking interval
|
||||
#define VI_BBI_ODD_U (11) // burst blanking interval
|
||||
#define VI_BBI_EVEN (12) // burst blanking interval
|
||||
#define VI_BBI_ODD (10) // burst blanking interval
|
||||
#define VI_BBI_ODD_U (11) // burst blanking interval
|
||||
#define VI_BBI_EVEN (12) // burst blanking interval
|
||||
#define VI_BBI_EVEN_U (13) // burst blanking interval
|
||||
|
||||
#define VI_TOP_FIELD_BASE_LEFT (14) // top in 2d, top of left pic in 3d
|
||||
#define VI_TOP_FIELD_BASE_LEFT (14) // top in 2d, top of left pic in 3d
|
||||
#define VI_TOP_FIELD_BASE_LEFT_U (15) // top in 2d, top of left pic in 3d
|
||||
|
||||
#define VI_TOP_FIELD_BASE_RIGHT (16) // top of right pic in 3d
|
||||
#define VI_TOP_FIELD_BASE_RIGHT (16) // top of right pic in 3d
|
||||
#define VI_TOP_FIELD_BASE_RIGHT_U (17) // top of right pic in 3d
|
||||
|
||||
#define VI_BTTM_FIELD_BASE_LEFT (18) // bottom in 2d, bottom of left pic in 3d
|
||||
#define VI_BTTM_FIELD_BASE_LEFT (18) // bottom in 2d, bottom of left pic in 3d
|
||||
#define VI_BTTM_FIELD_BASE_LEFT_U (19) // bottom in 2d, bottom of left pic in 3d
|
||||
|
||||
#define VI_BTTM_FIELD_BASE_RIGHT (20) // bottom of right pic in 3d
|
||||
#define VI_BTTM_FIELD_BASE_RIGHT (20) // bottom of right pic in 3d
|
||||
#define VI_BTTM_FIELD_BASE_RIGHT_U (21) // bottom of right pic in 3d
|
||||
|
||||
#define VI_VERT_COUNT (22) // vertical display position
|
||||
#define VI_VERT_COUNT (22) // vertical display position
|
||||
#define VI_HORIZ_COUNT (23) // horizontal display position
|
||||
|
||||
#define VI_DISP_INT_0 (24) // display interrupt 0L
|
||||
#define VI_DISP_INT_0 (24) // display interrupt 0L
|
||||
#define VI_DISP_INT_0U (25) // display interrupt 0U
|
||||
#define VI_DISP_INT_1 (26) // display interrupt 1L
|
||||
#define VI_DISP_INT_1 (26) // display interrupt 1L
|
||||
#define VI_DISP_INT_1U (27) // display interrupt 1U
|
||||
#define VI_DISP_INT_2 (28) // display interrupt 2L
|
||||
#define VI_DISP_INT_2 (28) // display interrupt 2L
|
||||
#define VI_DISP_INT_2U (29) // display interrupt 2U
|
||||
#define VI_DISP_INT_3 (30) // display interrupt 3L
|
||||
#define VI_DISP_INT_3 (30) // display interrupt 3L
|
||||
#define VI_DISP_INT_3U (31) // display interrupt 3U
|
||||
|
||||
#define VI_HSW (36) // horizontal scaling width
|
||||
#define VI_HSR (37) // horizontal scaling register
|
||||
|
||||
#define VI_FCT_0 (38) // filter coefficient table 0L
|
||||
#define VI_FCT_0 (38) // filter coefficient table 0L
|
||||
#define VI_FCT_0U (39) // filter coefficient table 0U
|
||||
#define VI_FCT_1 (40) // filter coefficient table 1L
|
||||
#define VI_FCT_1 (40) // filter coefficient table 1L
|
||||
#define VI_FCT_1U (41) // filter coefficient table 1U
|
||||
#define VI_FCT_2 (42) // filter coefficient table 2L
|
||||
#define VI_FCT_2 (42) // filter coefficient table 2L
|
||||
#define VI_FCT_2U (43) // filter coefficient table 2U
|
||||
#define VI_FCT_3 (44) // filter coefficient table 3L
|
||||
#define VI_FCT_3 (44) // filter coefficient table 3L
|
||||
#define VI_FCT_3U (45) // filter coefficient table 3U
|
||||
#define VI_FCT_4 (46) // filter coefficient table 4L
|
||||
#define VI_FCT_4 (46) // filter coefficient table 4L
|
||||
#define VI_FCT_4U (47) // filter coefficient table 4U
|
||||
#define VI_FCT_5 (48) // filter coefficient table 5L
|
||||
#define VI_FCT_5 (48) // filter coefficient table 5L
|
||||
#define VI_FCT_5U (49) // filter coefficient table 5U
|
||||
#define VI_FCT_6 (50) // filter coefficient table 6L
|
||||
#define VI_FCT_6 (50) // filter coefficient table 6L
|
||||
#define VI_FCT_6U (51) // filter coefficient table 6U
|
||||
|
||||
#define VI_CLOCK_SEL (54) // clock select
|
||||
#define VI_DTV_STAT (55) // DTV status
|
||||
#define VI_DTV_STAT (55) // DTV status
|
||||
|
||||
#define VI_WIDTH (56)
|
||||
|
||||
// offsets for __DSPRegs[i]
|
||||
#define DSP_MAILBOX_IN_HI (0)
|
||||
#define DSP_MAILBOX_IN_LO (1)
|
||||
#define DSP_MAILBOX_IN_HI (0)
|
||||
#define DSP_MAILBOX_IN_LO (1)
|
||||
#define DSP_MAILBOX_OUT_HI (2)
|
||||
#define DSP_MAILBOX_OUT_LO (3)
|
||||
#define DSP_CONTROL_STATUS (5)
|
||||
|
||||
#define DSP_ARAM_SIZE (9)
|
||||
#define DSP_ARAM_MODE (11)
|
||||
#define DSP_ARAM_REFRESH (13)
|
||||
#define DSP_ARAM_DMA_MM_HI (16) // Main mem address
|
||||
#define DSP_ARAM_DMA_MM_LO (17)
|
||||
#define DSP_ARAM_SIZE (9)
|
||||
#define DSP_ARAM_MODE (11)
|
||||
#define DSP_ARAM_REFRESH (13)
|
||||
#define DSP_ARAM_DMA_MM_HI (16) // Main mem address
|
||||
#define DSP_ARAM_DMA_MM_LO (17)
|
||||
#define DSP_ARAM_DMA_ARAM_HI (18) // ARAM address
|
||||
#define DSP_ARAM_DMA_ARAM_LO (19)
|
||||
#define DSP_ARAM_DMA_SIZE_HI (20) // DMA buffer size
|
||||
#define DSP_ARAM_DMA_SIZE_LO (21)
|
||||
|
||||
#define DSP_DMA_START_HI (24) // DMA start address
|
||||
#define DSP_DMA_START_LO (25)
|
||||
#define DSP_DMA_START_HI (24) // DMA start address
|
||||
#define DSP_DMA_START_LO (25)
|
||||
#define DSP_DMA_CONTROL_LEN (27)
|
||||
#define DSP_DMA_BYTES_LEFT (29)
|
||||
#define DSP_DMA_BYTES_LEFT (29)
|
||||
|
||||
#define DSP_DMA_START_FLAG (0x8000) // set to start DSP
|
||||
|
||||
|
||||
+72
-1
@@ -10,7 +10,11 @@
|
||||
#include "libforest/osreport.h" /* OSReport funcs */
|
||||
#include "dolphin/os/OSReset.h"
|
||||
#include "dolphin/os/OSFont.h"
|
||||
#include "va_args.h"
|
||||
#include <dolphin/os/OSTime.h>
|
||||
#include <dolphin/os/OSAlarm.h>
|
||||
#include <dolphin/os/OSRtc.h>
|
||||
#include <dolphin/hw_regs.h>
|
||||
// #include "va_args.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -70,6 +74,73 @@ u32 OSGetConsoleType();
|
||||
typedef void (*OSExceptionHandler)(u8, OSContext*);
|
||||
OSExceptionHandler __OSSetExceptionHandler(u8, OSExceptionHandler);
|
||||
|
||||
#include <dolphin/dvd.h>
|
||||
|
||||
typedef struct OSBootInfo_s {
|
||||
// total size: 0x40
|
||||
DVDDiskID DVDDiskID; // offset 0x0, size 0x20
|
||||
unsigned long magic; // offset 0x20, size 0x4
|
||||
unsigned long version; // offset 0x24, size 0x4
|
||||
unsigned long memorySize; // offset 0x28, size 0x4
|
||||
unsigned long consoleType; // offset 0x2C, size 0x4
|
||||
void * arenaLo; // offset 0x30, size 0x4
|
||||
void * arenaHi; // offset 0x34, size 0x4
|
||||
void * FSTLocation; // offset 0x38, size 0x4
|
||||
unsigned long FSTMaxLength; // offset 0x3C, size 0x4
|
||||
} OSBootInfo;
|
||||
|
||||
#define OS_CACHED_REGION_PREFIX 0x8000
|
||||
#define OS_UNCACHED_REGION_PREFIX 0xC000
|
||||
#define OS_PHYSICAL_MASK 0x3FFF
|
||||
|
||||
#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16)
|
||||
#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16)
|
||||
|
||||
#ifdef __MWERKS__
|
||||
u32 __OSPhysicalMemSize : (OS_BASE_CACHED | 0x0028);
|
||||
volatile int __OSTVMode : (OS_BASE_CACHED | 0x00CC);
|
||||
OSThread *__gUnkThread1 : (OS_BASE_CACHED | 0x00D8);
|
||||
OSThreadQueue __OSActiveThreadQueue : (OS_BASE_CACHED | 0x00DC);
|
||||
OSThread *__gCurrentThread : (OS_BASE_CACHED | 0x00E4);
|
||||
u32 __OSSimulatedMemSize : (OS_BASE_CACHED | 0x00F0);
|
||||
u32 __OSBusClock : (OS_BASE_CACHED | 0x00F8);
|
||||
u32 __OSCoreClock : (OS_BASE_CACHED | 0x00FC);
|
||||
s32 __gUnknown800030C0[2] : (OS_BASE_CACHED | 0x30C0);
|
||||
u8 __gUnknown800030E3 : (OS_BASE_CACHED | 0x30E3);
|
||||
vu16 __OSDeviceCode AT_ADDRESS(OS_BASE_CACHED | 0x30E6);
|
||||
#else
|
||||
#define __OSBusClock (*(u32 *)(OS_BASE_CACHED | 0x00F8))
|
||||
#define __OSCoreClock (*(u32 *)(OS_BASE_CACHED | 0x00FC))
|
||||
#endif
|
||||
#define OS_BUS_CLOCK __OSBusClock
|
||||
#define OS_CORE_CLOCK __OSCoreClock
|
||||
#define OS_TIMER_CLOCK (OS_BUS_CLOCK/4)
|
||||
|
||||
#define OSTicksToSeconds(ticks) ((ticks) / (OS_TIMER_CLOCK))
|
||||
#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK/1000))
|
||||
#define OSTicksToMicroseconds(ticks) ((ticks)*8 / (OS_TIMER_CLOCK/125000))
|
||||
#define OSSecondsToTicks(sec) ((sec) * (OS_TIMER_CLOCK))
|
||||
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
||||
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
||||
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
||||
|
||||
void *OSPhysicalToCached(u32 paddr);
|
||||
void *OSPhysicalToUncached(u32 paddr);
|
||||
u32 OSCachedToPhysical(void *caddr);
|
||||
u32 OSUncachedToPhysical(void *ucaddr);
|
||||
void *OSCachedToUncached(void *caddr);
|
||||
void *OSUncachedToCached(void *ucaddr);
|
||||
#if !DEBUG
|
||||
#define OSPhysicalToCached(paddr) ((void*) ((u32)(OS_BASE_CACHED + (u32)(paddr))))
|
||||
#define OSPhysicalToUncached(paddr) ((void*) ((u32)(OS_BASE_UNCACHED + (u32)(paddr))))
|
||||
#define OSCachedToPhysical(caddr) ((u32) ((u32)(caddr) - OS_BASE_CACHED))
|
||||
#define OSUncachedToPhysical(ucaddr) ((u32) ((u32)(ucaddr) - OS_BASE_UNCACHED))
|
||||
#define OSCachedToUncached(caddr) ((void*) ((u8*)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
#define OSUncachedToCached(ucaddr) ((void*) ((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
#endif
|
||||
|
||||
#define OFFSET(addr, align) (((u32)(addr) & ((align)-1)))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -10,23 +10,23 @@ extern "C"
|
||||
#endif
|
||||
|
||||
// Defines for cached and uncached memory.
|
||||
#define OS_BASE_CACHED (0x80000000)
|
||||
#define OS_BASE_UNCACHED (0xC0000000)
|
||||
// #define OS_BASE_CACHED (0x80000000)
|
||||
// #define OS_BASE_UNCACHED (0xC0000000)
|
||||
|
||||
// Address conversions.
|
||||
#define OSPhysicalToCached(paddr) ((void *)((u32)(paddr) + OS_BASE_CACHED))
|
||||
#define OSPhysicalToUncached(paddr) ((void *)((u32)(paddr) + OS_BASE_UNCACHED))
|
||||
#define OSCachedToPhysical(caddr) ((u32)((u8 *)(caddr)-OS_BASE_CACHED))
|
||||
#define OSUncachedToPhysical(ucaddr) ((u32)((u8 *)(ucaddr)-OS_BASE_UNCACHED))
|
||||
#define OSCachedToUncached(caddr) ((void *)((u8 *)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
#define OSUncachedToCached(ucaddr) ((void *)((u8 *)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
// // Address conversions.
|
||||
// #define OSPhysicalToCached(paddr) ((void *)((u32)(paddr) + OS_BASE_CACHED))
|
||||
// #define OSPhysicalToUncached(paddr) ((void *)((u32)(paddr) + OS_BASE_UNCACHED))
|
||||
// #define OSCachedToPhysical(caddr) ((u32)((u8 *)(caddr)-OS_BASE_CACHED))
|
||||
// #define OSUncachedToPhysical(ucaddr) ((u32)((u8 *)(ucaddr)-OS_BASE_UNCACHED))
|
||||
// #define OSCachedToUncached(caddr) ((void *)((u8 *)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
// #define OSUncachedToCached(ucaddr) ((void *)((u8 *)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
|
||||
#define OS_CACHED_REGION_PREFIX 0x8000
|
||||
#define OS_UNCACHED_REGION_PREFIX 0xC000
|
||||
#define OS_PHYSICAL_MASK 0x3FFF
|
||||
// #define OS_CACHED_REGION_PREFIX 0x8000
|
||||
// #define OS_UNCACHED_REGION_PREFIX 0xC000
|
||||
// #define OS_PHYSICAL_MASK 0x3FFF
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DOLPHIN_OSCONTEXT_H_
|
||||
#define _DOLPHIN_OSCONTEXT_H_
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
#ifndef DOLPHIN_OSEXI_H
|
||||
#define DOLPHIN_OSEXI_H
|
||||
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "dolphin/os/OSInterrupt.h"
|
||||
#include "types.h"
|
||||
|
||||
typedef enum {
|
||||
EXI_STATE_DMA_ACCESS = (1 << 0),
|
||||
EXI_STATE_IMM_ACCESS = (1 << 1),
|
||||
EXI_STATE_SELECTED = (1 << 2),
|
||||
EXI_STATE_ATTACHED = (1 << 3),
|
||||
EXI_STATE_LOCKED = (1 << 4),
|
||||
EXI_STATE_BUSY = EXI_STATE_DMA_ACCESS | EXI_STATE_IMM_ACCESS
|
||||
} EXIState;
|
||||
|
||||
typedef enum {
|
||||
EXI_CHAN_0,
|
||||
EXI_CHAN_1,
|
||||
EXI_CHAN_2,
|
||||
EXI_MAX_CHAN
|
||||
} EXIChannel;
|
||||
|
||||
typedef enum {
|
||||
EXI_READ,
|
||||
EXI_WRITE,
|
||||
EXI_TYPE_2,
|
||||
EXI_MAX_TYPE
|
||||
} EXIType;
|
||||
|
||||
typedef void (*EXICallback)(EXIChannel, OSContext*);
|
||||
|
||||
typedef struct EXIControl {
|
||||
EXICallback exiCallback;
|
||||
EXICallback tcCallback;
|
||||
EXICallback extCallback;
|
||||
vu32 state;
|
||||
int immLen;
|
||||
u8* immBuf;
|
||||
u32 dev;
|
||||
u32 id;
|
||||
s32 idTime;
|
||||
int items;
|
||||
struct {
|
||||
u32 dev;
|
||||
EXICallback callback;
|
||||
} queue[3];
|
||||
} EXIControl;
|
||||
|
||||
#define EXI_REG_MAX 5
|
||||
extern vu32 __EXIRegs[EXI_MAX_CHAN][EXI_REG_MAX] AT_ADDRESS(0xCC006800);
|
||||
|
||||
void SetExiInterruptMask(EXIChannel, volatile EXIControl*);
|
||||
BOOL EXIImm(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
|
||||
BOOL EXIImmEx(EXIChannel, void* buf, s32 len, u32 mode);
|
||||
BOOL EXIDma(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
|
||||
BOOL EXISync(EXIChannel);
|
||||
u32 EXIClearInterrupts(EXIChannel, BOOL exi, BOOL tc, BOOL ext);
|
||||
EXICallback EXISetExiCallback(EXIChannel, EXICallback exiCallback);
|
||||
BOOL EXIProbe(EXIChannel);
|
||||
s32 EXIProbeEx(EXIChannel);
|
||||
BOOL EXIAttach(EXIChannel, EXICallback);
|
||||
BOOL EXIDetach(EXIChannel);
|
||||
BOOL EXISelect(EXIChannel, u32 dev, u32 freq);
|
||||
BOOL EXIDeselect(EXIChannel);
|
||||
void EXIInit(void);
|
||||
BOOL EXILock(EXIChannel, u32 dev, EXICallback unlockedCallback);
|
||||
BOOL EXIUnlock(EXIChannel);
|
||||
u32 EXIGetState(EXIChannel);
|
||||
s32 EXIGetID(EXIChannel, u32 dev, u32* id);
|
||||
|
||||
#endif
|
||||
@@ -104,7 +104,7 @@ typedef enum OSInterruptType {
|
||||
|
||||
#define OS_INTRMASK_PI_PE (OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH)
|
||||
|
||||
typedef void (*OSInterruptHandler)(__OSInterrupt, OSContext*);
|
||||
typedef void (*__OSInterruptHandler)(__OSInterrupt, OSContext*);
|
||||
|
||||
extern volatile u32 __OSLastInterruptSrr0;
|
||||
extern volatile s16 __OSLastInterrupt;
|
||||
@@ -117,8 +117,8 @@ BOOL OSDisableInterrupts(void);
|
||||
BOOL OSEnableInterrupts(void);
|
||||
BOOL OSRestoreInterrupts(BOOL);
|
||||
|
||||
OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt, OSInterruptHandler);
|
||||
OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt);
|
||||
__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt, __OSInterruptHandler);
|
||||
__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt);
|
||||
|
||||
void __OSInterruptInit(void);
|
||||
|
||||
|
||||
+11
-11
@@ -1,8 +1,8 @@
|
||||
#ifndef DOLPHIN_OSRTC_H
|
||||
#define DOLPHIN_OSTRC_H
|
||||
#define DOLPHIN_OSRTC_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSExi.h"
|
||||
#include <dolphin/types.h>
|
||||
#include <dolphin/exi.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -27,7 +27,7 @@ extern "C" {
|
||||
#define RTC_DEVICE 1
|
||||
#define RTC_FREQUENCY 3
|
||||
|
||||
typedef struct OSSram_s {
|
||||
typedef struct OSSram {
|
||||
u16 checkSum;
|
||||
u16 checkSumInv;
|
||||
u32 ead0;
|
||||
@@ -39,7 +39,7 @@ typedef struct OSSram_s {
|
||||
u8 flags;
|
||||
} OSSram;
|
||||
|
||||
typedef struct OSSramEx_s {
|
||||
typedef struct OSSramEx {
|
||||
u8 flashID[2][12];
|
||||
u32 wirelessKeyboardID;
|
||||
u16 wirelessPadID[4];
|
||||
@@ -50,7 +50,7 @@ typedef struct OSSramEx_s {
|
||||
u8 pad1[2];
|
||||
} OSSramEx;
|
||||
|
||||
typedef struct SramControlBlock_s {
|
||||
typedef struct SramControlBlock {
|
||||
u8 sram[RTC_SRAM_SIZE];
|
||||
u32 offset;
|
||||
BOOL enabled;
|
||||
@@ -63,15 +63,15 @@ typedef struct SramControlBlock_s {
|
||||
// extern void __OSGetRTC();
|
||||
// extern void __OSSetRTC();
|
||||
static inline BOOL ReadSram(void* buffer);
|
||||
static void WriteSramCallback(EXIChannel chan, OSContext* ctx);
|
||||
static void WriteSramCallback(s32 chan, OSContext* ctx);
|
||||
static BOOL WriteSram(void* buffer, u32 offset, u32 size);
|
||||
extern void __OSInitSram();
|
||||
static inline void* LockSram(u32 offset);
|
||||
extern OSSram* __OSLockSram();
|
||||
extern OSSramEx* __OSLockSramEx();
|
||||
static BOOL UnlockSram(BOOL commit, u32 offset);
|
||||
extern void __OSUnlockSram(BOOL commit);
|
||||
extern void __OSUnlockSramEx(BOOL commit);
|
||||
// extern void __OSUnlockSram(BOOL commit);
|
||||
// extern void __OSUnlockSramEx(BOOL commit);
|
||||
extern BOOL __OSSyncSram();
|
||||
// extern void __OSCheckSram();
|
||||
// extern void __OSReadROM();
|
||||
@@ -89,8 +89,8 @@ extern void OSSetProgressiveMode(u32 on);
|
||||
extern void __OSSetBootMode(u8 mode);
|
||||
// extern void OSGetEuRgb60Mode();
|
||||
// extern void OSSetEuRgb60Mode();
|
||||
extern u16 OSGetWirelessID(u32 chan);
|
||||
extern void OSSetWirelessID(u32 chan, u16 id);
|
||||
extern u16 OSGetWirelessID(s32 chan);
|
||||
extern void OSSetWirelessID(s32 chan, u16 id);
|
||||
|
||||
#define GET_SOUNDMODE(flags) ((flags) & (1 << 2))
|
||||
#define CLR_SOUNDMODE(flags) ((flags) & (~(1 << 2)))
|
||||
|
||||
@@ -1,70 +1,96 @@
|
||||
#ifndef DOLPHIN_OSSERIAL
|
||||
#define DOLPHIN_OSSERIAL
|
||||
#ifndef _DOLPHIN_OSSERIAL_H
|
||||
#define _DOLPHIN_OSSERIAL_H
|
||||
|
||||
#include <types.h>
|
||||
#include <dolphin/hw_regs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define CHAN_NONE -1
|
||||
|
||||
#define SI_MAX_CHAN 4
|
||||
#define SI_MAX_COMCSR_INLNGTH 128
|
||||
#define SI_MAX_COMCSR_OUTLNGTH 128
|
||||
#define SI_ERROR_UNDER_RUN 0x0001
|
||||
#define SI_ERROR_OVER_RUN 0x0002
|
||||
#define SI_ERROR_COLLISION 0x0004
|
||||
#define SI_ERROR_NO_RESPONSE 0x0008
|
||||
#define SI_ERROR_WRST 0x0010
|
||||
#define SI_ERROR_RDST 0x0020
|
||||
#define SI_ERROR_UNKNOWN 0x0040
|
||||
#define SI_ERROR_BUSY 0x0080
|
||||
#define SI_CHAN0 0
|
||||
#define SI_CHAN1 1
|
||||
#define SI_CHAN2 2
|
||||
#define SI_CHAN3 3
|
||||
#define SI_CHAN0_BIT 0x80000000
|
||||
#define SI_CHAN1_BIT 0x40000000
|
||||
#define SI_CHAN2_BIT 0x20000000
|
||||
#define SI_CHAN3_BIT 0x10000000
|
||||
#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan))
|
||||
#define SI_TYPE_MASK 0x18000000u
|
||||
#define SI_TYPE_N64 0x00000000u
|
||||
#define SI_TYPE_DOLPHIN 0x08000000u
|
||||
#define SI_TYPE_GC SI_TYPE_DOLPHIN
|
||||
#define SI_GC_WIRELESS 0x80000000
|
||||
#define SI_GC_NOMOTOR 0x20000000
|
||||
#define SI_GC_STANDARD 0x01000000
|
||||
#define SI_WIRELESS_RECEIVED 0x40000000
|
||||
#define SI_WIRELESS_IR 0x04000000
|
||||
#define SI_WIRELESS_STATE 0x02000000
|
||||
#define SI_WIRELESS_ORIGIN 0x00200000
|
||||
#define SI_WIRELESS_FIX_ID 0x00100000
|
||||
#define SI_WIRELESS_TYPE 0x000f0000
|
||||
#define SI_WIRELESS_LITE_MASK 0x000c0000
|
||||
#define SI_WIRELESS_LITE 0x00040000
|
||||
#define SI_WIRELESS_CONT_MASK 0x00080000
|
||||
#define SI_WIRELESS_CONT 0x00000000
|
||||
#define SI_WIRELESS_ID 0x00c0ff00
|
||||
#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID)
|
||||
#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000)
|
||||
#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000)
|
||||
#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000)
|
||||
#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000)
|
||||
#define SI_GBA (SI_TYPE_N64 | 0x00040000)
|
||||
#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD)
|
||||
#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS)
|
||||
#define SI_GC_WAVEBIRD \
|
||||
(SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID)
|
||||
#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000)
|
||||
#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000)
|
||||
|
||||
#define SI_MAX_TYPE 4
|
||||
|
||||
#define SI_COMCSR_IDX 13
|
||||
#define SI_STATUS_IDX 14
|
||||
|
||||
#define SI_COMCSR_TCINT_MASK (1 << 31)
|
||||
#define SI_COMCSR_TCINTMSK_MASK (1 << 30)
|
||||
#define SI_COMCSR_COMERR_MASK (1 << 29)
|
||||
#define SI_COMCSR_RDSTINT_MASK (1 << 28)
|
||||
#define SI_COMCSR_RDSTINTMSK_MASK (1 << 27)
|
||||
// 4 bits of padding
|
||||
#define SI_COMCSR_OUTLNGTH_MASK (1 << 22) \
|
||||
| (1 << 21) \
|
||||
| (1 << 20) \
|
||||
| (1 << 19) \
|
||||
| (1 << 18) \
|
||||
| (1 << 17) \
|
||||
| (1 << 16)
|
||||
// 1 bit of padding
|
||||
#define SI_COMCSR_INLNGTH_MASK (1 << 14) \
|
||||
| (1 << 13) \
|
||||
| (1 << 12) \
|
||||
| (1 << 11) \
|
||||
| (1 << 10) \
|
||||
| (1 << 9) \
|
||||
| (1 << 8)
|
||||
// 5 bits of padding
|
||||
#define SI_COMCSR_CHANNEL_MASK (1 << 2) \
|
||||
| (1 << 1)
|
||||
#define SI_COMCSR_TSTART_MASK (1 << 0)
|
||||
|
||||
#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1))
|
||||
|
||||
typedef void (*SICallback)(s32, u32, OSContext*);
|
||||
|
||||
typedef struct SIControl {
|
||||
s32 chan;
|
||||
u32 poll;
|
||||
u32 inputBytes;
|
||||
void* input;
|
||||
SICallback callback;
|
||||
} SIControl;
|
||||
|
||||
typedef struct SIPacket {
|
||||
s32 chan;
|
||||
void* output;
|
||||
u32 outputBytes;
|
||||
void* input;
|
||||
u32 inputBytes;
|
||||
SICallback callback;
|
||||
OSTime fire;
|
||||
} SIPacket;
|
||||
|
||||
typedef void (*SITypeCallback)(s32, u32);
|
||||
|
||||
BOOL SIBusy();
|
||||
BOOL SIIsChanBusy(s32 chan);
|
||||
void SIInit();
|
||||
unsigned long SISync();
|
||||
u32 SIGetStatus(s32 chan);
|
||||
void SISetCommand(long chan, unsigned long command);
|
||||
unsigned long SIGetCommand(long chan);
|
||||
void SITransferCommands();
|
||||
unsigned long SISetXY(unsigned long x, unsigned long y);
|
||||
unsigned long SIEnablePolling(unsigned long poll);
|
||||
unsigned long SIDisablePolling(unsigned long poll);
|
||||
BOOL SIGetResponse(s32 chan, void * data);
|
||||
int SITransfer(long chan, void * output, unsigned long outputBytes, void * input, unsigned long inputBytes,
|
||||
void (* callback)(long, unsigned long, struct OSContext *), long long time);
|
||||
BOOL SIRegisterPollingHandler(__OSInterruptHandler handler);
|
||||
BOOL SIUnregisterPollingHandler(__OSInterruptHandler handler);
|
||||
u32 SIGetType(s32 chan);
|
||||
u32 SIGetTypeAsync(s32 chan, SITypeCallback callback);
|
||||
u32 SIProbe(s32 chan);
|
||||
char* SIGetTypeString(u32 type);
|
||||
void SIRefreshSamplingRate(void);
|
||||
|
||||
// SISamplingRate.c
|
||||
void SISetSamplingRate(u32 msec);
|
||||
void SIRefreshSamplingRate(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#if DEBUG
|
||||
void __SITestSamplingRate(u32 tvmode);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
extern u32 __PADFixBits;
|
||||
|
||||
#endif // _DOLPHIN_OSSERIAL_H
|
||||
|
||||
+12
-12
@@ -10,20 +10,20 @@ extern "C" {
|
||||
typedef s64 OSTime;
|
||||
typedef u32 OSTick;
|
||||
|
||||
u32 __busclock AT_ADDRESS(0x800000F8);
|
||||
// u32 __busclock AT_ADDRESS(0x800000F8);
|
||||
|
||||
#define OS_BUS_CLOCK __busclock
|
||||
// #define OS_BUS_CLOCK __busclock
|
||||
|
||||
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
|
||||
// #define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
|
||||
|
||||
#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK)
|
||||
#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000))
|
||||
#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000))
|
||||
#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000))
|
||||
#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK)
|
||||
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
||||
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
||||
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
||||
// #define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK)
|
||||
// #define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000))
|
||||
// #define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000))
|
||||
// #define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000))
|
||||
// #define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK)
|
||||
// #define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
||||
// #define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
||||
// #define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
||||
|
||||
OSTime OSGetTime(void);
|
||||
OSTime __OSGetSystemTime(void);
|
||||
@@ -49,4 +49,4 @@ void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef OS_ADDRESS_H
|
||||
#define OS_ADDRESS_H
|
||||
|
||||
// maybe put this in OSUtil instead
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// Defines for cached and uncached memory.
|
||||
#define OS_BASE_CACHED (0x80000000)
|
||||
#define OS_BASE_UNCACHED (0xC0000000)
|
||||
|
||||
// Address conversions.
|
||||
#define OSPhysicalToCached(paddr) ((void *)((u32)(paddr) + OS_BASE_CACHED))
|
||||
#define OSPhysicalToUncached(paddr) ((void *)((u32)(paddr) + OS_BASE_UNCACHED))
|
||||
#define OSCachedToPhysical(caddr) ((u32)((u8 *)(caddr)-OS_BASE_CACHED))
|
||||
#define OSUncachedToPhysical(ucaddr) ((u32)((u8 *)(ucaddr)-OS_BASE_UNCACHED))
|
||||
#define OSCachedToUncached(caddr) ((void *)((u8 *)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
#define OSUncachedToCached(ucaddr) ((void *)((u8 *)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
|
||||
#define OS_CACHED_REGION_PREFIX 0x8000
|
||||
#define OS_UNCACHED_REGION_PREFIX 0xC000
|
||||
#define OS_PHYSICAL_MASK 0x3FFF
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,41 +0,0 @@
|
||||
#ifndef DOLPHIN_OS_ALARM_H
|
||||
#define DOLPHIN_OS_ALARM_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include "dolphin/os/OSContext.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSAlarm OSAlarm;
|
||||
typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context);
|
||||
|
||||
struct OSAlarm
|
||||
{
|
||||
OSAlarmHandler handler;
|
||||
OSTime fire;
|
||||
OSAlarm *prev;
|
||||
OSAlarm *next;
|
||||
|
||||
// Periodic alarm
|
||||
OSTime period;
|
||||
OSTime start;
|
||||
};
|
||||
|
||||
void OSInitAlarm(void);
|
||||
void OSSetAlarm(OSAlarm *alarm, OSTime tick, OSAlarmHandler handler);
|
||||
void OSSetAbsAlarm(OSAlarm *alarm, OSTime time, OSAlarmHandler handler);
|
||||
void OSSetPeriodicAlarm(OSAlarm *alarm, OSTime start, OSTime period,
|
||||
OSAlarmHandler handler);
|
||||
void OSCreateAlarm(OSAlarm *alarm);
|
||||
void OSCancelAlarm(OSAlarm *alarm);
|
||||
|
||||
BOOL OSCheckAlarmQueue(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // DOLPHIN_OS_ALARM_H
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef OS_ALLOC_H
|
||||
#define OS_ALLOC_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef int OSHeapHandle;
|
||||
|
||||
extern volatile OSHeapHandle __OSCurrHeap;
|
||||
|
||||
void* OSAllocFromHeap(int heap, unsigned long size);
|
||||
void* OSAllocFixed(void* rstart, void* rend);
|
||||
void OSFreeToHeap(int heap, void* ptr);
|
||||
int OSSetCurrentHeap(int heap);
|
||||
void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps);
|
||||
int OSCreateHeap(void* start, void* end);
|
||||
void OSDestroyHeap(int heap);
|
||||
void OSAddToHeap(int heap, void* start, void* end);
|
||||
long OSCheckHeap(int heap);
|
||||
unsigned long OSReferentSize(void* ptr);
|
||||
void OSDumpHeap(int heap);
|
||||
void OSVisitAllocated(void (*visitor)(void*, unsigned long));
|
||||
|
||||
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
|
||||
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef OS_ARENA_H
|
||||
#define OS_ARENA_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
|
||||
void OSSetArenaHi(void*);
|
||||
void OSSetArenaLo(void*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,30 +0,0 @@
|
||||
#ifndef OS_CACHE_H
|
||||
#define OS_CACHE_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void DCEnable(void);
|
||||
void DCInvalidateRange(void*, u32);
|
||||
void DCFlushRange(void*, u32);
|
||||
void DCStoreRange(void*, u32);
|
||||
void DCFlushRangeNoSync(void*, u32);
|
||||
void DCStoreRangeNoSync(void*, u32);
|
||||
void DCZeroRange(void*, u32);
|
||||
void DCTouchRange(void*, u32 len);
|
||||
void ICInvalidateRange(void*, u32);
|
||||
void ICFlashInvalidate(void);
|
||||
void ICEnable(void);
|
||||
void LCDisable(void);
|
||||
|
||||
//void L2GlobalInvalidate(void);
|
||||
|
||||
//void DMAErrorHandler(u8, struct OSContext*, u32, u32, ...);
|
||||
|
||||
//void __OSCacheInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,45 +0,0 @@
|
||||
#ifndef OS_CONTEXT_H
|
||||
#define OS_CONTEXT_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSContext{
|
||||
u32 gprs[32];
|
||||
u32 cr;
|
||||
u32 lr;
|
||||
u32 ctr;
|
||||
u32 xer;
|
||||
f64 fprs[32];
|
||||
u32 fpscr_tmp;
|
||||
u32 fpscr;
|
||||
u32 srr0;
|
||||
u32 srr1;
|
||||
u16 mode;
|
||||
u16 state;
|
||||
u32 gqrs[8];
|
||||
char UNK_0x1C4;
|
||||
f64 psfs[32];
|
||||
} OSContext;
|
||||
|
||||
OSContext* OS_CURRENT_CONTEXT_PHYS AT_ADDRESS(0x800000C0);
|
||||
OSContext* OS_CURRENT_CONTEXT AT_ADDRESS(0x800000D4);
|
||||
OSContext* OS_CURRENT_FPU_CONTEXT AT_ADDRESS(0x800000D8);
|
||||
|
||||
void OSSaveFPUContext(OSContext*);
|
||||
void OSSetCurrentContext(OSContext*);
|
||||
OSContext* OSGetCurrentContext(void);
|
||||
BOOL OSSaveContext(OSContext*);
|
||||
void OSLoadContext(OSContext*);
|
||||
void* OSGetStackPointer(void);
|
||||
void OSClearContext(OSContext*);
|
||||
void OSInitContext(register OSContext*, register u32 srr, register u32 sp);
|
||||
void OSDumpContext(const OSContext*);
|
||||
|
||||
void __OSContextInit(void);
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef OS_ERROR_H
|
||||
#define OS_ERROR_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
OS_ERR_SYSTEM_RESET,
|
||||
OS_ERR_MACHINE_CHECK,
|
||||
OS_ERR_DSI,
|
||||
OS_ERR_ISI,
|
||||
OS_ERR_EXT_INTERRUPT,
|
||||
OS_ERR_ALIGMENT,
|
||||
OS_ERR_PROGRAM,
|
||||
OS_ERR_FP_UNAVAIL,
|
||||
OS_ERR_DECREMENTER,
|
||||
OS_ERR_SYSTEM_CALL,
|
||||
OS_ERR_TRACE,
|
||||
OS_ERR_PERF_MONITOR,
|
||||
OS_ERR_IABR,
|
||||
OS_ERR_SMI,
|
||||
OS_ERR_THERMAL_INT,
|
||||
OS_ERR_PROTECTION,
|
||||
OS_ERR_FP_EXCEPTION,
|
||||
OS_ERR_MAX,
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef DOLPHIN_OSEXCEPTION_H
|
||||
#define DOLPHIN_OSEXCEPTION_H
|
||||
|
||||
typedef enum OSException {
|
||||
OS_EXCEPTION_FLOATING_POINT = 7,
|
||||
OS_EXCEPTION_COUNT = 15,
|
||||
} OSException;
|
||||
|
||||
#endif
|
||||
@@ -1,72 +0,0 @@
|
||||
#ifndef DOLPHIN_OSEXI_H
|
||||
#define DOLPHIN_OSEXI_H
|
||||
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "dolphin/os/OSInterrupt.h"
|
||||
#include "types.h"
|
||||
|
||||
typedef enum {
|
||||
EXI_STATE_DMA_ACCESS = (1 << 0),
|
||||
EXI_STATE_IMM_ACCESS = (1 << 1),
|
||||
EXI_STATE_SELECTED = (1 << 2),
|
||||
EXI_STATE_ATTACHED = (1 << 3),
|
||||
EXI_STATE_LOCKED = (1 << 4),
|
||||
EXI_STATE_BUSY = EXI_STATE_DMA_ACCESS | EXI_STATE_IMM_ACCESS
|
||||
} EXIState;
|
||||
|
||||
typedef enum {
|
||||
EXI_CHAN_0,
|
||||
EXI_CHAN_1,
|
||||
EXI_CHAN_2,
|
||||
EXI_MAX_CHAN
|
||||
} EXIChannel;
|
||||
|
||||
typedef enum {
|
||||
EXI_READ,
|
||||
EXI_WRITE,
|
||||
EXI_TYPE_2,
|
||||
EXI_MAX_TYPE
|
||||
} EXIType;
|
||||
|
||||
typedef void (*EXICallback)(EXIChannel, OSContext*);
|
||||
|
||||
typedef struct EXIControl {
|
||||
EXICallback exiCallback;
|
||||
EXICallback tcCallback;
|
||||
EXICallback extCallback;
|
||||
vu32 state;
|
||||
int immLen;
|
||||
u8* immBuf;
|
||||
u32 dev;
|
||||
u32 id;
|
||||
s32 idTime;
|
||||
int items;
|
||||
struct {
|
||||
u32 dev;
|
||||
EXICallback callback;
|
||||
} queue[3];
|
||||
} EXIControl;
|
||||
|
||||
#define EXI_REG_MAX 5
|
||||
extern vu32 __EXIRegs[EXI_MAX_CHAN][EXI_REG_MAX] AT_ADDRESS(0xCC006800);
|
||||
|
||||
void SetExiInterruptMask(EXIChannel, volatile EXIControl*);
|
||||
BOOL EXIImm(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
|
||||
BOOL EXIImmEx(EXIChannel, void* buf, s32 len, u32 mode);
|
||||
BOOL EXIDma(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
|
||||
BOOL EXISync(EXIChannel);
|
||||
u32 EXIClearInterrupts(EXIChannel, BOOL exi, BOOL tc, BOOL ext);
|
||||
EXICallback EXISetExiCallback(EXIChannel, EXICallback exiCallback);
|
||||
BOOL EXIProbe(EXIChannel);
|
||||
s32 EXIProbeEx(EXIChannel);
|
||||
BOOL EXIAttach(EXIChannel, EXICallback);
|
||||
BOOL EXIDetach(EXIChannel);
|
||||
BOOL EXISelect(EXIChannel, u32 dev, u32 freq);
|
||||
BOOL EXIDeselect(EXIChannel);
|
||||
void EXIInit(void);
|
||||
BOOL EXILock(EXIChannel, u32 dev, EXICallback unlockedCallback);
|
||||
BOOL EXIUnlock(EXIChannel);
|
||||
u32 EXIGetState(EXIChannel);
|
||||
s32 EXIGetID(EXIChannel, u32 dev, u32* id);
|
||||
|
||||
#endif
|
||||
@@ -1,124 +0,0 @@
|
||||
#ifndef _DOLPHIN_OS_OSFASTCAST_H
|
||||
#define _DOLPHIN_OS_OSFASTCAST_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
/////// FAST CAST DEFINES ////////
|
||||
// GQR formats.
|
||||
#define OS_GQR_U8 (0x0004) // GQR 1
|
||||
#define OS_GQR_U16 (0x0005) // GQR 2
|
||||
#define OS_GQR_S8 (0x0006) // GQR 3
|
||||
#define OS_GQR_S16 (0x0007) // GQR 4
|
||||
|
||||
// GQRs for fast casting.
|
||||
#define OS_FASTCAST_U8 (2)
|
||||
#define OS_FASTCAST_U16 (3)
|
||||
#define OS_FASTCAST_S8 (4)
|
||||
#define OS_FASTCAST_S16 (5)
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
/////// FAST CAST INLINES ////////
|
||||
// Initialise fast casting.
|
||||
static inline void OSInitFastCast() {
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
asm {
|
||||
li r3, OS_GQR_U8
|
||||
oris r3, r3, OS_GQR_U8
|
||||
mtspr 0x392, r3
|
||||
li r3, OS_GQR_U16
|
||||
oris r3, r3, OS_GQR_U16
|
||||
mtspr 0x393, r3
|
||||
li r3, OS_GQR_S8
|
||||
oris r3, r3, OS_GQR_S8
|
||||
mtspr 0x394, r3
|
||||
li r3, OS_GQR_S16
|
||||
oris r3, r3, OS_GQR_S16
|
||||
mtspr 0x395, r3
|
||||
}
|
||||
#endif // clang-format on
|
||||
}
|
||||
|
||||
// Float to int.
|
||||
static inline s16 __OSf32tos16(register f32 inF) {
|
||||
register s16 out;
|
||||
u32 tmp;
|
||||
register u32* tmpPtr = &tmp;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
asm {
|
||||
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_S16
|
||||
lha out, 0(tmpPtr)
|
||||
}
|
||||
#endif // clang-format on
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static inline void OSf32tos16(f32* f, s16* out) {
|
||||
*out = __OSf32tos16(*f);
|
||||
}
|
||||
|
||||
static inline u8 __OSf32tou8(register f32 inF) {
|
||||
register u8 out;
|
||||
u32 tmp;
|
||||
register u32* tmpPtr = &tmp;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
asm {
|
||||
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_U8
|
||||
lbz out, 0(tmpPtr)
|
||||
}
|
||||
#endif // clang-format on
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static inline void OSf32tou8(f32* f, u8* out) {
|
||||
*out = __OSf32tou8(*f);
|
||||
}
|
||||
|
||||
static inline s8 __OSf32tos8(register f32 inF) {
|
||||
register s8 out;
|
||||
u32 tmp;
|
||||
register u32* tmpPtr = &tmp;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
asm {
|
||||
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_S8
|
||||
lbz out, 0(tmpPtr)
|
||||
extsb out, out
|
||||
}
|
||||
#endif // clang-format on
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static inline void OSf32tos8(f32* f, s8* out) {
|
||||
*out = __OSf32tos8(*f);
|
||||
}
|
||||
|
||||
static inline float __OSs16tof32(register s16* s) {
|
||||
register float f;
|
||||
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
asm {
|
||||
psq_l f, 0(s), 1, 5
|
||||
}
|
||||
#endif // clang-format on
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
static inline void OSs16tof32(register s16* s, volatile register f32* f) {
|
||||
*f = __OSs16tof32(s);
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
#endif
|
||||
@@ -1,55 +0,0 @@
|
||||
#ifndef OSFONT_H
|
||||
#define OSFONT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSFontHeader {
|
||||
u16 fontType; // _00
|
||||
u16 firstChar; // _02, first char code defined in font.
|
||||
u16 lastChar; // _04, last char code defined in font.
|
||||
u16 invalChar; // _06, code to sub for invalid chars.
|
||||
u16 ascent; // _08
|
||||
u16 descent; // _0A
|
||||
u16 width; // _0C, max width.
|
||||
u16 leading; // _0E
|
||||
u16 cellWidth; // _10
|
||||
u16 cellHeight; // _12
|
||||
u32 sheetSize; // _14
|
||||
u16 sheetFormat; // _18, see GX_TF_* part of GXTexFmt enum
|
||||
u16 sheetColumn; // _1A
|
||||
u16 sheetRow; // _1C
|
||||
u16 sheetWidth; // _1E
|
||||
u16 sheetHeight; // _20
|
||||
u16 widthTable; // _22
|
||||
u32 sheetImage; // _24
|
||||
u32 sheetFullSize; // _28
|
||||
u8 c0; // _2C, font color components?
|
||||
u8 c1; // _2D
|
||||
u8 c2; // _2E
|
||||
u8 c3; // _2F
|
||||
} OSFontHeader;
|
||||
|
||||
#define OS_FONT_ENCODE_NULL -1
|
||||
#define OS_FONT_ENCODE_ANSI 0u
|
||||
#define OS_FONT_ENCODE_SJIS 1u
|
||||
#define OS_FONT_ENCODE_UTF8 3u // UTF-8 [RFC 3629]
|
||||
#define OS_FONT_ENCODE_UTF16 4u // UTF-16BE [RFC 2781]
|
||||
#define OS_FONT_ENCODE_UTF32 5u // UTF-32
|
||||
#define OS_FONT_ENCODE_MAX 5u
|
||||
#define OS_FONT_ENCODE_VOID 0xffffu
|
||||
|
||||
#define OS_FONT_PROPORTIONAL FALSE
|
||||
#define OS_FONT_FIXED TRUE
|
||||
|
||||
u16 OSGetFontEncode(void);
|
||||
u16 OSSetFontEncode(u16 encode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,136 +0,0 @@
|
||||
#ifndef DOLPHIN_OSINTERRUPT_H
|
||||
#define DOLPHIN_OSINTERRUPT_H
|
||||
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "dolphin/os/OSException.h"
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef s16 __OSInterrupt;
|
||||
typedef u32 OSInterruptMask;
|
||||
|
||||
typedef enum OSInterruptType {
|
||||
OS_INTR_MEM_0,
|
||||
OS_INTR_MEM_1,
|
||||
OS_INTR_MEM_2,
|
||||
OS_INTR_MEM_3,
|
||||
OS_INTR_MEM_ADDRESS,
|
||||
OS_INTR_DSP_AI,
|
||||
OS_INTR_DSP_ARAM,
|
||||
OS_INTR_DSP_DSP,
|
||||
OS_INTR_AI_AI,
|
||||
OS_INTR_EXI_0_EXI,
|
||||
OS_INTR_EXI_0_TC,
|
||||
OS_INTR_EXI_0_EXT,
|
||||
OS_INTR_EXI_1_EXI,
|
||||
OS_INTR_EXI_1_TC,
|
||||
OS_INTR_EXI_1_EXT,
|
||||
OS_INTR_EXI_2_EXI,
|
||||
OS_INTR_EXI_2_TC,
|
||||
OS_INTR_PI_CP,
|
||||
OS_INTR_PI_PE_TOKEN,
|
||||
OS_INTR_PI_PE_FINISH,
|
||||
OS_INTR_PI_SI,
|
||||
OS_INTR_PI_DI,
|
||||
OS_INTR_PI_RSW,
|
||||
OS_INTR_PI_ERROR,
|
||||
OS_INTR_PI_VI,
|
||||
OS_INTR_PI_DEBUG,
|
||||
OS_INTR_PI_HSP,
|
||||
OS_INTR_PI_ACR,
|
||||
OS_INTR_28,
|
||||
OS_INTR_29,
|
||||
OS_INTR_30,
|
||||
OS_INTR_31,
|
||||
|
||||
OS_INTR_MAX
|
||||
} OSInterruptType;
|
||||
|
||||
#define OS_INTRMASK_MEM_0 (0x80000000U >> OS_INTR_MEM_0)
|
||||
#define OS_INTRMASK_MEM_1 (0x80000000U >> OS_INTR_MEM_1)
|
||||
#define OS_INTRMASK_MEM_2 (0x80000000U >> OS_INTR_MEM_2)
|
||||
#define OS_INTRMASK_MEM_3 (0x80000000U >> OS_INTR_MEM_3)
|
||||
#define OS_INTRMASK_MEM_ADDRESS (0x80000000U >> OS_INTR_MEM_ADDRESS)
|
||||
#define OS_INTRMASK_DSP_AI (0x80000000U >> OS_INTR_DSP_AI)
|
||||
#define OS_INTRMASK_DSP_ARAM (0x80000000U >> OS_INTR_DSP_ARAM)
|
||||
#define OS_INTRMASK_DSP_DSP (0x80000000U >> OS_INTR_DSP_DSP)
|
||||
#define OS_INTRMASK_AI_AI (0x80000000U >> OS_INTR_AI_AI)
|
||||
#define OS_INTRMASK_EXI_0_EXI (0x80000000U >> OS_INTR_EXI_0_EXI)
|
||||
#define OS_INTRMASK_EXI_0_TC (0x80000000U >> OS_INTR_EXI_0_TC)
|
||||
#define OS_INTRMASK_EXI_0_EXT (0x80000000U >> OS_INTR_EXI_0_EXT)
|
||||
#define OS_INTRMASK_EXI_1_EXI (0x80000000U >> OS_INTR_EXI_1_EXI)
|
||||
#define OS_INTRMASK_EXI_1_TC (0x80000000U >> OS_INTR_EXI_1_TC)
|
||||
#define OS_INTRMASK_EXI_1_EXT (0x80000000U >> OS_INTR_EXI_1_EXT)
|
||||
#define OS_INTRMASK_EXI_2_EXI (0x80000000U >> OS_INTR_EXI_2_EXI)
|
||||
#define OS_INTRMASK_EXI_2_TC (0x80000000U >> OS_INTR_EXI_2_TC)
|
||||
#define OS_INTRMASK_PI_CP (0x80000000U >> OS_INTR_PI_CP)
|
||||
#define OS_INTRMASK_PI_PE_TOKEN (0x80000000U >> OS_INTR_PI_PE_TOKEN)
|
||||
#define OS_INTRMASK_PI_PE_FINISH (0x80000000U >> OS_INTR_PI_PE_FINISH)
|
||||
#define OS_INTRMASK_PI_SI (0x80000000U >> OS_INTR_PI_SI)
|
||||
#define OS_INTRMASK_PI_DI (0x80000000U >> OS_INTR_PI_DI)
|
||||
#define OS_INTRMASK_PI_RSW (0x80000000U >> OS_INTR_PI_RSW)
|
||||
#define OS_INTRMASK_PI_ERROR (0x80000000U >> OS_INTR_PI_ERROR)
|
||||
#define OS_INTRMASK_PI_VI (0x80000000U >> OS_INTR_PI_VI)
|
||||
#define OS_INTRMASK_PI_DEBUG (0x80000000U >> OS_INTR_PI_DEBUG)
|
||||
#define OS_INTRMASK_PI_HSP (0x80000000U >> OS_INTR_PI_HSP)
|
||||
|
||||
#define OS_INTRMASK_MEM \
|
||||
(OS_INTRMASK_MEM_0 | OS_INTRMASK_MEM_1 | OS_INTRMASK_MEM_2 | \
|
||||
OS_INTRMASK_MEM_3 | OS_INTRMASK_MEM_ADDRESS)
|
||||
|
||||
#define OS_INTRMASK_AI (OS_INTRMASK_AI_AI)
|
||||
|
||||
#define OS_INTRMASK_DSP \
|
||||
(OS_INTRMASK_DSP_AI | OS_INTRMASK_DSP_ARAM | OS_INTRMASK_DSP_DSP)
|
||||
|
||||
#define OS_INTRMASK_EXI_0 \
|
||||
(OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT)
|
||||
#define OS_INTRMASK_EXI_1 \
|
||||
(OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT)
|
||||
#define OS_INTRMASK_EXI_2 (OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
|
||||
#define OS_INTRMASK_EXI \
|
||||
(OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT | \
|
||||
OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT | \
|
||||
OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
|
||||
|
||||
#define OS_INTRMASK_PI \
|
||||
(OS_INTRMASK_PI_CP | OS_INTRMASK_PI_SI | OS_INTRMASK_PI_DI | \
|
||||
OS_INTRMASK_PI_RSW | OS_INTRMASK_PI_ERROR | OS_INTRMASK_PI_VI | \
|
||||
OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH | \
|
||||
OS_INTRMASK_PI_DEBUG | OS_INTRMASK_PI_HSP)
|
||||
|
||||
#define OS_INTRMASK_PI_PE (OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH)
|
||||
|
||||
typedef void (*OSInterruptHandler)(__OSInterrupt, OSContext*);
|
||||
|
||||
extern volatile u32 __OSLastInterruptSrr0;
|
||||
extern volatile s16 __OSLastInterrupt;
|
||||
extern volatile s64 __OSLastInterruptTime;
|
||||
|
||||
void __RAS_OSDisableInterrupts_begin(void);
|
||||
void __RAS_OSDisableInterrupts_end(void);
|
||||
|
||||
BOOL OSDisableInterrupts(void);
|
||||
BOOL OSEnableInterrupts(void);
|
||||
BOOL OSRestoreInterrupts(BOOL);
|
||||
|
||||
OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt, OSInterruptHandler);
|
||||
OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt);
|
||||
|
||||
void __OSInterruptInit(void);
|
||||
|
||||
u32 __OSMaskInterrupts(u32);
|
||||
u32 __OSUnmaskInterrupts(u32);
|
||||
|
||||
u32 SetInterruptMask(OSInterruptMask mask, OSInterruptMask current);
|
||||
void __OSDispatchInterrupt(OSException exception, OSContext* context);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef OS_MEMORY_H
|
||||
#define OS_MEMORY_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SIM_MEM *(u32 *)0x800000f0
|
||||
static void Config24MB();
|
||||
static void Config48MB();
|
||||
u32 OSGetConsoleSimulatedMemSize(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,51 +0,0 @@
|
||||
#ifndef _DOLPHIN_OS_OSMESSAGE_H
|
||||
#define _DOLPHIN_OS_OSMESSAGE_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSUtil.h"
|
||||
#include "dolphin/os/OSThread.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
///////// MESSAGE TYPES //////////
|
||||
typedef struct OSMessageQueue OSMessageQueue;
|
||||
|
||||
// Useful typedef for messages.
|
||||
typedef void* OSMessage;
|
||||
|
||||
// Struct for managing the message queue.
|
||||
struct OSMessageQueue {
|
||||
OSThreadQueue queueSend; // _00
|
||||
OSThreadQueue queueReceive; // _08
|
||||
OSMessage* msgArray; // _10, array of messages.
|
||||
int msgCount; // _14, array limit size.
|
||||
int firstIndex; // _18, first message index in array.
|
||||
int usedCount; // _1C, actual number of used messages.
|
||||
};
|
||||
|
||||
// Defines for message flags for sending/receiving.
|
||||
#define OS_MESSAGE_NOBLOCK (0)
|
||||
#define OS_MESSAGE_BLOCK (1)
|
||||
|
||||
typedef enum {
|
||||
OS_MSG_PERSISTENT = (1 << 0),
|
||||
} OSMessageFlags;
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
/////// MESSAGE FUNCTIONS ////////
|
||||
// Functions for handling messages.
|
||||
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* msgArray, int msgCount);
|
||||
BOOL OSSendMessage(OSMessageQueue* queue, OSMessage msg, int flags);
|
||||
BOOL OSJamMessage(OSMessageQueue* queue, OSMessage msg, int flags);
|
||||
BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage* msgPtr, int flags);
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
#endif
|
||||
@@ -1,72 +0,0 @@
|
||||
#ifndef DOLPHIN_OSMODULE_H
|
||||
#define DOLPHIN_OSMODULE_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSModuleInfo_s OSModuleInfo;
|
||||
|
||||
typedef struct OSModuleQueue_s {
|
||||
OSModuleInfo* head;
|
||||
OSModuleInfo* tail;
|
||||
} OSModuleQueue;
|
||||
|
||||
typedef struct OSModuleLink_s {
|
||||
OSModuleInfo* next;
|
||||
OSModuleInfo* prev;
|
||||
} OSModuleLink;
|
||||
|
||||
typedef struct OSModuleInfo_s {
|
||||
u32 id;
|
||||
OSModuleLink link;
|
||||
u32 numSections;
|
||||
u32 sectionInfoOfs;
|
||||
u32 nameOfs;
|
||||
u32 nameSize;
|
||||
u32 version;
|
||||
} OSModuleInfo;
|
||||
|
||||
typedef struct OSModuleHeader_s {
|
||||
OSModuleInfo info;
|
||||
u32 bssSize;
|
||||
u32 relOfs;
|
||||
u32 impOfs;
|
||||
u32 impSize;
|
||||
|
||||
u8 prologSection;
|
||||
u8 epilogSection;
|
||||
u8 unresolvedSection;
|
||||
u8 bssSection;
|
||||
|
||||
u32 prolog;
|
||||
u32 epilog;
|
||||
u32 unresolved;
|
||||
/* OS_MODULE_VERSION >= 2 */
|
||||
|
||||
u32 align;
|
||||
u32 bssAlign;
|
||||
} OSModuleHeader;
|
||||
|
||||
typedef struct OSSectionInfo_s {
|
||||
u32 offset;
|
||||
u32 size;
|
||||
} OSSectionInfo;
|
||||
|
||||
#define OSGetSectionInfo(module) \
|
||||
((OSSectionInfo*) (((OSModuleInfo*) (module))->sectionInfoOfs))
|
||||
|
||||
#define OS_SECTIONINFO_EXEC 1
|
||||
#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~OS_SECTIONINFO_EXEC)
|
||||
|
||||
void OSSetStringTable (const void* strTable);
|
||||
BOOL OSLink(OSModuleInfo* module, void* bss);
|
||||
BOOL OSUnlink(OSModuleInfo* module);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,36 +0,0 @@
|
||||
#ifndef OS_MUTEX_H
|
||||
#define OS_MUTEX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "dolphin/os/OSThread.h"
|
||||
|
||||
struct OSMutex
|
||||
{
|
||||
OSThreadQueue queue;
|
||||
OSThread *thread; // the current owner
|
||||
s32 count; // lock count
|
||||
OSMutexLink link; // for OSThread.queueMutex
|
||||
};
|
||||
|
||||
struct OSCond
|
||||
{
|
||||
OSThreadQueue queue;
|
||||
};
|
||||
|
||||
void OSInitMutex(OSMutex *mutex);
|
||||
void OSLockMutex(OSMutex *mutex);
|
||||
void OSUnlockMutex(OSMutex *mutex);
|
||||
BOOL OSTryLockMutex(OSMutex *mutex);
|
||||
void OSInitCond(OSCond *cond);
|
||||
void OSWaitCond(OSCond *cond, OSMutex *mutex);
|
||||
void OSSignalCond(OSCond *cond);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // DOLPHIN_OSMUTEX_H
|
||||
@@ -1,38 +0,0 @@
|
||||
#ifndef OSRESET_H
|
||||
#define OSRESET_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define OS_RESETCODE_RESTART 0x80000000
|
||||
|
||||
#define OS_RESET_RESTART 0
|
||||
#define OS_RESET_HOTRESET 1 /* Soft reset */
|
||||
#define OS_RESET_SHUTDOWN 2
|
||||
|
||||
typedef BOOL (*OSResetFunction)(BOOL final);
|
||||
typedef struct OSResetFunctionInfo OSResetFunctionInfo;
|
||||
|
||||
struct OSResetFunctionInfo {
|
||||
// public
|
||||
OSResetFunction func;
|
||||
u32 priority;
|
||||
|
||||
// private
|
||||
OSResetFunctionInfo* next;
|
||||
OSResetFunctionInfo* prev;
|
||||
};
|
||||
|
||||
u32 OSGetResetCode();
|
||||
void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu);
|
||||
BOOL OSGetResetSwitchState();
|
||||
void OSGetSaveRegion(void** start, void** end);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef OSRESETSW_H
|
||||
#define OSRESETSW_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
BOOL OSGetResetSwitchState();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,111 +0,0 @@
|
||||
#ifndef DOLPHIN_OSRTC_H
|
||||
#define DOLPHIN_OSTRC_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSExi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define OS_SOUND_MODE_MONO 0
|
||||
#define OS_SOUND_MODE_STEREO 1
|
||||
|
||||
#define OS_PROGRESSIVE_MODE_OFF 0
|
||||
#define OS_PROGRESSIVE_MODE_ON 1
|
||||
|
||||
#define OS_BOOT_MODE_DEBUG (0 << 7)
|
||||
#define OS_BOOT_MODE_RETAIL (1 << 7)
|
||||
|
||||
#define RTC_CMD_READ 0x20000000
|
||||
#define RTC_CMD_WRITE 0xA0000000
|
||||
|
||||
#define RTC_SRAM_ADDR 0x00000100
|
||||
#define RTC_SRAM_SIZE 64
|
||||
|
||||
#define RTC_CHAN EXI_CHAN_0
|
||||
#define RTC_DEVICE 1
|
||||
#define RTC_FREQUENCY 3
|
||||
|
||||
typedef struct OSSram_s {
|
||||
u16 checkSum;
|
||||
u16 checkSumInv;
|
||||
u32 ead0;
|
||||
u32 ead1;
|
||||
u32 counterBias;
|
||||
s8 displayOffsetH;
|
||||
u8 ntd;
|
||||
u8 language;
|
||||
u8 flags;
|
||||
} OSSram;
|
||||
|
||||
typedef struct OSSramEx_s {
|
||||
u8 flashID[2][12];
|
||||
u32 wirelessKeyboardID;
|
||||
u16 wirelessPadID[4];
|
||||
u8 dvdErrorCode;
|
||||
u8 pad0;
|
||||
u8 flashIDCheckSum[2];
|
||||
u16 gbs;
|
||||
u8 pad1[2];
|
||||
} OSSramEx;
|
||||
|
||||
typedef struct SramControlBlock_s {
|
||||
u8 sram[RTC_SRAM_SIZE];
|
||||
u32 offset;
|
||||
BOOL enabled;
|
||||
BOOL locked;
|
||||
BOOL sync;
|
||||
void (*callback)(void);
|
||||
} SramControlBlock;
|
||||
|
||||
// static void GetRTC();
|
||||
// extern void __OSGetRTC();
|
||||
// extern void __OSSetRTC();
|
||||
static inline BOOL ReadSram(void* buffer);
|
||||
static void WriteSramCallback(EXIChannel chan, OSContext* ctx);
|
||||
static BOOL WriteSram(void* buffer, u32 offset, u32 size);
|
||||
extern void __OSInitSram();
|
||||
static inline void* LockSram(u32 offset);
|
||||
extern OSSram* __OSLockSram();
|
||||
extern OSSramEx* __OSLockSramEx();
|
||||
static BOOL UnlockSram(BOOL commit, u32 offset);
|
||||
extern void __OSUnlockSram(BOOL commit);
|
||||
extern void __OSUnlockSramEx(BOOL commit);
|
||||
extern BOOL __OSSyncSram();
|
||||
// extern void __OSCheckSram();
|
||||
// extern void __OSReadROM();
|
||||
// extern void __OSReadROMCallback();
|
||||
// extern void __OSReadROMAsync();
|
||||
extern u32 OSGetSoundMode();
|
||||
extern void OSSetSoundMode(u32 mode);
|
||||
extern u32 OSGetProgressiveMode();
|
||||
extern void OSSetProgressiveMode(u32 on);
|
||||
// extern void OSGetVideoMode();
|
||||
// extern void OSSetVideoMode();
|
||||
// extern void OSGetLanguage();
|
||||
// extern void OSSetLanguage();
|
||||
// extern void __OSGetBootMode();
|
||||
extern void __OSSetBootMode(u8 mode);
|
||||
// extern void OSGetEuRgb60Mode();
|
||||
// extern void OSSetEuRgb60Mode();
|
||||
extern u16 OSGetWirelessID(u32 chan);
|
||||
extern void OSSetWirelessID(u32 chan, u16 id);
|
||||
|
||||
#define GET_SOUNDMODE(flags) ((flags) & (1 << 2))
|
||||
#define CLR_SOUNDMODE(flags) ((flags) & (~(1 << 2)))
|
||||
#define SET_SOUNDMODE(mode) (((mode) & 1) << 2)
|
||||
|
||||
#define GET_PROGMODE(flags) ((flags) & (1 << 7))
|
||||
#define CLR_PROGMODE(flags) ((flags) & (~(1 << 7)))
|
||||
#define SET_PROGMODE(mode) (((mode) & 1) << 7)
|
||||
|
||||
#define GET_BOOTMODE(flags) ((flags) & (1 << 7))
|
||||
#define CLR_BOOTMODE(flags) ((flags) & (~(1 << 7)))
|
||||
#define SET_BOOTMODE(mode) (mode)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,129 +0,0 @@
|
||||
#ifndef OS_THREAD_H
|
||||
#define OS_THREAD_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "dolphin/os/OSContext.h"
|
||||
|
||||
typedef struct OSThread OSThread;
|
||||
typedef struct OSThreadQueue OSThreadQueue;
|
||||
typedef struct OSThreadLink OSThreadLink;
|
||||
typedef s32 OSPriority; // 0 highest, 31 lowest
|
||||
|
||||
typedef struct OSMutex OSMutex;
|
||||
typedef struct OSMutexQueue OSMutexQueue;
|
||||
typedef struct OSMutexLink OSMutexLink;
|
||||
typedef struct OSCond OSCond;
|
||||
|
||||
typedef void (*OSIdleFunction)(void *param);
|
||||
|
||||
struct OSThreadQueue
|
||||
{
|
||||
OSThread *head;
|
||||
OSThread *tail;
|
||||
};
|
||||
|
||||
struct OSThreadLink
|
||||
{
|
||||
OSThread *next;
|
||||
OSThread *prev;
|
||||
};
|
||||
|
||||
struct OSMutexQueue
|
||||
{
|
||||
OSMutex *head;
|
||||
OSMutex *tail;
|
||||
};
|
||||
|
||||
struct OSMutexLink
|
||||
{
|
||||
OSMutex *next;
|
||||
OSMutex *prev;
|
||||
};
|
||||
|
||||
struct OSThread
|
||||
{
|
||||
OSContext context; // register context
|
||||
|
||||
u16 state; // OS_THREAD_STATE_*
|
||||
u16 attr; // OS_THREAD_ATTR_*
|
||||
s32 suspend; // suspended if the count is greater than zero
|
||||
OSPriority priority; // effective scheduling priority
|
||||
OSPriority base; // base scheduling priority
|
||||
void *val; // exit value
|
||||
|
||||
OSThreadQueue *queue; // queue thread is on
|
||||
OSThreadLink link; // queue link
|
||||
|
||||
OSThreadQueue queueJoin; // list of threads waiting for termination (join)
|
||||
|
||||
OSMutex *mutex; // mutex trying to lock
|
||||
OSMutexQueue queueMutex; // list of mutexes owned
|
||||
|
||||
OSThreadLink linkActive; // link of all threads for debugging
|
||||
|
||||
u8 *stackBase; // the thread's designated stack (high address)
|
||||
u32 *stackEnd; // last word of stack (low address)
|
||||
};
|
||||
|
||||
// Thread states
|
||||
enum OS_THREAD_STATE
|
||||
{
|
||||
OS_THREAD_STATE_READY = 1,
|
||||
OS_THREAD_STATE_RUNNING = 2,
|
||||
OS_THREAD_STATE_WAITING = 4,
|
||||
OS_THREAD_STATE_MORIBUND = 8
|
||||
};
|
||||
|
||||
// Thread priorities
|
||||
#define OS_PRIORITY_MIN 0 // highest
|
||||
#define OS_PRIORITY_MAX 31 // lowest
|
||||
#define OS_PRIORITY_IDLE OS_PRIORITY_MAX
|
||||
|
||||
// Thread attributes
|
||||
#define OS_THREAD_ATTR_DETACH 0x0001u // detached
|
||||
|
||||
// Stack magic value
|
||||
#define OS_THREAD_STACK_MAGIC 0xDEADBABE
|
||||
|
||||
void OSInitThreadQueue(OSThreadQueue *queue);
|
||||
OSThread *OSGetCurrentThread(void);
|
||||
BOOL OSIsThreadSuspended(OSThread *thread);
|
||||
BOOL OSIsThreadTerminated(OSThread *thread);
|
||||
s32 OSDisableScheduler(void);
|
||||
s32 OSEnableScheduler(void);
|
||||
void OSYieldThread(void);
|
||||
BOOL OSCreateThread(OSThread *thread,
|
||||
void *(*func)(void *),
|
||||
void *param,
|
||||
void *stack,
|
||||
u32 stackSize,
|
||||
OSPriority priority,
|
||||
u16 attr);
|
||||
void OSExitThread(void *val);
|
||||
void OSCancelThread(OSThread *thread);
|
||||
BOOL OSJoinThread(OSThread *thread, void **val);
|
||||
void OSDetachThread(OSThread *thread);
|
||||
s32 OSResumeThread(OSThread *thread);
|
||||
s32 OSSuspendThread(OSThread *thread);
|
||||
BOOL OSSetThreadPriority(OSThread *thread, OSPriority priority);
|
||||
OSPriority OSGetThreadPriority(OSThread *thread);
|
||||
void OSSleepThread(OSThreadQueue *queue);
|
||||
void OSWakeupThread(OSThreadQueue *queue);
|
||||
|
||||
OSThread *OSSetIdleFunction(OSIdleFunction idleFunction,
|
||||
void *param,
|
||||
void *stack,
|
||||
u32 stackSize);
|
||||
OSThread *OSGetIdleFunction(void);
|
||||
|
||||
long OSCheckActiveThreads(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // DOLPHIN_OSTHREAD_H
|
||||
@@ -1,51 +0,0 @@
|
||||
#ifndef OS_TIME_H
|
||||
#define OS_TIME_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
||||
|
||||
typedef s64 OSTime;
|
||||
typedef u32 OSTick;
|
||||
|
||||
u32 __busclock AT_ADDRESS(0x800000F8);
|
||||
|
||||
#define OS_BUS_CLOCK __busclock
|
||||
|
||||
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
|
||||
|
||||
#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK)
|
||||
#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000))
|
||||
#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000))
|
||||
#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000))
|
||||
#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK)
|
||||
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
||||
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
||||
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
||||
|
||||
OSTime OSGetTime(void);
|
||||
OSTick OSGetTick(void);
|
||||
|
||||
typedef struct OSCalendarTime_s {
|
||||
int sec;
|
||||
int min;
|
||||
int hour;
|
||||
int mday;
|
||||
int mon;
|
||||
int year;
|
||||
int wday;
|
||||
int yday;
|
||||
|
||||
int msec;
|
||||
int usec;
|
||||
} OSCalendarTime;
|
||||
|
||||
OSTime OSCalendarTimeToTicks(OSCalendarTime* td);
|
||||
void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,28 +0,0 @@
|
||||
/* TODO: not sure if this should live here or in libultra/OSTimer.h */
|
||||
|
||||
#ifndef DOLPHIN_OS_TIMER_H
|
||||
#define DOLPHIN_OS_TIMER_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSAlarm.h"
|
||||
#include "dolphin/os/OSMessage.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct OSTimer_s {
|
||||
OSAlarm alarm;
|
||||
struct OSTimer_s* next;
|
||||
struct OSTimer_s* prev;
|
||||
OSTime interval;
|
||||
OSTime value;
|
||||
OSMessageQueue* mq;
|
||||
OSMessage msg;
|
||||
} OSTimer;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef OS_UTIL_H
|
||||
#define OS_UTIL_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F))
|
||||
#define OSRoundDown32B(x) (((u32)(x)) & ~(0x1F))
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,94 +0,0 @@
|
||||
#ifndef PPC_EABI_INIT_H
|
||||
#define PPC_EABI_INIT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
typedef void (*voidfunctionptr)(void); // pointer to function returning void
|
||||
__declspec(section ".ctors") extern voidfunctionptr _ctors[];
|
||||
__declspec(section ".dtors") extern voidfunctionptr _dtors[];
|
||||
|
||||
/**
|
||||
* Linker Generated Symbols
|
||||
*/
|
||||
|
||||
// Declare linker symbols for a section in the ROM
|
||||
#define DECL_ROM_SECTION(x) \
|
||||
extern u8 _f##x[]; \
|
||||
extern u8 _f##x##_rom[]; \
|
||||
extern u8 _e##x[];
|
||||
|
||||
// Declare linker symbols for a BSS section
|
||||
#define DECL_BSS_SECTION(x) \
|
||||
extern u8 _f##x[]; \
|
||||
extern u8 _e##x[];
|
||||
|
||||
// Debugger stack
|
||||
extern u8 _db_stack_addr[];
|
||||
extern u8 _db_stack_end[];
|
||||
|
||||
// Program arena
|
||||
extern u8 __ArenaLo[];
|
||||
extern u8 __ArenaHi[];
|
||||
|
||||
// Program stack
|
||||
extern u8 _stack_addr[];
|
||||
extern u8 _stack_end[];
|
||||
|
||||
// Small data bases
|
||||
extern u8 _SDA_BASE_[];
|
||||
extern u8 _SDA2_BASE_[];
|
||||
|
||||
// ROM sections
|
||||
DECL_ROM_SECTION(_init);
|
||||
DECL_ROM_SECTION(extab);
|
||||
DECL_ROM_SECTION(extabindex);
|
||||
DECL_ROM_SECTION(_text);
|
||||
DECL_ROM_SECTION(_ctors);
|
||||
DECL_ROM_SECTION(_dtors);
|
||||
DECL_ROM_SECTION(_rodata);
|
||||
DECL_ROM_SECTION(_data);
|
||||
DECL_ROM_SECTION(_sdata);
|
||||
DECL_ROM_SECTION(_sdata2);
|
||||
DECL_ROM_SECTION(_stack);
|
||||
|
||||
// BSS sections
|
||||
DECL_BSS_SECTION(_bss);
|
||||
DECL_BSS_SECTION(_sbss);
|
||||
DECL_BSS_SECTION(_sbss2);
|
||||
|
||||
void __init_hardware(void);
|
||||
extern void __flush_cache(void *address, unsigned int size);
|
||||
void __init_user(void);
|
||||
void __fini_cpp(void);
|
||||
void _ExitProcess(void);
|
||||
|
||||
typedef struct RomSection {
|
||||
void* romOfs; // at 0x4
|
||||
void* virtualOfs; // at 0x0
|
||||
size_t size; // at 0x8
|
||||
} RomSection;
|
||||
|
||||
typedef struct BssSection {
|
||||
void* virtualOfs; // at 0x0
|
||||
size_t size; // at 0x8
|
||||
} BssSection;
|
||||
|
||||
typedef struct ExtabIndexInfo {
|
||||
void* etiStart; // at 0x0
|
||||
void* etiEnd; // at 0x4
|
||||
void* codeStart; // at 0x8
|
||||
u32 codeSize; // at 0x10
|
||||
} ExtabIndexInfo;
|
||||
|
||||
__declspec(section ".init") extern RomSection _rom_copy_info[];
|
||||
__declspec(section ".init") extern BssSection _bss_init_info[];
|
||||
__declspec(section ".init") extern ExtabIndexInfo _eti_init_info[];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
+59
-40
@@ -1,63 +1,82 @@
|
||||
#ifndef DOLPHIN_PAD_H
|
||||
#define DOLPHIN_PAD_H
|
||||
#ifndef _DOLPHIN_PAD_H_
|
||||
#define _DOLPHIN_PAD_H_
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define PAD_CONTROLLER_NUM 4
|
||||
|
||||
#define PAD_ERR_NONE 0
|
||||
#define PAD_ERR_NO_CONTROLLER -1
|
||||
#define PAD_ERR_NOT_READY -2
|
||||
#define PAD_ERR_TRANSFER -3
|
||||
#define PAD_SPEC_0 0
|
||||
#define PAD_SPEC_1 1
|
||||
#define PAD_SPEC_2 2
|
||||
#define PAD_SPEC_3 3
|
||||
#define PAD_SPEC_4 4
|
||||
#define PAD_SPEC_5 5
|
||||
|
||||
#define PAD_MOTOR_STOP 0
|
||||
#define PAD_MOTOR_RUMBLE 1
|
||||
#define PAD_MOTOR_STOP_HARD 2
|
||||
|
||||
#define PAD_BUTTON_LEFT 0x0001
|
||||
#define PAD_BUTTON_RIGHT 0x0002
|
||||
#define PAD_BUTTON_DOWN 0x0004
|
||||
#define PAD_BUTTON_UP 0x0008
|
||||
#define PAD_TRIGGER_Z 0x0010
|
||||
#define PAD_TRIGGER_R 0x0020
|
||||
#define PAD_TRIGGER_L 0x0040
|
||||
#define PAD_BUTTON_A 0x0100
|
||||
#define PAD_BUTTON_B 0x0200
|
||||
#define PAD_BUTTON_X 0x0400
|
||||
#define PAD_BUTTON_Y 0x0800
|
||||
#define PAD_BUTTON_MENU 0x1000
|
||||
#define PAD_BUTTON_START 0x1000
|
||||
#define PAD_CHAN0_BIT 0x80000000
|
||||
|
||||
#define PAD_MAX_CONTROLLERS 4
|
||||
|
||||
#define PAD_BUTTON_LEFT (1 << 0) // 0x0001
|
||||
#define PAD_BUTTON_RIGHT (1 << 1) // 0x0002
|
||||
#define PAD_BUTTON_DOWN (1 << 2) // 0x0004
|
||||
#define PAD_BUTTON_UP (1 << 3) // 0x0008
|
||||
#define PAD_TRIGGER_Z (1 << 4) // 0x0010
|
||||
#define PAD_TRIGGER_R (1 << 5) // 0x0020
|
||||
#define PAD_TRIGGER_L (1 << 6) // 0x0040
|
||||
#define PAD_BUTTON_A (1 << 8) // 0x0100
|
||||
#define PAD_BUTTON_B (1 << 9) // 0x0200
|
||||
#define PAD_BUTTON_X (1 << 10) // 0x0400
|
||||
#define PAD_BUTTON_Y (1 << 11) // 0x0800
|
||||
#define PAD_BUTTON_MENU (1 << 12) // 0x1000
|
||||
#define PAD_BUTTON_START (1 << 12) // 0x1000
|
||||
|
||||
#define PAD_ERR_NONE 0
|
||||
#define PAD_ERR_NO_CONTROLLER -1
|
||||
#define PAD_ERR_NOT_READY -2
|
||||
#define PAD_ERR_TRANSFER -3
|
||||
|
||||
#define RES_WIRELESS_LITE 0x40000
|
||||
|
||||
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;
|
||||
typedef struct PADStatus
|
||||
{
|
||||
/*0x00*/ u16 button;
|
||||
/*0x02*/ s8 stickX;
|
||||
/*0x03*/ s8 stickY;
|
||||
/*0x04*/ s8 substickX;
|
||||
/*0x05*/ s8 substickY;
|
||||
/*0x06*/ u8 triggerLeft;
|
||||
/*0x07*/ u8 triggerRight;
|
||||
/*0x08*/ u8 analogA;
|
||||
/*0x09*/ u8 analogB;
|
||||
/*0x0A*/ s8 err;
|
||||
} PADStatus;
|
||||
|
||||
BOOL PADInit();
|
||||
u32 PADRead(PADStatus *status);
|
||||
// PAD.c
|
||||
BOOL PADReset(u32 mask);
|
||||
BOOL PADRecalibrate(u32 mask);
|
||||
void PADClamp(PADStatus *status);
|
||||
void PADClampCircle(PADStatus *status);
|
||||
void PADControlMotor(s32 chan, u32 cmd);
|
||||
BOOL PADInit();
|
||||
u32 PADRead(PADStatus* status);
|
||||
void PADSetSamplingRate(u32 msec);
|
||||
void __PADTestSamplingRate(u32 tvmode);
|
||||
void PADControlAllMotors(const u32 *commandArray);
|
||||
void PADControlMotor(s32 chan, u32 command);
|
||||
void PADSetSpec(u32 spec);
|
||||
void PADControlAllMotors(const u32 *cmdArr);
|
||||
u32 PADGetSpec();
|
||||
BOOL PADGetType(s32 chan, u32* type);
|
||||
BOOL PADSync(void);
|
||||
void PADSetAnalogMode(u32 mode);
|
||||
PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback);
|
||||
PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback callback);
|
||||
|
||||
// Padclamp.c
|
||||
void PADClamp(PADStatus * status);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -31,48 +31,6 @@ typedef struct CARDDir {
|
||||
u32 commentAddr; // offset 0x3C, size 0x4
|
||||
} CARDDir;
|
||||
|
||||
typedef struct CARDControl {
|
||||
// total size: 0x110
|
||||
int attached; // offset 0x0, size 0x4
|
||||
s32 result; // offset 0x4, size 0x4
|
||||
u16 size; // offset 0x8, size 0x2
|
||||
u16 pageSize; // offset 0xA, size 0x2
|
||||
s32 sectorSize; // offset 0xC, size 0x4
|
||||
u16 cBlock; // offset 0x10, size 0x2
|
||||
u16 vendorID; // offset 0x12, size 0x2
|
||||
s32 latency; // offset 0x14, size 0x4
|
||||
u8 id[12]; // offset 0x18, size 0xC
|
||||
int mountStep; // offset 0x24, size 0x4
|
||||
int formatStep; // offset 0x28, size 0x4
|
||||
u32 scramble; // offset 0x2C, size 0x4
|
||||
DSPTaskInfo task; // offset 0x30, size 0x50
|
||||
void* workArea; // offset 0x80, size 0x4
|
||||
CARDDir* currentDir; // offset 0x84, size 0x4
|
||||
u16* currentFat; // offset 0x88, size 0x4
|
||||
OSThreadQueue threadQueue; // offset 0x8C, size 0x8
|
||||
u8 cmd[9]; // offset 0x94, size 0x9
|
||||
s32 cmdlen; // offset 0xA0, size 0x4
|
||||
u32 mode; // offset 0xA4, size 0x4
|
||||
int retry; // offset 0xA8, size 0x4
|
||||
int repeat; // offset 0xAC, size 0x4
|
||||
u32 addr; // offset 0xB0, size 0x4
|
||||
void* buffer; // offset 0xB4, size 0x4
|
||||
s32 xferred; // offset 0xB8, size 0x4
|
||||
u16 freeNo; // offset 0xBC, size 0x2
|
||||
u16 startBlock; // offset 0xBE, size 0x2
|
||||
CARDFileInfo* fileInfo; // offset 0xC0, size 0x4
|
||||
CARDCallback extCallback; // offset 0xC4, size 0x4
|
||||
CARDCallback txCallback; // offset 0xC8, size 0x4
|
||||
CARDCallback exiCallback; // offset 0xCC, size 0x4
|
||||
CARDCallback apiCallback; // offset 0xD0, size 0x4
|
||||
CARDCallback xferCallback; // offset 0xD4, size 0x4
|
||||
CARDCallback eraseCallback; // offset 0xD8, size 0x4
|
||||
CARDCallback unlockCallback; // offset 0xDC, size 0x4
|
||||
OSAlarm alarm; // offset 0xE0, size 0x28
|
||||
u32 cid; // offset 0x108, size 0x4
|
||||
const DVDDiskID* diskID; // offset 0x10C, size 0x4
|
||||
} CARDControl;
|
||||
|
||||
s32 __CARDGetStatusEx(s32 chan, s32 fileNo, CARDDir* dirent);
|
||||
s32 __CARDSetStatusExAsync(s32 chan, s32 fileNo, CARDDir* dirent, CARDCallback callback);
|
||||
s32 __CARDSetStatusEx(s32 chan, s32 fileNo, CARDDir* dirent);
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#ifndef DOLPHIN_OSSERIAL
|
||||
#define DOLPHIN_OSSERIAL
|
||||
#ifndef _DOLPHIN_SI_H_
|
||||
#define _DOLPHIN_SI_H_
|
||||
|
||||
#include <types.h>
|
||||
#include <dolphin/os/OSSerial.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define PAD_CHAN0_BIT 0x80000000
|
||||
#define PAD_CHAN1_BIT 0x40000000
|
||||
#define PAD_CHAN2_BIT 0x20000000
|
||||
#define PAD_CHAN3_BIT 0x10000000
|
||||
|
||||
#define PAD_CHAN_ALL_BIT (PAD_CHAN0_BIT | PAD_CHAN1_BIT | PAD_CHAN2_BIT | PAD_CHAN3_BIT)
|
||||
|
||||
#define SI_MAX_CHAN 4
|
||||
#define SI_MAX_COMCSR_INLNGTH 128
|
||||
#define SI_MAX_COMCSR_OUTLNGTH 128
|
||||
#define SI_ERROR_UNDER_RUN 0x0001
|
||||
#define SI_ERROR_OVER_RUN 0x0002
|
||||
#define SI_ERROR_COLLISION 0x0004
|
||||
@@ -18,15 +18,7 @@ extern "C" {
|
||||
#define SI_ERROR_RDST 0x0020
|
||||
#define SI_ERROR_UNKNOWN 0x0040
|
||||
#define SI_ERROR_BUSY 0x0080
|
||||
#define SI_CHAN0 0
|
||||
#define SI_CHAN1 1
|
||||
#define SI_CHAN2 2
|
||||
#define SI_CHAN3 3
|
||||
#define SI_CHAN0_BIT 0x80000000
|
||||
#define SI_CHAN1_BIT 0x40000000
|
||||
#define SI_CHAN2_BIT 0x20000000
|
||||
#define SI_CHAN3_BIT 0x10000000
|
||||
#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan))
|
||||
|
||||
#define SI_TYPE_MASK 0x18000000u
|
||||
#define SI_TYPE_N64 0x00000000u
|
||||
#define SI_TYPE_DOLPHIN 0x08000000u
|
||||
@@ -58,13 +50,19 @@ extern "C" {
|
||||
#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000)
|
||||
#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000)
|
||||
|
||||
u32 SIProbe(s32 chan);
|
||||
char* SIGetTypeString(u32 type);
|
||||
void SIRefreshSamplingRate(void);
|
||||
void SISetSamplingRate(u32 msec);
|
||||
#define SI_MAX_CHAN 4
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
typedef void (*SICallback)(s32 chan, u32 sr, OSContext *context);
|
||||
typedef void (*SITypeAndStatusCallback)(s32 chan, u32 type);
|
||||
|
||||
#endif
|
||||
BOOL SITransfer(s32 chan, void *output, u32 outputBytes, void *input, u32 inputBytes,
|
||||
SICallback callback, OSTime delay);
|
||||
u32 SIGetCommand(long chan);
|
||||
u32 SIEnablePolling(u32 poll);
|
||||
u32 SIDisablePolling(u32 poll);
|
||||
u32 SISetXY(u32 x, u32 y);
|
||||
void SITransferCommands(void);
|
||||
BOOL SIBusy(void);
|
||||
|
||||
|
||||
#endif // _DOLPHIN_SI_H_
|
||||
@@ -42,8 +42,8 @@ u32 SIEnablePolling(u32 poll);
|
||||
u32 SIDisablePolling(u32 poll);
|
||||
BOOL SIGetResponse(s32 chan, void* data);
|
||||
|
||||
BOOL SIRegisterPollingHandler(OSInterruptHandler handler);
|
||||
BOOL SIUnregisterPollingHandler(OSInterruptHandler handler);
|
||||
BOOL SIRegisterPollingHandler(__OSInterruptHandler handler);
|
||||
BOOL SIUnregisterPollingHandler(__OSInterruptHandler handler);
|
||||
|
||||
u32 SIGetType(s32 chan);
|
||||
u32 SIGetTypeAsync(s32 chan, SITypeAndStatusCallback callback);
|
||||
|
||||
+11
-11
@@ -7,19 +7,19 @@
|
||||
extern "C" {
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
size_t strlen(const char*);
|
||||
char* strrchr(const char* str, int chr);
|
||||
char* strchr(const char* str, int chr);
|
||||
int strncmp(const char* str1, const char* str2, size_t n);
|
||||
int strcmp(const char* str1, const char* str2);
|
||||
int stricmp(char*, char*);
|
||||
char* strcpy(char*, const char*);
|
||||
char* strcat(char* dst, const char* src);
|
||||
char* strncpy(char* dst, const char* src, size_t n);
|
||||
char* strstr(const char* str, const char* pat);
|
||||
// size_t strlen(const char*);
|
||||
// char* strrchr(const char* str, int chr);
|
||||
// char* strchr(const char* str, int chr);
|
||||
// int strncmp(const char* str1, const char* str2, size_t n);
|
||||
// int strcmp(const char* str1, const char* str2);
|
||||
// int stricmp(char*, char*);
|
||||
// char* strcpy(char*, const char*);
|
||||
// char* strcat(char* dst, const char* src);
|
||||
// char* strncpy(char* dst, const char* src, size_t n);
|
||||
// char* strstr(const char* str, const char* pat);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef _DOLPHIN_TYPES_H_
|
||||
#define _DOLPHIN_TYPES_H_
|
||||
|
||||
typedef signed char s8;
|
||||
typedef unsigned char u8;
|
||||
typedef signed short int s16;
|
||||
typedef unsigned short int u16;
|
||||
typedef signed long s32;
|
||||
typedef unsigned long u32;
|
||||
typedef signed long long int s64;
|
||||
typedef unsigned long long int u64;
|
||||
|
||||
typedef float f32;
|
||||
typedef double f64;
|
||||
|
||||
typedef char *Ptr;
|
||||
typedef unsigned int uintptr_t; // Manually added
|
||||
|
||||
typedef int BOOL;
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
#if defined(__MWERKS__)
|
||||
#define AT_ADDRESS(addr) : (addr)
|
||||
#elif defined(__GNUC__)
|
||||
//#define AT_ADDRESS(addr) __attribute__((address((addr))))
|
||||
#define AT_ADDRESS(addr) // was removed in GCC. define in linker script instead.
|
||||
#else
|
||||
#error unknown compiler
|
||||
#endif
|
||||
|
||||
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
|
||||
|
||||
#define INT_MAX 2147483647
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void*)0)
|
||||
#endif
|
||||
|
||||
#include "libc/stdio.h"
|
||||
#include "libc/stdarg.h"
|
||||
#include "libc/string.h"
|
||||
#include "libc/ctype.h"
|
||||
|
||||
#include "cmath.h"
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef VI_H
|
||||
#define VI_H
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef _ASSERT_H_
|
||||
#define _ASSERT_H_
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L
|
||||
// The C11 way
|
||||
#define static_assert(cond, msg) _Static_assert(cond, #msg)
|
||||
#else
|
||||
// The old, hacky way
|
||||
#define static_assert(cond, msg) typedef char static_assertion_##msg[(cond)?1:-1]
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _DOLPHIN_LIBC_CTYPE_H_
|
||||
#define _DOLPHIN_LIBC_CTYPE_H_
|
||||
|
||||
int tolower(int c);
|
||||
|
||||
#endif // _DOLPHIN_LIBC_CTYPE_H_
|
||||
@@ -0,0 +1,4 @@
|
||||
#ifndef _ERRNO_H_
|
||||
#define _ERRNO_H_
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _FLOAT_H_
|
||||
#define _FLOAT_H_
|
||||
|
||||
#define FLT_EPSILON 1.1920928955078125e-07f
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef _LIMITS_H_
|
||||
#define _LIMITS_H_
|
||||
|
||||
#define CHAR_BIT 8
|
||||
|
||||
#define SCHAR_MIN -128
|
||||
#define SCHAR_MAX 127
|
||||
#define UCHAR_MAX 255
|
||||
|
||||
#define SHRT_MIN -32768
|
||||
#define SHRT_MAX 32767
|
||||
#define USHRT_MAX 65535
|
||||
|
||||
#define INT_MIN -2147483648
|
||||
#define INT_MAX 2147483647
|
||||
#define UINT_MAX 4294967295
|
||||
|
||||
#define LONG_MIN -2147483648
|
||||
#define LONG_MAX 2147483647
|
||||
#define ULONG_MAX 4294967295
|
||||
|
||||
#endif
|
||||
+104
-13
@@ -1,21 +1,112 @@
|
||||
#ifndef LIB_C_MATH_H
|
||||
#define LIB_C_MATH_H
|
||||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
#include "types.h"
|
||||
#define NAN (0.0f / 0.0f)
|
||||
#define HUGE_VALF (1.0f / 0.0f)
|
||||
#define INFINITY (1.0f / 0.0f)
|
||||
|
||||
#define SQRT_OF_2_F 1.41421356237309504880f
|
||||
#define SQRT_OF_3_F 1.73205080756887729353f
|
||||
double fabs(double x);
|
||||
double sin(double x);
|
||||
double cos(double x);
|
||||
|
||||
#define SQRT_3_OVER_3_F (SQRT_OF_3_F / 3.0f)
|
||||
float sinf(float x);
|
||||
float cosf(float x);
|
||||
float tanf(float x);
|
||||
float acosf(float x);
|
||||
float powf(float base, float exponent);
|
||||
|
||||
#define M_PI 3.14159265358979323846f
|
||||
double ldexp(double x, int exp);
|
||||
|
||||
s16 sins(u16);
|
||||
s16 coss(u16);
|
||||
double scalbn(double x, int n);
|
||||
|
||||
f32 fatan2(f32, f32);
|
||||
double copysign(double x, double y);
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cplusplus on
|
||||
#endif
|
||||
|
||||
double floor(double x);
|
||||
|
||||
extern inline float sqrtf(float x)
|
||||
{
|
||||
static const double _half = .5;
|
||||
static const double _three = 3.0;
|
||||
volatile float y;
|
||||
if (x > 0.0f)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
double guess = __frsqrte((double)x); // returns an approximation to
|
||||
#else
|
||||
double guess;
|
||||
asm("frsqrte %0, %1" : "=f"(guess) : "f"(x));
|
||||
#endif
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 12 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 24 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 32 sig bits
|
||||
y = (float)(x*guess);
|
||||
return y ;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
// TODO: this isn't correct! It's just to generate sdata2 in GXDraw.o
|
||||
extern inline float sqrt(float x)
|
||||
{
|
||||
static const double _half = .5;
|
||||
static const double _three = 3.0;
|
||||
volatile float y;
|
||||
if (x > 0.0f)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
double guess = __frsqrte((double)x); // returns an approximation to
|
||||
#else
|
||||
double guess;
|
||||
asm("frsqrte %0, %1" : "=f"(guess) : "f"(x));
|
||||
#endif
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 12 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 24 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 32 sig bits
|
||||
y = (float)(x*guess);
|
||||
return y ;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define fabs(x) __fabs(x)
|
||||
#define fabsf(x) __fabsf(x)
|
||||
#else
|
||||
double fabs(double x);
|
||||
float fabsf(float x);
|
||||
#endif
|
||||
|
||||
long __fpclassifyf(float x);
|
||||
long __fpclassifyd(double x);
|
||||
|
||||
#define FP_NAN 1
|
||||
#define FP_INFINITE 2
|
||||
#define FP_ZERO 3
|
||||
#define FP_NORMAL 4
|
||||
#define FP_SUBNORMAL 5
|
||||
|
||||
#define fpclassify(x) (sizeof(x) == sizeof(float) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)))
|
||||
#define isfinite(x) ((fpclassify(x) > FP_INFINITE))
|
||||
|
||||
inline float fmodf(float x, float m)
|
||||
{
|
||||
float a = fabsf(m);
|
||||
float b = fabsf(x);
|
||||
if (a > b)
|
||||
return x;
|
||||
else
|
||||
{
|
||||
long long c = (long long)(x / m);
|
||||
return x - m * c;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cplusplus reset
|
||||
#endif
|
||||
|
||||
f64 fsqrt(f32);
|
||||
|
||||
f32 facos(f32);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef _STDARG_H_
|
||||
#define _STDARG_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
typedef struct {
|
||||
char gpr;
|
||||
char fpr;
|
||||
char reserved[2];
|
||||
char* input_arg_area;
|
||||
char* reg_save_area;
|
||||
} __va_list[1];
|
||||
typedef __va_list va_list;
|
||||
|
||||
#ifndef __MWERKS__
|
||||
extern void __builtin_va_info(va_list*);
|
||||
#endif
|
||||
|
||||
void* __va_arg(va_list v_list, unsigned char type);
|
||||
|
||||
#define va_start(ap, fmt) ((void)fmt, __builtin_va_info(&ap))
|
||||
#define va_arg(ap, t) (*((t*)__va_arg(ap, _var_arg_typeof(t))))
|
||||
#define va_end(ap) (void)0
|
||||
|
||||
#else
|
||||
typedef __builtin_va_list va_list;
|
||||
#define va_start(v, l) __builtin_va_start(v, l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v, l) __builtin_va_arg(v, l)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef _STDDEF_H_
|
||||
#define _STDDEF_H_
|
||||
|
||||
#define offsetof(type, member) ((size_t) &(((type *) 0)->member))
|
||||
|
||||
#ifndef _SIZE_T_DEF
|
||||
#define _SIZE_T_DEF
|
||||
typedef unsigned long size_t;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0L
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _STDINT_H_
|
||||
#define _STDINT_H_
|
||||
|
||||
typedef unsigned long int uintptr_t;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef _STDIO_H_
|
||||
#define _STDIO_H_
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int unk0;
|
||||
unsigned short unk4b0:7;
|
||||
unsigned short unk4b7:3;
|
||||
unsigned short unk4b10:2;
|
||||
unsigned short unk4b12:1;
|
||||
unsigned char filler6[0x14-0x6];
|
||||
int unk14;
|
||||
int unk18;
|
||||
int unk1C;
|
||||
int unk20;
|
||||
int unk24;
|
||||
int unk28;
|
||||
unsigned char filler2C[0x30-0x2C];
|
||||
int unk30;
|
||||
unsigned char filler34[0x3C-0x34];
|
||||
int (*unk3C)();
|
||||
unsigned char filler40[4];
|
||||
int unk44;
|
||||
} FILE;
|
||||
|
||||
int puts(const char *s);
|
||||
int printf(const char *, ...);
|
||||
int sprintf(char *s, const char *format, ...);
|
||||
int vprintf(const char *format, va_list arg);
|
||||
int vsprintf(char *s, const char *format, va_list arg);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef _STDLIB_H_
|
||||
#define _STDLIB_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#define RAND_MAX 32767
|
||||
|
||||
void srand(unsigned int seed);
|
||||
int rand(void);
|
||||
void abort(void);
|
||||
void exit(int status);
|
||||
size_t wcstombs(char *dest, const wchar_t *src, size_t max);
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define abs(x) __abs(x)
|
||||
#else
|
||||
static inline int abs(int x)
|
||||
{
|
||||
int mask = x >> 31;
|
||||
return (x + mask) ^ mask;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef _STRING_H_
|
||||
#define _STRING_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void *memcpy(void *dest, const void *src, size_t num);
|
||||
void *memmove(void *dest, const void *src, size_t num);
|
||||
void *memset(void *dest, int ch, size_t count);
|
||||
int memcmp(const void *ptr1, const void *ptr2, size_t num);
|
||||
|
||||
size_t strlen(const char *s);
|
||||
char *strcpy(char *dest, const char *src);
|
||||
char *strncpy(char *dest, const char *src, size_t num);
|
||||
int strcmp(const char *s1, const char *s2);
|
||||
int strncmp(const char *s1, const char *s2, size_t n);
|
||||
char *strncat(char *dest, const char *src, size_t n);
|
||||
char *strchr(const char *str, int c);
|
||||
char* strrchr( char* str, int chr );
|
||||
char* strstr(const char* str, const char* pat);
|
||||
char* strcat(char* dst, const char* src);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef _WCHAR_H_
|
||||
#define _WCHAR_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef unsigned short wchar_t;
|
||||
|
||||
int fwide(FILE *stream, int mode);
|
||||
|
||||
#endif
|
||||
@@ -2,7 +2,7 @@
|
||||
#define APRINTF_H
|
||||
|
||||
#include "types.h"
|
||||
#include "va_args.h"
|
||||
// #include "va_args.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef MATH64_H
|
||||
#define MATH64_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define SQRT_OF_2_F 1.41421356237309504880f
|
||||
#define SQRT_OF_3_F 1.73205080756887729353f
|
||||
|
||||
#define SQRT_3_OVER_3_F (SQRT_OF_3_F / 3.0f)
|
||||
|
||||
#define M_PI 3.14159265358979323846f
|
||||
|
||||
s16 sins(u16);
|
||||
s16 coss(u16);
|
||||
f32 fatan2(f32, f32);
|
||||
f64 fsqrt(f32);
|
||||
f32 facos(f32);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -2,7 +2,7 @@
|
||||
#define SLEEP_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include <dolphin/os.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user