|
| 1 | +#ifndef _DOLPHIN_CARD |
| 2 | +#define _DOLPHIN_CARD |
| 3 | + |
| 4 | +#include "dolphin/types.h" |
| 5 | + |
| 6 | +#ifdef __cplusplus |
| 7 | +extern "C" { |
| 8 | +#endif |
| 9 | +#define CARD_ENCODE_ANSI 0u |
| 10 | +#define CARD_ENCODE_SJIS 1u |
| 11 | + |
| 12 | +/* Sizes */ |
| 13 | +#define CARD_WORKAREA_SIZE (5 * 8 * 1024) |
| 14 | +#define CARD_READ_SIZE 512 |
| 15 | +#define CARD_MAX_FILE 127 |
| 16 | +#define CARD_COMMENT_SIZE 64 |
| 17 | +#define CARD_FILENAME_MAX 32 |
| 18 | +#define CARD_ICON_MAX 8 |
| 19 | +#define CARD_ICON_WIDTH 32 |
| 20 | +#define CARD_ICON_HEIGHT 32 |
| 21 | +#define CARD_BANNER_WIDTH 96 |
| 22 | +#define CARD_BANNER_HEIGHT 32 |
| 23 | + |
| 24 | +/* Icon animation */ |
| 25 | +#define CARD_MODE_NORMAL 0 |
| 26 | +#define CARD_MODE_FAST 1 |
| 27 | + |
| 28 | +#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK) |
| 29 | +#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK) |
| 30 | +#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK) |
| 31 | +#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK) |
| 32 | +#define CARDSetBannerFormat(stat, f) \ |
| 33 | + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f))) |
| 34 | +#define CARDSetIconAnim(stat, f) \ |
| 35 | + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f))) |
| 36 | +#define CARDSetIconFormat(stat, n, f) \ |
| 37 | + ((stat)->iconFormat = \ |
| 38 | + (u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n))))) |
| 39 | +#define CARDSetIconSpeed(stat, n, f) \ |
| 40 | + ((stat)->iconSpeed = \ |
| 41 | + (u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n))))) |
| 42 | +#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr)) |
| 43 | +#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr)) |
| 44 | +#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo) |
| 45 | + |
| 46 | +#define CARD_RESULT_UNLOCKED 1 |
| 47 | +#define CARD_RESULT_READY 0 |
| 48 | +#define CARD_RESULT_BUSY -1 |
| 49 | +#define CARD_RESULT_WRONGDEVICE -2 |
| 50 | +#define CARD_RESULT_NOCARD -3 |
| 51 | +#define CARD_RESULT_NOFILE -4 |
| 52 | +#define CARD_RESULT_IOERROR -5 |
| 53 | +#define CARD_RESULT_BROKEN -6 |
| 54 | +#define CARD_RESULT_EXIST -7 |
| 55 | +#define CARD_RESULT_NOENT -8 |
| 56 | +#define CARD_RESULT_INSSPACE -9 |
| 57 | +#define CARD_RESULT_NOPERM -10 |
| 58 | +#define CARD_RESULT_LIMIT -11 |
| 59 | +#define CARD_RESULT_NAMETOOLONG -12 |
| 60 | +#define CARD_RESULT_ENCODING -13 |
| 61 | +#define CARD_RESULT_CANCELED -14 |
| 62 | +#define CARD_RESULT_FATAL_ERROR -128 |
| 63 | + |
| 64 | +#define CARD_STAT_ICON_NONE 0 |
| 65 | +#define CARD_STAT_ICON_C8 1 |
| 66 | +#define CARD_STAT_ICON_RGB5A3 2 |
| 67 | +#define CARD_STAT_ICON_MASK 3 |
| 68 | + |
| 69 | +#define CARD_STAT_BANNER_NONE 0 |
| 70 | +#define CARD_STAT_BANNER_C8 1 |
| 71 | +#define CARD_STAT_BANNER_RGB5A3 2 |
| 72 | +#define CARD_STAT_BANNER_MASK 3 |
| 73 | + |
| 74 | +#define CARD_STAT_ANIM_LOOP 0x00 |
| 75 | +#define CARD_STAT_ANIM_BOUNCE 0x04 |
| 76 | +#define CARD_STAT_ANIM_MASK 0x04 |
| 77 | + |
| 78 | +#define CARD_STAT_SPEED_END 0 |
| 79 | +#define CARD_STAT_SPEED_FAST 1 |
| 80 | +#define CARD_STAT_SPEED_MIDDLE 2 |
| 81 | +#define CARD_STAT_SPEED_SLOW 3 |
| 82 | +#define CARD_STAT_SPEED_MASK 3 |
| 83 | + |
| 84 | +#define CARD_ATTR_PUBLIC 0x04u |
| 85 | +#define CARD_ATTR_NO_COPY 0x08u |
| 86 | +#define CARD_ATTR_NO_MOVE 0x10u |
| 87 | +#define CARD_ATTR_GLOBAL 0x20u |
| 88 | +#define CARD_ATTR_COMPANY 0x40u |
| 89 | + |
| 90 | +typedef struct CARDFileInfo { |
| 91 | + s32 chan; |
| 92 | + s32 fileNo; |
| 93 | + |
| 94 | + s32 offset; |
| 95 | + s32 length; |
| 96 | + u16 iBlock; |
| 97 | + u16 __padding; |
| 98 | +} CARDFileInfo; |
| 99 | + |
| 100 | +typedef struct CARDStat { |
| 101 | + char fileName[CARD_FILENAME_MAX]; |
| 102 | + u32 length; |
| 103 | + u32 time; // seconds since 01/01/2000 midnight |
| 104 | + u8 gameName[4]; |
| 105 | + u8 company[2]; |
| 106 | + |
| 107 | + u8 bannerFormat; |
| 108 | + u8 __padding; |
| 109 | + u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set. |
| 110 | + u16 iconFormat; |
| 111 | + u16 iconSpeed; |
| 112 | + u32 commentAddr; // offset to the pair of 32 byte character strings. |
| 113 | + |
| 114 | + u32 offsetBanner; |
| 115 | + u32 offsetBannerTlut; |
| 116 | + u32 offsetIcon[CARD_ICON_MAX]; |
| 117 | + u32 offsetIconTlut; |
| 118 | + u32 offsetData; |
| 119 | +} CARDStat; |
| 120 | + |
| 121 | +typedef void (*CARDCallback)(s32 chan, s32 result); |
| 122 | + |
| 123 | +#ifdef TARGET_PC |
| 124 | +void CARDInit(const char* memcardFile, const char* game, const char* maker); |
| 125 | +void CARDSetGameAndMaker(s32 chan, const char* game, const char* maker); |
| 126 | +#else |
| 127 | +void CARDInit(void); |
| 128 | +#endif |
| 129 | +BOOL CARDGetFastMode(void); |
| 130 | +BOOL CARDSetFastMode(BOOL enable); |
| 131 | + |
| 132 | +s32 CARDCheck(s32 chan); |
| 133 | +s32 CARDCheckAsync(s32 chan, CARDCallback callback); |
| 134 | +s32 CARDCheckEx(s32 chan, s32* xferBytes); |
| 135 | +s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback); |
| 136 | +s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo); |
| 137 | +s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, |
| 138 | + CARDCallback callback); |
| 139 | +s32 CARDDelete(s32 chan, const char* fileName); |
| 140 | +s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback); |
| 141 | +s32 CARDFastDelete(s32 chan, s32 fileNo); |
| 142 | +s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback); |
| 143 | +s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo); |
| 144 | +s32 CARDFormat(s32 chan); |
| 145 | +s32 CARDFormatAsync(s32 chan, CARDCallback callback); |
| 146 | +s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed); |
| 147 | +s32 CARDGetAttributes(s32 chan, s32 fileNo, u8* attr); |
| 148 | +s32 CARDGetEncoding(s32 chan, u16* encode); |
| 149 | +s32 CARDGetMemSize(s32 chan, u16* size); |
| 150 | +s32 CARDGetResultCode(s32 chan); |
| 151 | +s32 CARDGetSectorSize(s32 chan, u32* size); |
| 152 | +s32 CARDGetSerialNo(s32 chan, u64* serialNo); |
| 153 | +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat); |
| 154 | +s32 CARDGetXferredBytes(s32 chan); |
| 155 | +s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback); |
| 156 | +s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback, |
| 157 | + CARDCallback attachCallback); |
| 158 | +s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo); |
| 159 | +BOOL CARDProbe(s32 chan); |
| 160 | +s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize); |
| 161 | +s32 CARDRename(s32 chan, const char* oldName, const char* newName); |
| 162 | +s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback); |
| 163 | +s32 CARDSetAttributesAsync(s32 chan, s32 fileNo, u8 attr, CARDCallback callback); |
| 164 | +s32 CARDSetAttributes(s32 chan, s32 fileNo, u8 attr); |
| 165 | +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat); |
| 166 | +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback); |
| 167 | +s32 CARDUnmount(s32 chan); |
| 168 | +s32 CARDGetCurrentMode(s32 chan, u32* mode); |
| 169 | +s32 CARDCancel(CARDFileInfo* fileInfo); |
| 170 | +s32 CARDClose(CARDFileInfo* fileInfo); |
| 171 | +s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset); |
| 172 | +s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset, |
| 173 | + CARDCallback callback); |
| 174 | +s32 CARDWrite(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset); |
| 175 | +s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset, |
| 176 | + CARDCallback callback); |
| 177 | + |
| 178 | +#ifdef __cplusplus |
| 179 | +} |
| 180 | +#endif |
| 181 | +#endif // _DOLPHIN_CARD |
0 commit comments