mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-28 02:13:07 -04:00
d489dc996b
* most of dolsdk copied over * add some gf stuff * trk wip * ode/amc stuff * build fix
260 lines
7.4 KiB
C
260 lines
7.4 KiB
C
#ifndef CARD_H
|
|
#define CARD_H
|
|
|
|
#include "dolphin/dsp.h"
|
|
#include "dolphin/os/OS.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);
|
|
|
|
typedef struct CARDFileInfo {
|
|
/* 0x00 */ s32 chan;
|
|
/* 0x04 */ s32 fileNo;
|
|
/* 0x08 */ s32 offset;
|
|
/* 0x0C */ s32 length;
|
|
/* 0x10 */ u16 iBlock;
|
|
/* 0x12 */ u16 __padding;
|
|
} CARDFileInfo;
|
|
|
|
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;
|
|
|
|
typedef struct CARDDir {
|
|
u8 gameName[4];
|
|
u8 company[2];
|
|
u8 _padding0;
|
|
u8 bannerFormat;
|
|
u8 fileName[CARD_FILENAME_MAX];
|
|
u32 time; // seconds since 01/01/2000 midnight
|
|
u32 iconAddr; // 0xffffffff if not used
|
|
u16 iconFormat;
|
|
u16 iconSpeed;
|
|
u8 permission;
|
|
u8 copyTimes;
|
|
u16 startBlock;
|
|
u16 length;
|
|
u8 _padding1[2];
|
|
u32 commentAddr; // 0xffffffff if not used
|
|
} CARDDir;
|
|
|
|
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;
|
|
|
|
typedef struct CARDDecParam {
|
|
/* 0x00 */ u8* inputAddr;
|
|
/* 0x04 */ u32 inputLength;
|
|
/* 0x08 */ u32 aramAddr;
|
|
/* 0x0C */ u8* outputAddr;
|
|
} CARDDecParam;
|
|
|
|
typedef struct CARDControl {
|
|
/* 0x000 */ BOOL attached;
|
|
/* 0x004 */ s32 result;
|
|
/* 0x008 */ u16 size;
|
|
/* 0x00A */ u16 pageSize;
|
|
/* 0x00C */ s32 sectorSize;
|
|
/* 0x010 */ u16 cBlock;
|
|
/* 0x012 */ u16 vendorID;
|
|
/* 0x014 */ s32 latency;
|
|
/* 0x018 */ u8 id[12];
|
|
/* 0x024 */ int mountStep;
|
|
/* 0x028 */ int formatStep;
|
|
/* 0x028 */ u32 scramble;
|
|
/* 0x02C */ DSPTaskInfo task;
|
|
/* 0x080 */ void* workArea;
|
|
/* 0x084 */ CARDDir* currentDir;
|
|
/* 0x088 */ u16* currentFat;
|
|
/* 0x08C */ OSThreadQueue threadQueue;
|
|
/* 0x094 */ u8 cmd[9];
|
|
/* 0x0A0 */ s32 cmdlen;
|
|
/* 0x0A4 */ volatile u32 mode;
|
|
/* 0x0A8 */ int retry;
|
|
/* 0x0AC */ int repeat;
|
|
/* 0x0B0 */ u32 addr;
|
|
/* 0x0B4 */ void* buffer;
|
|
/* 0x0B8 */ s32 xferred;
|
|
/* 0x0BC */ u16 freeNo;
|
|
/* 0x0BE */ u16 startBlock;
|
|
/* 0x0C0 */ CARDFileInfo* fileInfo;
|
|
/* 0x0C4 */ CARDCallback extCallback;
|
|
/* 0x0C8 */ CARDCallback txCallback;
|
|
/* 0x0CC */ CARDCallback exiCallback;
|
|
/* 0x0D0 */ CARDCallback apiCallback;
|
|
/* 0x0D4 */ CARDCallback xferCallback;
|
|
/* 0x0D8 */ CARDCallback eraseCallback;
|
|
/* 0x0DC */ CARDCallback unlockCallback;
|
|
/* 0x0E0 */ OSAlarm alarm;
|
|
/* 0x108 */ u32 cid;
|
|
/* 0x10C */ const DVDDiskID* diskID;
|
|
} CARDControl;
|
|
|
|
typedef struct CARDDirCheck {
|
|
/* 0x00 */ u8 padding0[56];
|
|
/* 0x38 */ u16 padding1;
|
|
/* 0x3A */ s16 checkCode;
|
|
/* 0x3C */ u16 checkSum;
|
|
/* 0x3E */ u16 checkSumInv;
|
|
} CARDDirCheck;
|
|
|
|
#define CARDGetBannerFormat(stat) ((stat)->bannerFormat & 0x03)
|
|
#define CARDGetIconAnim(stat) ((stat)->bannerFormat & 0x04)
|
|
#define CARDGetIconFormat(stat, n) ((stat)->iconFormat >> (2 * (n)) & 0x03)
|
|
#define CARDGetIconSpeed(stat, n) ((stat)->iconSpeed >> (2 * (n)) & 0x03)
|
|
|
|
#define CARDSetBannerFormat(stat, v) ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~0x03) | (v)))
|
|
#define CARDSetIconAnim(stat, v) ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~0x04) | (v)))
|
|
#define CARDSetIconFormat(stat, n, v) ((stat)->iconFormat = (u16)(((stat)->iconFormat & ~(0x03 << (2 * (n)))) | ((v) << (2 * (n)))))
|
|
#define CARDSetIconSpeed(stat, n, v) ((stat)->iconSpeed = (u16)(((stat)->iconSpeed & ~(0x03 << (2 * (n)))) | ((v) << (2 * (n)))))
|
|
|
|
#define CARD_ENCODE_ANSI 0
|
|
#define CARD_ENCODE_SJIS 1
|
|
|
|
#define CARD_READ_SIZE 512
|
|
#define CARD_COMMENT_SIZE 64
|
|
|
|
#define CARD_ICON_WIDTH 32
|
|
#define CARD_ICON_HEIGHT 32
|
|
|
|
#define CARD_BANNER_WIDTH 96
|
|
#define CARD_BANNER_HEIGHT 32
|
|
|
|
#define CARD_STAT_ICON_NONE 0
|
|
#define CARD_STAT_ICON_C8 1
|
|
#define CARD_STAT_ICON_RGB5A3 2
|
|
#define CARD_STAT_ICON_MASK 3
|
|
|
|
#define CARD_STAT_BANNER_NONE 0
|
|
#define CARD_STAT_BANNER_C8 1
|
|
#define CARD_STAT_BANNER_RGB5A3 2
|
|
#define CARD_STAT_BANNER_MASK 3
|
|
|
|
enum {
|
|
CARD_ERROR_UNLOCKED = 1,
|
|
CARD_ERROR_READY = 0,
|
|
CARD_ERROR_BUSY = -1,
|
|
CARD_ERROR_WRONGDEVICE = -2,
|
|
CARD_ERROR_NOCARD = -3,
|
|
CARD_ERROR_NOFILE = -4,
|
|
CARD_ERROR_IOERROR = -5,
|
|
CARD_ERROR_BROKEN = -6,
|
|
CARD_ERROR_EXIST = -7,
|
|
CARD_ERROR_NOENT = -8,
|
|
CARD_ERROR_INSSPACE = -9,
|
|
CARD_ERROR_NOPERM = -10,
|
|
CARD_ERROR_LIMIT = -11,
|
|
CARD_ERROR_NAMETOOLONG = -12,
|
|
CARD_ERROR_ENCODING = -13,
|
|
CARD_ERROR_CANCELED = -14,
|
|
CARD_ERROR_FATAL_ERROR = -128,
|
|
};
|
|
|
|
#define CARD_ATTR_PUBLIC 0x04u
|
|
#define CARD_ATTR_NO_COPY 0x08u
|
|
#define CARD_ATTR_NO_MOVE 0x10u
|
|
#define CARD_ATTR_GLOBAL 0x20u
|
|
#define CARD_ATTR_COMPANY 0x40u
|
|
|
|
#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_WORKAREA_SIZE (5 * 8 * 1024)
|
|
|
|
#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)
|
|
|
|
#define CARD_STAT_SPEED_END 0
|
|
#define CARD_STAT_SPEED_FAST 1
|
|
#define CARD_STAT_SPEED_MIDDLE 2
|
|
#define CARD_STAT_SPEED_SLOW 3
|
|
#define CARD_STAT_SPEED_MASK 3
|
|
|
|
#define CARD_STAT_ANIM_LOOP 0
|
|
#define CARD_STAT_ANIM_BOUNCE 4
|
|
#define CARD_STAT_ANIM_MASK 0x4
|
|
|
|
#define CARD_RESULT_UNLOCKED 1
|
|
#define CARD_RESULT_READY 0
|
|
#define CARD_RESULT_BUSY -1
|
|
#define CARD_RESULT_WRONGDEVICE -2
|
|
#define CARD_RESULT_NOCARD -3
|
|
#define CARD_RESULT_NOFILE -4
|
|
#define CARD_RESULT_IOERROR -5
|
|
#define CARD_RESULT_BROKEN -6
|
|
#define CARD_RESULT_EXIST -7
|
|
#define CARD_RESULT_NOENT -8
|
|
#define CARD_RESULT_INSSPACE -9
|
|
#define CARD_RESULT_NOPERM -10
|
|
#define CARD_RESULT_LIMIT -11
|
|
#define CARD_RESULT_NAMETOOLONG -12
|
|
#define CARD_RESULT_ENCODING -13
|
|
#define CARD_RESULT_CANCELED -14
|
|
#define CARD_RESULT_FATAL_ERROR -128
|
|
|
|
#define CARDIsValidBlockNo(card, blockNo) ((blockNo) >= CARD_NUM_SYSTEM_BLOCK && (blockNo) < (card)->cBlock)
|
|
#define CARDGetDirCheck(dir) ((CARDDirCheck*)&(dir)[CARD_MAX_FILE])
|
|
|
|
void CARDInit();
|
|
BOOL CARDProbe(s32);
|
|
s32 CARDGetStatus(s32, s32, CARDStat*);
|
|
s32 CARDSetStatus(s32, s32, CARDStat*);
|
|
s32 CARDOpen(s32, const char*, CARDFileInfo*);
|
|
s32 CARDClose(CARDFileInfo*);
|
|
s32 CARDCreate(s32, const char*, u32, CARDFileInfo*);
|
|
s32 CARDFormat(s32);
|
|
s32 CARDProbeEx(s32, s32*, s32*);
|
|
s32 CARDUnmount(s32);
|
|
s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback);
|
|
s32 CARDCheck(s32);
|
|
s32 CARDFreeBlocks(s32, s32*, s32*);
|
|
s32 CARDRead(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset);
|
|
s32 CARDWrite(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset);
|
|
s32 CARDGetSerialNo(s32, u64*);
|
|
|
|
extern CARDControl __CARDBlock[2];
|
|
extern DVDDiskID __CARDDiskNone;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CARD_H */
|