Link gx, pad, si, exi, dvd, card

This commit is contained in:
Cuyler36
2025-01-18 07:09:37 -05:00
parent ea475fa237
commit b17a95522a
198 changed files with 21663 additions and 1914 deletions
+49 -43
View File
@@ -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 -1
View File
@@ -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 -2
View File
@@ -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; }
+1 -1
View File
@@ -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"
+8 -9
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+7
View File
@@ -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_
+24
View File
@@ -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
View File
@@ -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);
+11
View File
@@ -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_
+7
View File
@@ -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_
+7
View File
@@ -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_
+9
View File
@@ -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_
+12
View File
@@ -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_
+6
View File
@@ -0,0 +1,6 @@
#ifndef _DOLPHIN_CARDFORMAT_H_
#define _DOLPHIN_CARDFORMAT_H_
long CARDFormat(long chan);
#endif // _DOLPHIN_CARDFORMAT_H_
+10
View File
@@ -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_
+8
View File
@@ -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_
+6
View File
@@ -0,0 +1,6 @@
#ifndef _DOLPHIN_CARDRDWR_H_
#define _DOLPHIN_CARDRDWR_H_
long CARDGetXferredBytes(long chan);
#endif // _DOLPHIN_CARDRDWR_H_
+8
View File
@@ -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_
+6
View File
@@ -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_
+27
View File
@@ -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_
+7
View File
@@ -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
View File
@@ -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);
//////////////////////////////////
+50
View File
@@ -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
+3 -1
View File
@@ -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 -1
View File
@@ -1,7 +1,7 @@
#ifndef _DOLPHIN_GXCULL
#define _DOLPHIN_GXCULL
#include "types.h"
#include <dolphin/types.h>
#ifdef __cplusplus
extern "C" {
+2 -2
View File
@@ -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 -1
View File
@@ -1,7 +1,7 @@
#ifndef _DOLPHIN_GXDRAW
#define _DOLPHIN_GXDRAW
#include "types.h"
#include <dolphin/types.h>
#ifdef __cplusplus
extern "C" {
+30 -1
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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);
+21 -9
View File
@@ -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
+2 -2
View File
@@ -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 -1
View File
@@ -1,7 +1,7 @@
#ifndef _DOLPHIN_GXPERF
#define _DOLPHIN_GXPERF
#include "types.h"
#include <dolphin/types.h>
#ifdef __cplusplus
extern "C" {
+5 -6
View File
@@ -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
}
+42
View File
@@ -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
+18 -6
View File
@@ -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
+8 -8
View File
@@ -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
}
+16
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
+13 -13
View File
@@ -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 -1
View File
@@ -1,7 +1,7 @@
#ifndef _DOLPHIN_OSCONTEXT_H_
#define _DOLPHIN_OSCONTEXT_H_
#include "types.h"
#include <dolphin/types.h>
#ifdef __cplusplus
extern "C" {
-72
View File
@@ -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
+3 -3
View File
@@ -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
View File
@@ -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)))
+85 -59
View File
@@ -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
View File
@@ -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
-32
View File
@@ -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
-41
View File
@@ -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
-32
View File
@@ -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
-18
View File
@@ -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
-30
View File
@@ -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
-45
View File
@@ -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
-32
View File
@@ -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
-9
View File
@@ -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
-72
View File
@@ -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
-124
View File
@@ -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
-55
View File
@@ -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
-136
View File
@@ -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
-17
View File
@@ -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
-51
View File
@@ -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
-72
View File
@@ -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
-36
View File
@@ -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
-38
View File
@@ -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
-16
View File
@@ -1,16 +0,0 @@
#ifndef OSRESETSW_H
#define OSRESETSW_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
BOOL OSGetResetSwitchState();
#ifdef __cplusplus
}
#endif
#endif
-111
View File
@@ -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
-129
View File
@@ -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
-51
View File
@@ -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
-28
View File
@@ -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
-18
View File
@@ -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
-94
View File
@@ -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
View File
@@ -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
}
-42
View File
@@ -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_
+2 -2
View File
@@ -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
View File
@@ -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
+48
View File
@@ -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 -1
View File
@@ -1,7 +1,7 @@
#ifndef VI_H
#define VI_H
#include "types.h"
#include <dolphin/types.h>
#ifdef __cplusplus
extern "C" {
+12
View File
@@ -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
+6
View File
@@ -0,0 +1,6 @@
#ifndef _DOLPHIN_LIBC_CTYPE_H_
#define _DOLPHIN_LIBC_CTYPE_H_
int tolower(int c);
#endif // _DOLPHIN_LIBC_CTYPE_H_
+4
View File
@@ -0,0 +1,4 @@
#ifndef _ERRNO_H_
#define _ERRNO_H_
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef _FLOAT_H_
#define _FLOAT_H_
#define FLT_EPSILON 1.1920928955078125e-07f
#endif
+22
View File
@@ -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
View File
@@ -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
+39
View File
@@ -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
+15
View File
@@ -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
+6
View File
@@ -0,0 +1,6 @@
#ifndef _STDINT_H_
#define _STDINT_H_
typedef unsigned long int uintptr_t;
#endif
+34
View File
@@ -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
+25
View File
@@ -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
+30
View File
@@ -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
+10
View File
@@ -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
+1 -1
View File
@@ -2,7 +2,7 @@
#define APRINTF_H
#include "types.h"
#include "va_args.h"
// #include "va_args.h"
#ifdef __cplusplus
extern "C"{
+27
View File
@@ -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
+1 -1
View File
@@ -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