-
Notifications
You must be signed in to change notification settings - Fork 0
/
Card.h
111 lines (91 loc) · 3.25 KB
/
Card.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#ifndef _CARD_
#define _CARD_
#include "string.h"
#include "global.h"
#include "alloc.h"
#include "ff.h"
#include "vsprintf.h"
#include "HW.h"
#include "vsprintf.h"
#define CARD_MAX_FILES 128
#define CARD_BASE 0x00002F60
#define CARD_CMD (CARD_BASE+0x00)
#define CARD_CMD_1 (CARD_BASE+0x04)
#define CARD_CMD_2 (CARD_BASE+0x08)
#define CARD_CMD_3 (CARD_BASE+0x0C)
#define CARD_CMD_4 (CARD_BASE+0x10)
#define CARD_RETURN (CARD_BASE+0x14)
#define CARD_CONTROL (CARD_BASE+0x18)
#define CARD_STATUS (CARD_BASE+0x1C)
#define CARD_SHADOW (CARD_BASE + 0x20)
#define CARD_SCMD (CARD_SHADOW+0x00)
#define CARD_SCMD_1 (CARD_SHADOW+0x04)
#define CARD_SCMD_2 (CARD_SHADOW+0x08)
#define CARD_SCMD_3 (CARD_SHADOW+0x0C)
#define CARD_SCMD_4 (CARD_SHADOW+0x10)
#define CARD_SRETURN (CARD_SHADOW+0x14)
#define CARD_SCONTROL (CARD_SHADOW+0x18)
#define CARD_SSTATUS (CARD_SHADOW+0x1C)
// internal API command xfer bytes
#define CARD_XFER_CREATE (2 * 8 * 1024) // CARDCreate[Async]
#define CARD_XFER_DELETE (2 * 8 * 1024) // CARD[Fast]Delete[Async]
#define CARD_XFER_MOUNT (5 * 8 * 1024) // CARDMount[Async]
#define CARD_XFER_FORMAT (5 * 8 * 1024) // CARDFormat[Async]
#define CARD_XFER_RENAME (1 * 8 * 1024) // CARDRename[Async]
#define CARD_XFER_SETSTATUS (1 * 8 * 1024) // CARDSetStatus[Async]
#define CARD_XFER_SETATTRIBUTES (1 * 8 * 1024) // CARDSetAttributes[Async]
#define CARD_XFER_WRITE (1 * 8 * 1024) // CARDWrite[Async]
#define CARD_FILENAME_MAX 32
#define CARD_ICON_MAX 8
#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_BANNER_NONE 0
#define CARD_STAT_BANNER_C8 1
#define CARD_STAT_BANNER_RGB5A3 2
enum CardStatus
{
CARD_SUCCESS = 0,
CARD_NO_FILE = -4,
CARD_FILE_EXISTS = -7,
CARD_FATAL_ERROR =-128,
};
typedef struct CARDFileInfo
{
/* 0x00 */ s32 chan;
/* 0x04 */ s32 fileNo;
/* 0x08 */ s32 offset;
/* 0x0C */ s32 length;
/* 0x10 */ u16 iBlock;
} CARDFileInfo;
typedef struct CARDStat
{
// read-only (Set by CARDGetStatus)
/* 0x00 */ char fileName[32];
/* 0x20 */ u32 length;
/* 0x24 */ u32 time; // seconds since 01/01/2000 midnight
/* 0x28 */ u8 gameName[4];
/* 0x2C */ u8 company[2];
// read/write (Set by CARDGetStatus/CARDSetStatus)
/* 0x2E */ u8 bannerFormat;
/* 0x30 */ u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set.
/* 0x34 */ u16 iconFormat;
/* 0x36 */ u16 iconSpeed;
/* 0x38 */ u32 commentAddr; // offset to the pair of 32 byte character strings.
// read-only (Set by CARDGetStatus)
/* 0x3C */ u32 offsetBanner;
/* 0x40 */ u32 offsetBannerTlut;
/* 0x44 */ u32 offsetIcon[8];
/* 0x64 */ u32 offsetIconTlut;
/* 0x68 */ u32 offsetData;
} CARDStat;
void CardInit( void );
void CARDUpdateRegisters( void );
s32 CardFindFreeEntry( void );
s32 CardOpenFile( char *Filename, CARDFileInfo *CFInfo );
void CardCreateFile( char *Filename, u32 Size, CARDFileInfo *CFInfo );
#endif