Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
dvd.h
Go to the documentation of this file.
1#ifndef _DOLPHIN_DVD_H_
2#define _DOLPHIN_DVD_H_
3
4#include <dolphin/types.h>
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10#define DVD_ASSERTMSGLINE(line, cond, msg) \
11 if (!(cond)) \
12 OSPanic(__FILE__, line, msg)
13
14#define DVD_ASSERTMSG1LINE(line, cond, msg, arg1) \
15 if (!(cond)) \
16 OSPanic(__FILE__, line, msg, arg1)
17
18#define DVD_ASSERTMSG2LINE(line, cond, msg, arg1, arg2) \
19 if (!(cond)) \
20 OSPanic(__FILE__, line, msg, arg1, arg2)
21
22#define DVD_RESULT_GOOD 0
23#define DVD_RESULT_FATAL_ERROR -1
24#define DVD_RESULT_IGNORED -2
25#define DVD_RESULT_CANCELED -6
26
27#define DVD_STATE_FATAL_ERROR -1
28#define DVD_STATE_END 0
29#define DVD_STATE_BUSY 1
30#define DVD_STATE_WAITING 2
31#define DVD_STATE_COVER_CLOSED 3
32#define DVD_STATE_NO_DISK 4
33#define DVD_STATE_COVER_OPEN 5
34#define DVD_STATE_WRONG_DISK 6
35#define DVD_STATE_MOTOR_STOPPED 7
36#define DVD_STATE_PAUSING 8
37#define DVD_STATE_IGNORED 9
38#define DVD_STATE_CANCELED 10
39#define DVD_STATE_RETRY 11
40
41#define DVD_MIN_TRANSFER_SIZE 32
42
43// could be bitfields
44#define DVD_INTTYPE_TC 1
45#define DVD_INTTYPE_DE 2
46// unk type 3
47#define DVD_INTTYPE_CVR 4
48
49// DVD Commands
50#define DVD_COMMAND_NONE 0
51#define DVD_COMMAND_READ 1
52#define DVD_COMMAND_SEEK 2
53#define DVD_COMMAND_CHANGE_DISK 3
54#define DVD_COMMAND_BSREAD 4
55#define DVD_COMMAND_READID 5
56#define DVD_COMMAND_INITSTREAM 6
57#define DVD_COMMAND_CANCELSTREAM 7
58#define DVD_COMMAND_STOP_STREAM_AT_END 8
59#define DVD_COMMAND_REQUEST_AUDIO_ERROR 9
60#define DVD_COMMAND_REQUEST_PLAY_ADDR 10
61#define DVD_COMMAND_REQUEST_START_ADDR 11
62#define DVD_COMMAND_REQUEST_LENGTH 12
63#define DVD_COMMAND_AUDIO_BUFFER_CONFIG 13
64#define DVD_COMMAND_INQUIRY 14
65#define DVD_COMMAND_BS_CHANGE_DISK 15
66#define DVD_COMMAND_UNK_16 16
67
77
79typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
80typedef void (*DVDLowCallback)(u32);
81
84
86 /* 0x00 */ DVDCommandBlock* next;
87 /* 0x04 */ DVDCommandBlock* prev;
88 /* 0x08 */ u32 command;
89 /* 0x0C */ s32 state;
90 /* 0x10 */ u32 offset;
91 /* 0x14 */ u32 length;
92 /* 0x18 */ void* addr;
94 /* 0x20 */ u32 transferredSize;
95 /* 0x24 */ DVDDiskID* id;
97 /* 0x2C */ void* userData;
98};
99
101typedef void (*DVDCallback)(s32 result, DVDFileInfo *fileInfo);
103 /* 0x00 */ DVDCommandBlock cb;
104 /* 0x30 */ u32 startAddr;
105 /* 0x34 */ u32 length;
107};
108
114
115typedef struct {
118 char* name;
120
121typedef struct DVDBB2 {
123 /* 0x04 */ u32 FSTPosition;
124 /* 0x08 */ u32 FSTLength;
125 /* 0x0C */ u32 FSTMaxLength;
126 /* 0x10 */ void* FSTAddress;
127 /* 0x14 */ u32 userPosition;
128 /* 0x18 */ u32 userLength;
129 /* 0x1C */ u32 padding0;
131
132typedef struct DVDDriveInfo {
133 /* 0x00 */ u16 revisionLevel;
134 /* 0x02 */ u16 deviceCode;
135 /* 0x04 */ u32 releaseDate;
136 /* 0x08 */ u8 padding[24];
138
139// DVD
140void DVDInit(void);
141int DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback, s32 prio);
142int DVDSeekAbsAsyncPrio(DVDCommandBlock* block, s32 offset, DVDCBCallback callback, s32 prio);
143int DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback);
144int DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback);
145int DVDPrepareStreamAbsAsync(DVDCommandBlock* block, u32 length, u32 offset, DVDCBCallback callback);
163int DVDInquiryAsync(DVDCommandBlock* block, DVDDriveInfo* info, DVDCBCallback callback);
165void DVDReset(void);
166int DVDResetRequired(void);
170void DVDPause(void);
171void DVDResume(void);
172int DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback);
173s32 DVDCancel(volatile DVDCommandBlock* block);
174int DVDCancelAllAsync(DVDCBCallback callback);
175s32 DVDCancelAll(void);
177BOOL DVDCheckDisk(void);
178
179// DVD FATAL
181
182// DVD FS
183s32 DVDConvertPathToEntrynum(const char* pathPtr);
184BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
185BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo);
186BOOL DVDClose(DVDFileInfo* fileInfo);
187BOOL DVDGetCurrentDir(char* path, u32 maxlen);
188BOOL DVDChangeDir(const char* dirName);
189BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
190 DVDCallback callback, s32 prio);
191s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio);
192int DVDSeekAsyncPrio(DVDFileInfo* fileInfo, s32 offset, void (* callback)(s32, DVDFileInfo *), s32 prio);
193s32 DVDSeekPrio(DVDFileInfo* fileInfo, s32 offset, s32 prio);
194s32 DVDGetFileInfoStatus(const DVDFileInfo* fileInfo);
195BOOL DVDFastOpenDir(s32 entrynum, DVDDir* dir);
196int DVDOpenDir(const char* dirName, DVDDir* dir);
197int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent);
198int DVDCloseDir(DVDDir* dir);
199void DVDRewindDir(DVDDir* dir);
200void* DVDGetFSTLocation(void);
201BOOL DVDPrepareStreamAsync(DVDFileInfo* fileInfo, u32 length, u32 offset, DVDCallback callback);
202s32 DVDPrepareStream(DVDFileInfo* fileInfo, u32 length, u32 offset);
204
205#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
206 DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
207
208// DVD ID UTILS
209int DVDCompareDiskID(const DVDDiskID* id1, const DVDDiskID* id2);
210DVDDiskID* DVDGenerateDiskID(DVDDiskID* id, const char* game, const char* company, u8 diskNum, u8 version);
211
212// DVD LOW
213BOOL DVDLowRead(void* addr, u32 length, u32 offset, DVDLowCallback callback);
214BOOL DVDLowSeek(u32 offset, DVDLowCallback callback);
220BOOL DVDLowAudioStream(u32 subcmd, u32 length, u32 offset, DVDLowCallback callback);
223void DVDLowReset(void);
225BOOL DVDLowBreak(void);
228
229// DVD QUEUE
230void DVDDumpWaitingQueue(void);
231
232#ifdef __cplusplus
233}
234#endif
235
236#endif
unsigned int size
Definition __os.h:106
static SECTION_RODATA u8 const id1[14+2]
Definition d_a_npc_seirei.cpp:756
static SECTION_RODATA u8 const id2[14+2]
Definition d_a_npc_seirei.cpp:781
void(* DVDCallback)(s32 result, DVDFileInfo *fileInfo)
Definition dvd.h:101
BOOL DVDReadAsyncPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, DVDCallback callback, s32 prio)
Definition dvdfs.c:299
void DVDLowReset(void)
Definition dvdlow.c:438
BOOL DVDFastOpenDir(s32 entrynum, DVDDir *dir)
Definition dvdfs.c:442
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo *fileInfo)
Definition dvdfs.c:164
int DVDGetStreamLengthAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1284
int DVDReadDir(DVDDir *dir, DVDDirEntry *dirent)
Definition dvdfs.c:482
void(* DVDCommandCheckerCallback)(u32)
Definition dvd.h:82
BOOL DVDClose(DVDFileInfo *fileInfo)
Definition dvdfs.c:209
struct DVDDriveInfo DVDDriveInfo
BOOL DVDOpen(const char *fileName, DVDFileInfo *fileInfo)
Definition dvdfs.c:181
int DVDReadDiskID(DVDCommandBlock *block, DVDDiskID *diskID, DVDCBCallback callback)
Definition dvd.c:1054
s32 DVDGetStreamLength(DVDCommandBlock *block)
Definition dvd.c:1293
int DVDOpenDir(const char *dirName, DVDDir *dir)
Definition dvdfs.c:457
BOOL DVDCheckDisk(void)
Definition dvd.c:1775
void DVDReset(void)
Definition dvd.c:1500
s32 DVDGetCommandBlockStatus(const DVDCommandBlock *block)
Definition dvd.c:1512
struct DVDBB2 DVDBB2
s32 DVDCancelAll(void)
Definition dvd.c:1742
s32 DVDGetDriveStatus(void)
Definition dvd.c:1529
int DVDGetStreamStartAddrAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1244
void DVDResume(void)
Definition dvd.c:1571
DVDLowCallback DVDLowSetResetCoverCallback(DVDLowCallback callback)
Definition dvdlow.c:455
BOOL DVDLowAudioBufferConfig(BOOL enable, u32 size, DVDLowCallback callback)
Definition dvdlow.c:416
int DVDCancelAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1583
s32 DVDCancel(volatile DVDCommandBlock *block)
Definition dvd.c:1682
BOOL DVDLowReadDiskID(DVDDiskID *diskID, DVDLowCallback callback)
Definition dvdlow.c:351
int DVDCancelStreamAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1084
s32 DVDGetStreamErrorStatus(DVDCommandBlock *block)
Definition dvd.c:1173
BOOL DVDLowRead(void *addr, u32 length, u32 offset, DVDLowCallback callback)
Definition dvdlow.c:286
void * DVDGetFSTLocation(void)
Definition dvdfs.c:504
BOOL DVDGetCurrentDir(char *path, u32 maxlen)
Definition dvdfs.c:276
BOOL DVDLowRequestError(DVDLowCallback callback)
Definition dvdlow.c:375
int DVDStopStreamAtEndAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1124
BOOL DVDSetAutoInvalidation(BOOL autoInval)
Definition dvd.c:1552
BOOL DVDLowStopMotor(DVDLowCallback callback)
Definition dvdlow.c:366
struct DVDDiskID DVDDiskID
int DVDChangeDiskAsyncForBS(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1334
void DVDPause(void)
Definition dvd.c:1560
void(* DVDCommandChecker)(DVDCommandBlock *, DVDCommandCheckerCallback)
Definition dvd.h:83
s32 DVDReadPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, s32 prio)
Definition dvdfs.c:330
s32 DVDStopMotor(DVDCommandBlock *block)
Definition dvd.c:1414
int DVDCloseDir(DVDDir *dir)
Definition dvdfs.c:496
BOOL DVDLowRequestAudioStatus(u32 subcmd, DVDLowCallback callback)
Definition dvdlow.c:407
BOOL DVDLowBreak(void)
Definition dvdlow.c:488
int DVDGetStreamPlayAddrAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1204
BOOL DVDChangeDir(const char *dirName)
Definition dvdfs.c:281
s32 DVDPrepareStream(DVDFileInfo *fileInfo, u32 length, u32 offset)
Definition dvdfs.c:543
BOOL DVDLowSeek(u32 offset, DVDLowCallback callback)
Definition dvdlow.c:331
DVDDiskID * DVDGetCurrentDiskID(void)
Definition dvd.c:1771
s32 DVDGetStreamPlayAddr(DVDCommandBlock *block)
Definition dvd.c:1213
s32 DVDStopStreamAtEnd(DVDCommandBlock *block)
Definition dvd.c:1133
void(* DVDLowCallback)(u32)
Definition dvd.h:80
int DVDReadAbsAsyncForBS(DVDCommandBlock *block, void *addr, s32 length, s32 offset, DVDCBCallback callback)
Definition dvd.c:1033
s32 DVDInquiry(DVDCommandBlock *block, DVDDriveInfo *info)
Definition dvd.c:1465
int DVDSetAutoFatalMessaging(BOOL enable)
Definition dvdFatal.c:78
void DVDRewindDir(DVDDir *dir)
Definition dvdfs.c:500
int DVDInquiryAsync(DVDCommandBlock *block, DVDDriveInfo *info, DVDCBCallback callback)
Definition dvd.c:1449
BOOL DVDLowWaitCoverClose(DVDLowCallback callback)
Definition dvdlow.c:343
int DVDReadAbsAsyncPrio(DVDCommandBlock *block, void *addr, s32 length, s32 offset, DVDCBCallback callback, s32 prio)
Definition dvd.c:996
s32 DVDConvertPathToEntrynum(const char *pathPtr)
Definition dvdfs.c:64
int DVDChangeDiskAsync(DVDCommandBlock *block, DVDDiskID *id, DVDCBCallback callback)
Definition dvd.c:1346
int DVDSeekAsyncPrio(DVDFileInfo *fileInfo, s32 offset, void(*callback)(s32, DVDFileInfo *), s32 prio)
Definition dvdfs.c:376
s32 DVDGetTransferredSize(DVDFileInfo *fileinfo)
Definition dvdfs.c:600
void DVDDumpWaitingQueue(void)
Definition dvdqueue.c:149
int DVDSeekAbsAsyncPrio(DVDCommandBlock *block, s32 offset, DVDCBCallback callback, s32 prio)
Definition dvd.c:1018
DVDDiskID * DVDGenerateDiskID(DVDDiskID *id, const char *game, const char *company, u8 diskNum, u8 version)
Definition dvdidutils.c:76
s32 DVDSeekPrio(DVDFileInfo *fileInfo, s32 offset, s32 prio)
Definition dvdfs.c:397
BOOL DVDLowInquiry(DVDDriveInfo *info, DVDLowCallback callback)
Definition dvdlow.c:384
s32 DVDGetStreamStartAddr(DVDCommandBlock *block)
Definition dvd.c:1253
int DVDCompareDiskID(const DVDDiskID *id1, const DVDDiskID *id2)
Definition dvdidutils.c:18
u32 DVDLowGetCoverStatus(void)
Definition dvdlow.c:503
BOOL DVDPrepareStreamAsync(DVDFileInfo *fileInfo, u32 length, u32 offset, DVDCallback callback)
Definition dvdfs.c:511
DVDLowCallback DVDLowClearCallback(void)
Definition dvdlow.c:494
int DVDGetStreamErrorStatusAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1164
s32 DVDCancelStream(DVDCommandBlock *block)
Definition dvd.c:1093
void DVDInit(void)
Definition dvd.c:105
BOOL DVDLowAudioStream(u32 subcmd, u32 length, u32 offset, DVDLowCallback callback)
Definition dvdlow.c:396
int DVDResetRequired(void)
Definition dvd.c:1508
s32 DVDGetFileInfoStatus(const DVDFileInfo *fileInfo)
Definition dvdfs.c:438
int DVDStopMotorAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1402
s32 DVDChangeDisk(DVDCommandBlock *block, DVDDiskID *id)
Definition dvd.c:1367
int DVDCancelAllAsync(DVDCBCallback callback)
Definition dvd.c:1717
void(* DVDCBCallback)(s32 result, DVDCommandBlock *block)
Definition dvd.h:79
int DVDPrepareStreamAbsAsync(DVDCommandBlock *block, u32 length, u32 offset, DVDCBCallback callback)
Definition dvd.c:1073
Definition dvd.h:121
u32 FSTMaxLength
Definition dvd.h:125
u32 FSTPosition
Definition dvd.h:123
u32 bootFilePosition
Definition dvd.h:122
void * FSTAddress
Definition dvd.h:126
u32 userLength
Definition dvd.h:128
u32 padding0
Definition dvd.h:129
u32 FSTLength
Definition dvd.h:124
u32 userPosition
Definition dvd.h:127
Definition dvd.h:85
u32 transferredSize
Definition dvd.h:94
void * addr
Definition dvd.h:92
u32 currTransferSize
Definition dvd.h:93
DVDCommandBlock * prev
Definition dvd.h:87
void * userData
Definition dvd.h:97
u32 offset
Definition dvd.h:90
DVDDiskID * id
Definition dvd.h:95
u32 command
Definition dvd.h:88
DVDCBCallback callback
Definition dvd.h:96
s32 state
Definition dvd.h:89
DVDCommandBlock * next
Definition dvd.h:86
u32 length
Definition dvd.h:91
Definition dvd.h:115
char * name
Definition dvd.h:118
BOOL isDir
Definition dvd.h:117
u32 entryNum
Definition dvd.h:116
Definition dvd.h:109
u32 next
Definition dvd.h:112
u32 location
Definition dvd.h:111
u32 entryNum
Definition dvd.h:110
Definition dvd.h:68
u8 streaming
Definition dvd.h:73
char company[2]
Definition dvd.h:70
char gameName[4]
Definition dvd.h:69
u8 gameVersion
Definition dvd.h:72
u8 diskNumber
Definition dvd.h:71
u8 streamingBufSize
Definition dvd.h:74
u8 padding[22]
Definition dvd.h:75
Definition dvd.h:132
u16 deviceCode
Definition dvd.h:134
u32 releaseDate
Definition dvd.h:135
u8 padding[24]
Definition dvd.h:136
u16 revisionLevel
Definition dvd.h:133
Definition dvd.h:102
u32 length
Definition dvd.h:105
DVDCallback callback
Definition dvd.h:106
DVDCommandBlock cb
Definition dvd.h:103
u32 startAddr
Definition dvd.h:104
int BOOL
Definition types.h:30
unsigned long u32
Definition types.h:9
unsigned short int u16
Definition types.h:7
signed long s32
Definition types.h:8
unsigned char u8
Definition types.h:5