SSBM Decomp
Loading...
Searching...
No Matches
card.h
Go to the documentation of this file.
1#ifndef GALE01_3A949C
2#define GALE01_3A949C
3
4#include <Runtime/platform.h>
5
6#include <dolphin/card.h>
7
16
22
23#define HSD_CARD_MAX_FILES 9
24
32
36typedef struct CardState {
37 /* 0x00 */ u8* sector_buf;
38 /* 0x04 */ s32 chan;
39 /* 0x08 */ u32 sector_size;
41 /* 0x20 */ s32 file_no;
42
44 /* 0x24 */ u32 header_size;
45
49 /* 0x94 */ u8 pad_94[0xDC];
50
53 /* 0x170 */ s32 block_ids[64];
54
55 /* 0x270 */ s32 block_seqs[64];
56 /* 0x370 */ char comment[64];
58 /* 0x3C4 */ CARDStat stat;
59 /* 0x430 */ u8 digest[0x30];
60
63 /* 0x460 */ s32 num_blocks;
64} CardState;
66
68typedef void (*CardCallback)(int file_idx, int result);
69
101
104typedef struct CardWriteArgs {
105 /* 0x00 */ s32 file_idx;
106 /* 0x04 */ s32 phys;
107 /* 0x08 */ s32 block_id;
108 /* 0x0C */ s32 seq;
109 /* 0x10 */ void* data;
110 /* 0x14 */ s32 offset;
111 /* 0x18 */ s32 size;
113
117typedef struct CardReadArgs {
118 /* 0x00 */ s32 x0;
119 /* 0x04 */ s32 x4;
120 /* 0x08 */ s32 phys;
121 /* 0x0C */ s32 xC;
122 /* 0x10 */ void* data;
123 /* 0x14 */ s32 offset;
124 /* 0x18 */ s32 size;
126
129typedef struct CardVerifyArgs {
130 /* 0x00 */ s32 x0;
131 /* 0x04 */ s32 x4;
132 /* 0x08 */ s32 block_id;
133 /* 0x0C */ s32 seq;
134 /* 0x10 */ void* data;
135 /* 0x14 */ s32 offset;
136 /* 0x18 */ s32 size;
138
142typedef struct CardSectorArgs {
143 /* 0x00 */ s32 x0;
144 /* 0x04 */ s32 phys;
145 /* 0x08 */ s32 block_id;
146 /* 0x0C */ s32 seq;
147 /* 0x10 */ void* x10;
148 /* 0x14 */ s32 offset;
150
152typedef struct CardClearArgs {
153 /* 0x00 */ s32 x0;
154 /* 0x04 */ s32 x4;
155 /* 0x08 */ s32 x8;
156 /* 0x0C */ s32 xC;
157 /* 0x10 */ void* data;
158 /* 0x14 */ s32 x14;
159 /* 0x18 */ s32 size;
161
163typedef struct CardCreateArgs {
164 /* 0x00 */ const char* filename;
165 /* 0x04 */ s32 size;
167
170typedef struct CardHeaderArgs {
171 /* 0x00 */ s32 index;
172 /* 0x04 */ void* banner;
173 /* 0x08 */ void* icons;
175
177typedef struct CardReadHeaderArgs {
178 /* 0x00 */ s32 index;
179 /* 0x04 */ void* comment;
180 /* 0x08 */ void* banner;
181 /* 0x0C */ void* icons;
183
185typedef struct CardGetStatusArgs {
186 /* 0x00 */ s32 file_no;
188
206
220
222typedef struct CardFileReqArgs {
223 /* 0x00 */ s32 file_idx;
224 /* 0x04 */ u8* buf;
226
228typedef struct CardCreateReqArgs {
229 /* 0x00 */ const char* filename;
230 /* 0x04 */ void* banner;
231 /* 0x08 */ void* icons;
233
235typedef struct CardStatusReqArgs {
236 /* 0x00 */ s32 x0;
237 /* 0x04 */ void* banner;
238 /* 0x08 */ void* icons;
240
242typedef struct CardOpenReqArgs {
243 /* 0x00 */ s32 file_no;
245
247typedef struct CardHeaderReqArgs {
248 /* 0x00 */ void* comment;
249 /* 0x04 */ void* banner;
250 /* 0x08 */ void* icons;
252
268
288
293/* 3AAA48 */ void hsd_803AAA48(void);
294
295/* 3AC340 */ int hsd_803AC340(CardIconInfo* icon_info);
296/* 3AC3E0 */ void hsd_803AC3E0(CardState* state, int file_idx, int file_size,
297 int file_flags, u8* data);
298/* 3B2374 */ void hsd_803B2374(void);
299/* 3B24E4 */ void hsd_803B24E4(CardState* state, int chan, int sector_size,
300 void* work_buf);
301/* 3B2550 */ int hsd_803B2550(CardState* state, const char* filename,
303/* 3B2674 */ int hsd_803B2674(CardState* state);
304
309/* 3B27F4 */ int hsd_803B27F4(CardState* state, void* comment, void* banner,
311
314/* 3B286C */ int hsd_803B286C(CardState* state, const char* filename,
315 const char* comment, void* banner, void* icons,
319/* 3B2928 */ int hsd_803B2928(CardState* state, const char* comment,
320 void* banner, void* icons,
323/* 3B29D8 */ int hsd_803B29D8(CardState* state, int file_idx, u8* buf,
326/* 3B2A4C */ int hsd_803B2A4C(CardState* state, int file_idx, u8* buf,
328/* 3B2ADC */ int hsd_SetCardIconInfo(CardState* state,
329 CardIconInfo* icon_info);
330
331#endif
static void callback(HSD_GObj *gobj)
Definition ftdonkeyspeciallw.c:90
state
Definition gm_1BFA.c:18
char filename[]
Definition lbcardgame.c:121
signed int s32
Definition types.h:12
unsigned int u32
Definition types.h:13
unsigned char u8
Definition types.h:5
static CSSIcon icons[25+1]
Definition mncharsel.c:142
#define ASSERT_SIZE(expr, size)
Definition platform.h:127
void hsd_803B24E4(CardState *state, int chan, int sector_size, void *work_buf)
Definition card.c:5306
#define HSD_CARD_MAX_FILES
Definition card.h:23
int hsd_803B2674(CardState *state)
Definition card.c:5374
HSD_CardResult
Definition card.h:8
@ HSD_CardResult_UnkN261
Definition card.h:14
@ HSD_CardResult_UnkN1
Definition card.h:10
@ HSD_CardResult_UnkN2
Definition card.h:11
@ HSD_CardResult_UnkN3
Definition card.h:12
@ HSD_CardResult_Ok
Definition card.h:9
@ HSD_CardResult_UnkN4
Definition card.h:13
int hsd_803AC340(CardIconInfo *icon_info)
Definition card.c:1629
void hsd_803AC3E0(CardState *state, int file_idx, int file_size, int file_flags, u8 *data)
Definition card.c:1671
void hsd_803B2374(void)
Definition card.c:5290
int hsd_803B2A4C(CardState *state, int file_idx, u8 *buf, CardCallback callback)
Queues a logical-file write from the borrowed source buffer.
Definition card.c:5517
CardBannerFormat
Definition card.h:17
@ CardBanner_Large
RGB5A3 color.
Definition card.h:20
@ CardBanner_None
Definition card.h:18
@ CardBanner_Small
Indexed color, including its palette.
Definition card.h:19
CardActiveType
What the queued commands complete; its callback runs when the ring drains.
Definition card.h:271
@ CARD_ACTIVE_WRITE_FILE
file_flags 0
Definition card.h:274
@ CARD_ACTIVE_READ_FILE
Definition card.h:273
@ CARD_ACTIVE_WRITE_FILE_1_2
Writes files with file_flags 1 or 2.
Definition card.h:278
@ CARD_ACTIVE_WRITE_FILE_3
file_flags 3
Definition card.h:280
@ CARD_ACTIVE_SET_STATUS
Definition card.h:286
@ CARD_ACTIVE_OPEN_OR_READ_HEADER
Set by fn_803ADE4C (open file) and fn_803B26CC (read header).
Definition card.h:283
@ CARD_ACTIVE_CREATE_FILE
Definition card.h:285
@ CARD_ACTIVE_NONE
Definition card.h:272
void(* CardCallback)(int file_idx, int result)
Completion callback: (file index or 0, result).
Definition card.h:68
int hsd_803B286C(CardState *state, const char *filename, const char *comment, void *banner, void *icons, CardCallback callback)
Queues file creation.
Definition card.c:5439
int hsd_803B29D8(CardState *state, int file_idx, u8 *buf, CardCallback callback)
Queues a logical-file read into the borrowed destination buffer.
Definition card.c:5492
int hsd_SetCardIconInfo(CardState *state, CardIconInfo *icon_info)
Definition card.c:5549
int hsd_803B27F4(CardState *state, void *comment, void *banner, void *icons, CardCallback callback)
Queues a header read into the non-NULL destination buffers.
Definition card.c:5413
CardRequestType
Requests queued by hsd_3B27.c and started by fn_803AA790.
Definition card.h:208
@ CARD_REQ_WRITE_FILE
Definition card.h:211
@ CARD_REQ_OPEN_FILE
Definition card.h:216
@ CARD_REQ_SET_STATUS
Rewrites the comment/banner/icons header if it changed, then CARDSetStatus.
Definition card.h:215
@ CARD_REQ_READ_HEADER
Reads the header sectors back into the caller's buffers.
Definition card.h:218
@ CARD_REQ_NONE
Definition card.h:209
@ CARD_REQ_READ_FILE
Definition card.h:210
@ CARD_REQ_CREATE_FILE
Definition card.h:212
int hsd_803B2928(CardState *state, const char *comment, void *banner, void *icons, CardCallback callback)
Queues a header/status update.
Definition card.c:5466
void hsd_803AAA48(void)
Drives queued requests and commands until idle or waiting for CARD I/O.
Definition card.c:976
CardCmdType
Ring commands run by hsd_803AAA48; asynchronous CARD operations are completed by hsd_803A949C.
Definition card.h:73
@ CARD_CMD_CLEAR_BUF
Definition card.h:78
@ CARD_CMD_SCAN_BLOCK
Reads one block's header into block_ids/block_seqs and merges its file table into file_flags/file_siz...
Definition card.h:91
@ CARD_CMD_UNK_0x03
No producer or handler identified.
Definition card.h:77
@ CARD_CMD_READ_SECTOR
Definition card.h:95
@ CARD_CMD_CHECK_VERIFIED
After queued verification, changes result 2 to 0 and otherwise sets result 1.
Definition card.h:82
@ CARD_CMD_SET_STATUS
Definition card.h:84
@ CARD_CMD_WRITE_SECTOR
Definition card.h:96
@ CARD_CMD_VERIFY_BLOCK
Definition card.h:79
@ CARD_CMD_READ_HEADER
Definition card.h:87
@ CARD_CMD_NONE
Definition card.h:74
@ CARD_CMD_WRITE_HEADER
Definition card.h:85
@ CARD_CMD_WRITE_BLOCK
Definition card.h:75
@ CARD_CMD_GET_STATUS
Definition card.h:88
@ CARD_CMD_REPAIR
fn_803AD16C: mark stale copies negative; for file_flags 0 files also clear surplus copies and rebuild...
Definition card.h:94
@ CARD_CMD_READ_BLOCK
Definition card.h:76
@ CARD_CMD_VERIFY_HEADER
Definition card.h:86
@ CARD_CMD_CREATE_FILE
Definition card.h:83
@ CARD_CMD_SCAN_FILE
Queues header validation and CARD_CMD_SCAN_BLOCK for each block, followed by CARD_CMD_REPAIR.
Definition card.h:99
int hsd_803B2550(CardState *state, const char *filename, CardCallback callback)
Definition card.c:5315
Definition card.h:19
Definition CARDStat.h:4
CARD_CMD_CLEAR_BUF: memset(data, 0, size).
Definition card.h:152
s32 xC
Definition card.h:156
s32 x4
Definition card.h:154
void * data
Definition card.h:157
s32 x14
Definition card.h:158
s32 x8
Definition card.h:155
s32 size
Definition card.h:159
s32 x0
Definition card.h:153
One entry of the command ring hsd_804D1148.
Definition card.h:190
CardState * state
Definition card.h:192
union CardCmd::CardCmd_x8 x8
CardCmdType type
Definition card.h:191
CARD_CMD_CREATE_FILE.
Definition card.h:163
s32 size
Definition card.h:165
const char * filename
Definition card.h:164
CARD_REQ_CREATE_FILE.
Definition card.h:228
void * banner
Definition card.h:230
void * icons
Definition card.h:231
const char * filename
Definition card.h:229
CARD_REQ_READ_FILE, CARD_REQ_WRITE_FILE.
Definition card.h:222
s32 file_idx
Definition card.h:223
u8 * buf
Definition card.h:224
CARD_CMD_GET_STATUS.
Definition card.h:185
s32 file_no
Definition card.h:186
CARD_CMD_WRITE_HEADER, CARD_CMD_VERIFY_HEADER: header sector index and the banner/icons buffers (the ...
Definition card.h:170
void * icons
Definition card.h:173
void * banner
Definition card.h:172
s32 index
Definition card.h:171
CARD_REQ_READ_HEADER: destination buffers, any of which may be NULL.
Definition card.h:247
void * icons
Definition card.h:250
void * comment
Definition card.h:248
void * banner
Definition card.h:249
Definition card.h:25
u8 icon_format[8]
Definition card.h:28
u8 icon_speed[8]
Definition card.h:29
u8 banner_format
Definition card.h:26
u8 unused
Definition card.h:27
CARD_REQ_OPEN_FILE.
Definition card.h:242
s32 file_no
Definition card.h:243
CARD_CMD_READ_BLOCK, CARD_CMD_SCAN_BLOCK: phys 0 shares the last header sector.
Definition card.h:117
s32 x0
Definition card.h:118
s32 phys
Definition card.h:120
s32 size
Definition card.h:124
s32 x4
Definition card.h:119
void * data
Definition card.h:122
s32 offset
Definition card.h:123
s32 xC
Definition card.h:121
CARD_CMD_READ_HEADER: destination buffers, any of which may be NULL.
Definition card.h:177
s32 index
Definition card.h:178
void * banner
Definition card.h:180
void * comment
Definition card.h:179
void * icons
Definition card.h:181
One entry of the request queue hsd_804D2348.
Definition card.h:255
CardCallback callback
Definition card.h:265
union CardRequest::CardRequest_x8 x8
CardState * state
Definition card.h:257
CardRequestType type
Definition card.h:256
CARD_CMD_READ_SECTOR, CARD_CMD_WRITE_SECTOR: transfer through sector_buf.
Definition card.h:142
s32 x0
Definition card.h:143
s32 phys
Definition card.h:144
s32 block_id
Definition card.h:145
s32 seq
Definition card.h:146
void * x10
Definition card.h:147
s32 offset
Definition card.h:148
One CARD file containing up to nine logical files.
Definition card.h:36
u8 * file_data[HSD_CARD_MAX_FILES]
Definition card.h:48
s32 block_seqs[64]
Definition card.h:55
char comment[64]
Definition card.h:56
CARDStat stat
Definition card.h:58
s32 chan
Definition card.h:38
u8 digest[0x30]
Definition card.h:59
u8 pad_94[0xDC]
Definition card.h:49
CARDFileInfo file_info
Definition card.h:40
u32 header_size
Bytes of comment + banner + icons; the 0x30-byte digest follows.
Definition card.h:44
int file_flags[HSD_CARD_MAX_FILES]
Definition card.h:46
CardIconInfo icon_info
Definition card.h:57
s32 file_no
Definition card.h:41
u8 * sector_buf
Definition card.h:37
int file_sizes[HSD_CARD_MAX_FILES]
Definition card.h:47
s32 num_blocks
Physical blocks 1..num_blocks each fill a sector; block 0 shares the last header sector.
Definition card.h:63
u32 sector_size
Definition card.h:39
s32 block_ids[64]
Block id stored in each physical block; negated = stale copy, -0x7FFF = free.
Definition card.h:53
CARD_REQ_SET_STATUS.
Definition card.h:235
void * banner
Definition card.h:237
s32 x0
Definition card.h:236
void * icons
Definition card.h:238
CARD_CMD_VERIFY_BLOCK: compare the block header and data against block_id/seq/data.
Definition card.h:129
s32 offset
Definition card.h:135
s32 seq
Definition card.h:133
s32 x4
Definition card.h:131
s32 block_id
Definition card.h:132
void * data
Definition card.h:134
s32 size
Definition card.h:136
s32 x0
Definition card.h:130
CARD_CMD_WRITE_BLOCK: 0x20-byte block header followed by size bytes of data; the remaining bytes in t...
Definition card.h:104
s32 offset
Definition card.h:110
s32 file_idx
Definition card.h:105
s32 phys
Definition card.h:106
s32 block_id
Definition card.h:107
s32 seq
Definition card.h:108
void * data
Definition card.h:109
s32 size
Definition card.h:111
Definition card.h:193
CardGetStatusArgs get_status
Definition card.h:202
CardReadHeaderArgs read_header
Definition card.h:201
CardReadArgs read
Definition card.h:195
CardCreateArgs create
Definition card.h:199
CardVerifyArgs verify
Definition card.h:196
CardHeaderArgs header
Definition card.h:200
CardSectorArgs sector
Definition card.h:197
CardClearArgs clear
Definition card.h:198
CardWriteArgs write
Definition card.h:194
Definition card.h:258
CardStatusReqArgs status
Definition card.h:261
CardOpenReqArgs open
Definition card.h:262
CardHeaderReqArgs header
Definition card.h:263
CardFileReqArgs file
Definition card.h:259
CardCreateReqArgs create
Definition card.h:260