Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
dvd.h
Go to the documentation of this file.
1#ifndef _REVOLUTION_DVD_H_
2#define _REVOLUTION_DVD_H_
3
4#include <revolution/types.h>
5#include <revolution/esp.h>
6#include "global.h"
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
12#define DVD_DEVICE_CODE_READ (1 << 15)
13#define MAKE_DVD_DEVICE_CODE(x) (DVD_DEVICE_CODE_READ | (x))
14
15#define DVD_ASSERTMSGLINE(line, cond, msg) \
16 if (!(cond)) \
17 OSPanic(__FILE__, line, msg)
18
19#define DVD_ASSERTMSG1LINE(line, cond, msg, arg1) \
20 if (!(cond)) \
21 OSPanic(__FILE__, line, msg, arg1)
22
23#define DVD_ASSERTMSG2LINE(line, cond, msg, arg1, arg2) \
24 if (!(cond)) \
25 OSPanic(__FILE__, line, msg, arg1, arg2)
26
27#define DVD_RESULT_GOOD 0
28#define DVD_RESULT_FATAL_ERROR -1
29#define DVD_RESULT_IGNORED -2
30#define DVD_RESULT_CANCELED -6
31
32#define DVD_STATE_FATAL_ERROR -1
33#define DVD_STATE_END 0
34#define DVD_STATE_BUSY 1
35#define DVD_STATE_WAITING 2
36#define DVD_STATE_COVER_CLOSED 3
37#define DVD_STATE_NO_DISK 4
38#define DVD_STATE_COVER_OPEN 5
39#define DVD_STATE_WRONG_DISK 6
40#define DVD_STATE_MOTOR_STOPPED 7
41#define DVD_STATE_PAUSING 8
42#define DVD_STATE_IGNORED 9
43#define DVD_STATE_CANCELED 10
44#define DVD_STATE_RETRY 11
45
46#define DVD_MIN_TRANSFER_SIZE 32
47
48// could be bitfields
49#define DVD_INTTYPE_TC 1
50#define DVD_INTTYPE_DE 2
51// unk type 3
52#define DVD_INTTYPE_CVR 4
53
54// DVD Commands
55#define DVD_COMMAND_NONE 0
56#define DVD_COMMAND_READ 1
57#define DVD_COMMAND_SEEK 2
58#define DVD_COMMAND_CHANGE_DISK 3
59#define DVD_COMMAND_BSREAD 4
60#define DVD_COMMAND_READID 5
61#define DVD_COMMAND_INITSTREAM 6
62#define DVD_COMMAND_CANCELSTREAM 7
63#define DVD_COMMAND_STOP_STREAM_AT_END 8
64#define DVD_COMMAND_REQUEST_AUDIO_ERROR 9
65#define DVD_COMMAND_REQUEST_PLAY_ADDR 10
66#define DVD_COMMAND_REQUEST_START_ADDR 11
67#define DVD_COMMAND_REQUEST_LENGTH 12
68#define DVD_COMMAND_AUDIO_BUFFER_CONFIG 13
69#define DVD_COMMAND_INQUIRY 14
70#define DVD_COMMAND_BS_CHANGE_DISK 15
71#define DVD_COMMAND_UNK_16 16
72
73#define DVD_RESETCOVER_TIMELAG_TICKS2 OSMillisecondsToTicks(100)
74
75typedef struct DVDDiskID {
76 char gameName[4];
77 char company[2];
82 u8 padding[22];
84
85typedef struct DVDCommandBlock DVDCommandBlock;
86typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
87typedef void (*DVDLowCallback)(u32);
88
91
92struct DVDCommandBlock {
93 /* 0x00 */ DVDCommandBlock* next;
94 /* 0x04 */ DVDCommandBlock* prev;
95 /* 0x08 */ u32 command;
96 /* 0x0C */ s32 state;
97 /* 0x10 */ u32 offset;
98 /* 0x14 */ u32 length;
99 /* 0x18 */ void* addr;
100 /* 0x1C */ u32 currTransferSize;
101 /* 0x20 */ u32 transferredSize;
102 /* 0x24 */ DVDDiskID* id;
103 /* 0x28 */ DVDCBCallback callback;
104 /* 0x2C */ void* userData;
105};
106
107typedef struct DVDFileInfo DVDFileInfo;
108typedef void (*DVDCallback)(s32 result, DVDFileInfo *fileInfo);
109struct DVDFileInfo {
110 /* 0x00 */ DVDCommandBlock cb;
111 /* 0x30 */ u32 startAddr;
112 /* 0x34 */ u32 length;
113 /* 0x38 */ DVDCallback callback;
114};
115
116typedef struct {
117 u32 entryNum;
118 u32 location;
119 u32 next;
120} DVDDir;
121
122typedef struct {
123 u32 entryNum;
124 BOOL isDir;
125 char* name;
127
128typedef struct DVDBB2 {
129 /* 0x00 */ u32 bootFilePosition;
130 /* 0x04 */ u32 FSTPosition;
131 /* 0x08 */ u32 FSTLength;
132 /* 0x0C */ u32 FSTMaxLength;
133 /* 0x10 */ void* FSTAddress;
134 /* 0x14 */ u32 userPosition;
135 /* 0x18 */ u32 userLength;
136 /* 0x1C */ u32 padding0;
138
139typedef struct DVDDriveInfo {
140 /* 0x00 */ u16 revisionLevel;
141 /* 0x02 */ u16 deviceCode;
142 /* 0x04 */ u32 releaseDate;
143 /* 0x08 */ u8 padding[24];
145
154
168
178
183
188
190
207
213
220
224
225// DVD
226void DVDInit(void);
238void DVDReset(void);
239int DVDResetRequired(void);
243void DVDPause(void);
244void DVDResume(void);
248s32 DVDCancelAll(void);
251BOOL DVDCheckDisk(void);
252
253// DVD FATAL
256
257// DVD FS
258s32 DVDConvertPathToEntrynum(const char* pathPtr);
259BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
260BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo);
261BOOL DVDClose(DVDFileInfo* fileInfo);
262BOOL DVDGetCurrentDir(char* path, u32 maxlen);
263BOOL DVDChangeDir(const char* dirName);
264BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
265 DVDCallback callback, s32 prio);
266s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio);
267int DVDSeekAsyncPrio(DVDFileInfo* fileInfo, s32 offset, void (* callback)(s32, DVDFileInfo *), s32 prio);
268s32 DVDSeekPrio(DVDFileInfo* fileInfo, s32 offset, s32 prio);
269s32 DVDGetFileInfoStatus(const DVDFileInfo* fileInfo);
270BOOL DVDFastOpenDir(s32 entrynum, DVDDir* dir);
271int DVDOpenDir(const char* dirName, DVDDir* dir);
272int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent);
273int DVDCloseDir(DVDDir* dir);
274void DVDRewindDir(DVDDir* dir);
276
277#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
278 DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
279
280// DVD ID UTILS
281int DVDCompareDiskID(const DVDDiskID* id1, const DVDDiskID* id2);
282DVDDiskID* DVDGenerateDiskID(DVDDiskID* id, const char* game, const char* company, u8 diskNum, u8 version);
283
284// DVD LOW
292BOOL DVDLowBreak(void);
295
296// DVD QUEUE
297void DVDDumpWaitingQueue(void);
298
299// DVD BROADWAY
300BOOL DVDLowFinalize(void);
301BOOL DVDLowInit(void);
310BOOL DVDLowGetNoDiscBufferSizes(const u32 partitionWordOffset, u32* numTmdBytes, u32* numCertBytes, DVDLowCallback callback);
311BOOL DVDLowGetNoDiscOpenPartitionParams(const u32 partitionWordOffset, ESTicket* eTicket, u32* numTmdBytes, ESTitleMeta* tmd, u32* numCertBytes, u8* certificates, u32* dataWordOffset, u8* h3HashPtr, DVDLowCallback callback);
319BOOL DVDLowOpenPartitionWithTmdAndTicketView(const u32, const ESTicketView* const, const u32, const ESTitleMeta* const, const u32, const u8* const, DVDLowCallback);
320BOOL DVDLowOpenPartition(const u32, const ESTicket* const, const u32, const u8* const, ESTitleMeta*, DVDLowCallback);
321
322#ifdef __cplusplus
323}
324#endif
325
326#endif
static u32 addr
Definition WUD.c:1668
static s32 offset
Definition WUD.c:1669
s16 name
Definition d_a_e_pz.cpp:1757
static u16 const id2[7]
Definition d_a_npc_seirei.cpp:624
static u16 const id1[7]
Definition d_a_npc_seirei.cpp:614
static u32 next
Definition CARDUnlock.c:29
void(* DVDCallback)(s32 result, DVDFileInfo *fileInfo)
Definition dvd.h:104
void(* DVDCommandCheckerCallback)(u32)
Definition dvd.h:85
struct DVDDriveInfo DVDDriveInfo
int DVDReadDiskID(DVDCommandBlock *block, DVDDiskID *diskID, DVDCBCallback callback)
Definition dvd.c:1054
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
void DVDResume(void)
Definition dvd.c:1571
int DVDCancelAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:1583
s32 DVDCancel(volatile DVDCommandBlock *block)
Definition dvd.c:1682
BOOL DVDSetAutoInvalidation(BOOL autoInval)
Definition dvd.c:1552
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:86
s32 DVDStopMotor(DVDCommandBlock *block)
Definition dvd.c:1414
DVDDiskID * DVDGetCurrentDiskID(void)
Definition dvd.c:1771
void(* DVDLowCallback)(u32)
Definition dvd.h:83
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
int DVDInquiryAsync(DVDCommandBlock *block, DVDDriveInfo *info, DVDCBCallback callback)
Definition dvd.c:1449
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 DVDSeekAbsAsyncPrio(DVDCommandBlock *block, s32 offset, DVDCBCallback callback, s32 prio)
Definition dvd.c:1018
void DVDInit(void)
Definition dvd.c:105
int DVDResetRequired(void)
Definition dvd.c:1508
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:82
unsigned int size
Definition __os.h:106
void DVDLowReset(void)
Definition dvdlow.c:438
int BOOL
Definition types.h:33
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
struct DVDGameTOC DVDGameTOC
void(* DVDCallback)(s32 result, DVDFileInfo *fileInfo)
Definition dvd.h:108
BOOL DVDReadAsyncPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, DVDCallback callback, s32 prio)
Definition dvdfs.c:299
struct DVDVideoReportKey DVDVideoReportKey
BOOL DVDFastOpenDir(s32 entrynum, DVDDir *dir)
Definition dvdfs.c:442
u32 DVDLowGetImmBufferReg(void)
Definition dvd_broadway.c:939
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo *fileInfo)
Definition dvdfs.c:164
int DVDReadDir(DVDDir *dir, DVDDirEntry *dirent)
Definition dvdfs.c:482
BOOL DVDClose(DVDFileInfo *fileInfo)
Definition dvdfs.c:209
BOOL DVDLowReportKey(DVDVideoReportKey *reportKey, u32 format, u32 lsn, DVDLowCallback callback)
Definition dvd_broadway.c:738
BOOL DVDOpen(const char *fileName, DVDFileInfo *fileInfo)
Definition dvdfs.c:181
struct DVDPartitionInfo DVDPartitionInfo
struct diRegVals diRegVals_t
int DVDOpenDir(const char *dirName, DVDDir *dir)
Definition dvdfs.c:457
BOOL DVDLowUnencryptedRead(void *, u32, u32, DVDLowCallback)
Definition dvd_broadway.c:557
BOOL DVDLowGetNoDiscBufferSizes(const u32 partitionWordOffset, u32 *numTmdBytes, u32 *numCertBytes, DVDLowCallback callback)
Definition dvd_broadway.c:423
BOOL DVDLowGetNoDiscOpenPartitionParams(const u32 partitionWordOffset, ESTicket *eTicket, u32 *numTmdBytes, ESTitleMeta *tmd, u32 *numCertBytes, u8 *certificates, u32 *dataWordOffset, u8 *h3HashPtr, DVDLowCallback callback)
Definition dvd_broadway.c:470
BOOL DVDLowOpenPartition(const u32, const ESTicket *const, const u32, const u8 *const, ESTitleMeta *, DVDLowCallback)
Definition dvd_broadway.c:297
BOOL DVDLowUnmaskStatusInterrupts(void)
Definition dvd_broadway.c:943
BOOL DVDLowFinalize(void)
Definition dvd_broadway.c:212
BOOL __DVDGetAutoFatalMessaging(void)
Definition dvdFatal.c:203
BOOL DVDLowReadDiskID(DVDDiskID *diskID, DVDLowCallback callback)
Definition dvdlow.c:351
BOOL DVDLowRead(void *addr, u32 length, u32 offset, DVDLowCallback callback)
Definition dvdlow.c:286
BOOL DVDGetCurrentDir(char *path, u32 maxlen)
Definition dvdfs.c:276
BOOL DVDLowRequestError(DVDLowCallback callback)
Definition dvdlow.c:375
BOOL DVDLowSetSpinupFlag(u32 spinUp)
Definition dvd_broadway.c:647
s32 DVDReadPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, s32 prio)
Definition dvdfs.c:330
BOOL DVDLowSetMaximumRotation(u32 subcmd, DVDLowCallback callback)
Definition dvd_broadway.c:796
int DVDCloseDir(DVDDir *dir)
Definition dvdfs.c:496
u32 DVDLowGetCoverRegister(void)
Definition dvd_broadway.c:870
BOOL DVDLowBreak(void)
Definition dvdlow.c:488
BOOL DVDLowClosePartition(DVDLowCallback)
Definition dvd_broadway.c:537
BOOL DVDLowInit(void)
Definition dvd_broadway.c:224
BOOL DVDCheckDiskAsync(DVDCommandBlock *block, DVDCBCallback callback)
Definition dvd.c:2342
BOOL DVDChangeDir(const char *dirName)
Definition dvdfs.c:281
BOOL DVDLowAudioBufferConfig(u8 enable, u32 size, DVDLowCallback callback)
Definition dvd_broadway.c:680
BOOL DVDLowSeek(u32 offset, DVDLowCallback callback)
Definition dvdlow.c:331
void DVDRewindDir(DVDDir *dir)
Definition dvdfs.c:500
int DVDSeekAsyncPrio(DVDFileInfo *fileInfo, s32 offset, void(*callback)(s32, DVDFileInfo *), s32 prio)
Definition dvdfs.c:376
u32 DVDLowGetStatusRegister(void)
Definition dvd_broadway.c:874
s32 DVDGetTransferredSize(DVDFileInfo *fileinfo)
Definition dvdfs.c:600
void DVDDumpWaitingQueue(void)
Definition dvdqueue.c:149
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
int DVDCompareDiskID(const DVDDiskID *id1, const DVDDiskID *id2)
Definition dvdidutils.c:18
u32 DVDLowGetCoverStatus(void)
Definition dvdlow.c:503
BOOL DVDLowPrepareCoverRegister(DVDLowCallback callback)
Definition dvd_broadway.c:882
DVDLowCallback DVDLowClearCallback(void)
Definition dvdlow.c:494
BOOL DVDLowMaskCoverInterrupt(void)
Definition dvd_broadway.c:947
u32 DVDLowGetControlRegister(void)
Definition dvd_broadway.c:878
BOOL DVDLowPrepareControlRegister(DVDLowCallback callback)
Definition dvd_broadway.c:920
BOOL DVDLowOpenPartitionWithTmdAndTicketView(const u32, const ESTicketView *const, const u32, const ESTitleMeta *const, const u32, const u8 *const, DVDLowCallback)
Definition dvd_broadway.c:364
s32 DVDGetFileInfoStatus(const DVDFileInfo *fileInfo)
Definition dvdfs.c:438
struct diCommand diCommand_t
BOOL DVDLowClearCoverInterrupt(DVDLowCallback callback)
Definition dvd_broadway.c:951
BOOL DVDLowPrepareStatusRegister(DVDLowCallback callback)
Definition dvd_broadway.c:901
struct DVDGamePartition DVDGamePartition
void(* DVDCBCallback)(s32 result, DVDCommandBlock *block)
Definition dvd.h:86
static void callback(u32 param_0)
Definition OSExec.c:308
Definition dvd.h:124
u32 FSTMaxLength
Definition dvd.h:128
u32 FSTPosition
Definition dvd.h:126
u32 bootFilePosition
Definition dvd.h:125
void * FSTAddress
Definition dvd.h:129
u32 userLength
Definition dvd.h:131
u32 padding0
Definition dvd.h:132
u32 FSTLength
Definition dvd.h:127
u32 userPosition
Definition dvd.h:130
Definition dvd.h:88
DVDDiskID * id
Definition dvd.h:98
u32 transferredSize
Definition dvd.h:97
u32 currTransferSize
Definition dvd.h:96
DVDCommandBlock * prev
Definition dvd.h:90
void * userData
Definition dvd.h:100
void * addr
Definition dvd.h:95
u32 offset
Definition dvd.h:93
u32 command
Definition dvd.h:91
DVDCBCallback callback
Definition dvd.h:99
s32 state
Definition dvd.h:92
u32 length
Definition dvd.h:94
DVDCommandBlock * next
Definition dvd.h:89
Definition dvd.h:147
u32 length
Definition dvd.h:150
u32 command
Definition dvd.h:148
u32 tick
Definition dvd.h:152
u32 offset
Definition dvd.h:149
u32 intType
Definition dvd.h:151
Definition dvd.h:118
Definition dvd.h:112
Definition dvd.h:71
u8 padding[22]
Definition dvd.h:78
u8 streaming
Definition dvd.h:76
char gameName[4]
Definition dvd.h:72
char company[2]
Definition dvd.h:73
u8 gameVersion
Definition dvd.h:75
u8 diskNumber
Definition dvd.h:74
u8 streamingBufSize
Definition dvd.h:77
Definition dvd.h:135
u16 deviceCode
Definition dvd.h:137
u8 padding[24]
Definition dvd.h:139
u32 releaseDate
Definition dvd.h:138
u16 revisionLevel
Definition dvd.h:136
Definition dvd.h:156
char gameName[4]
Definition dvd.h:157
DVDCommandInfo lastCommand[5]
Definition dvd.h:166
u32 dateTime
Definition dvd.h:162
u32 error
Definition dvd.h:161
u32 unk_0x14
Definition dvd.h:164
u8 gameVersion
Definition dvd.h:159
u32 status
Definition dvd.h:163
u8 reserved0[2]
Definition dvd.h:160
u8 diskNumber
Definition dvd.h:158
u32 nextOffset
Definition dvd.h:165
Definition dvd.h:105
u32 length
Definition dvd.h:108
DVDCallback callback
Definition dvd.h:109
DVDCommandBlock cb
Definition dvd.h:106
u32 startAddr
Definition dvd.h:107
Definition dvd.h:169
u8 * encryptedArea
Definition dvd.h:176
u32 tmdSize
Definition dvd.h:171
u8 * h3Hashes
Definition dvd.h:175
ESTicket ticket
Definition dvd.h:170
u32 certBlobSize
Definition dvd.h:173
void * certBlob
Definition dvd.h:174
ESTitleMeta * tmd
Definition dvd.h:172
Definition dvd.h:184
u32 numGamePartitions
Definition dvd.h:185
DVDPartitionInfo * partitionInfos
Definition dvd.h:186
Definition dvd.h:179
u32 type
Definition dvd.h:181
DVDGamePartition * gamePartition
Definition dvd.h:180
Definition dvd.h:191
u8 padding2[28]
Definition dvd.h:197
u8 h3Hash[98304]
Definition dvd.h:205
u32 numTmdBytes
Definition dvd.h:196
u8 padding4[28]
Definition dvd.h:201
u8 padding3[ROUND(sizeof(ESTitleMeta), 32) - sizeof(ESTitleMeta)]
Definition dvd.h:199
u8 padding1[ROUND(sizeof(ESTicketView), 32) - sizeof(ESTicketView)]
Definition dvd.h:195
u32 numCertBytes
Definition dvd.h:200
u8 padding0[ROUND(sizeof(ESTicket), 32) - sizeof(ESTicket)]
Definition dvd.h:193
u32 dataWordOffset
Definition dvd.h:203
ESTicketView ticketView
Definition dvd.h:194
ESTitleMeta tmd
Definition dvd.h:198
u8 certificates[4096]
Definition dvd.h:202
ESTicket ticket
Definition dvd.h:192
u8 padding5[28]
Definition dvd.h:204
Definition dvd.h:221
u8 data[32]
Definition dvd.h:222
Definition esp.h:50
Definition esp.h:100
Definition esp.h:94
Definition dvd.h:214
u32 arg[5]
Definition dvd.h:217
u8 theCommand
Definition dvd.h:215
u32 pad2[2]
Definition dvd.h:218
u8 pad1[3]
Definition dvd.h:216
Definition dvd.h:208
u32 CoverRegVal
Definition dvd.h:210
u32 pad[6]
Definition dvd.h:211
u32 ImmRegVal
Definition dvd.h:209
Definition d_a_npc_ks.cpp:47