blob: 16e7b1f9abdb5fc295200b8e11b415aff9cfdbda (
plain)
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
#ifndef M_DO_M_DO_DVD_THREAD_H
#define M_DO_M_DO_DVD_THREAD_H
#include "JSystem/JKernel/JKRArchive.h"
#include <os.h>
#include <os.h>
#include "f_pc/f_pc_node.h"
#define mDoDvd_MOUNT_DIRECTION_HEAD 0
#define mDoDvd_MOUNT_DIRECTION_TAIL 1
class JKRAramArchive;
class JKRHeap;
class JKRMemArchive;
typedef void* (*mDoDvdThd_callback_func)(void*);
class mDoDvdThd_command_c : public node_class {
public:
/* 0x0C */ bool mIsDone;
/* 0x10 vtable*/
public:
virtual ~mDoDvdThd_command_c();
mDoDvdThd_command_c();
inline s32 sync() { return mIsDone; }
inline void destroy() { delete this; }
virtual s32 execute() = 0;
}; // Size = 0x14
class mDoDvdThd_param_c {
public:
mDoDvdThd_param_c();
void kick();
s32 waitForKick();
mDoDvdThd_command_c* getFirstCommand();
void addition(mDoDvdThd_command_c*);
void cut(mDoDvdThd_command_c*);
void mainLoop();
private:
/* 0x00 */ OSMessageQueue mMessageQueue;
/* 0x20 */ void* mMessageQueueMessages;
/* 0x24 */ node_list_class mNodeList;
/* 0x30 */ OSMutex mMutext;
}; // Size = 0x48
class mDoDvdThd_callback_c : public mDoDvdThd_command_c {
public:
virtual ~mDoDvdThd_callback_c();
mDoDvdThd_callback_c(mDoDvdThd_callback_func, void*);
static mDoDvdThd_callback_c* create(mDoDvdThd_callback_func, void*);
virtual s32 execute();
private:
/* 0x14 */ mDoDvdThd_callback_func mFunction;
/* 0x18 */ void* mData;
/* 0x1C */ void* mResult;
};
class mDoDvdThd_mountArchive_c : public mDoDvdThd_command_c {
public:
virtual ~mDoDvdThd_mountArchive_c();
mDoDvdThd_mountArchive_c(u8);
static mDoDvdThd_mountArchive_c* create(char const*, u8, JKRHeap*);
virtual s32 execute();
JKRMemArchive* getArchive() const { return mArchive; }
JKRHeap* getHeap() const { return mHeap; }
private:
/* 0x14 */ u8 mMountDirection;
/* 0x18 */ s32 mEntryNumber;
/* 0x1C */ JKRMemArchive* mArchive;
/* 0x20 */ JKRHeap* mHeap;
}; // Size = 0x24
class mDoDvdThd_mountAramArchive_c : public mDoDvdThd_command_c {
public:
virtual ~mDoDvdThd_mountAramArchive_c();
virtual s32 execute();
/* 0x14 */ u8 mMountDirection;
/* 0x18 */ s32 mEntryNum;
/* 0x1C */ JKRAramArchive* mArchive;
};
class mDoDvdThd_mountXArchive_c : public mDoDvdThd_command_c {
public:
virtual ~mDoDvdThd_mountXArchive_c();
mDoDvdThd_mountXArchive_c(u8 mountDirection, JKRArchive::EMountMode mountMode);
static mDoDvdThd_mountXArchive_c* create(char const*, u8, JKRArchive::EMountMode,
JKRHeap*);
virtual s32 execute();
JKRArchive* getArchive() const { return mArchive; }
private:
/* 0x14 */ u8 mMountDirection;
/* 0x18 */ s32 mEntryNum;
/* 0x1C */ JKRArchive* mArchive;
/* 0x20 */ JKRArchive::EMountMode mMountMode;
/* 0x24 */ JKRHeap* mHeap;
}; // Size = 0x28
class mDoDvdThd_getResource_c : public mDoDvdThd_command_c {
virtual ~mDoDvdThd_getResource_c();
virtual s32 execute();
/* 0x14 */ void* mResource;
/* 0x18 */ JKRArchive* mArchive;
/* 0x1C */ u16 mResourceId;
};
class mDoDvdThd_toMainRam_c : public mDoDvdThd_command_c {
public:
mDoDvdThd_toMainRam_c(u8);
static mDoDvdThd_toMainRam_c* create(char const*, u8, JKRHeap*);
virtual ~mDoDvdThd_toMainRam_c();
virtual s32 execute();
void* getMemAddress() const { return mData; }
private:
/* 0x14 */ u8 mMountDirection;
/* 0x18 */ s32 mEntryNum;
/* 0x1C */ void* mData;
/* 0x20 */ s32 mDataSize;
/* 0x24 */ JKRHeap* mHeap;
}; // Size = 0x28
struct mDoDvdThdStack {
u8 stack[4096];
} ATTRIBUTE_ALIGN(16);
struct mDoDvdThd {
static s32 main(void*);
static void create(s32);
static void suspend();
static OSThread l_thread;
static mDoDvdThdStack l_threadStack;
static mDoDvdThd_param_c l_param;
static u8 verbose;
static u8 DVDLogoMode;
static bool SyncWidthSound;
static u8 Report_DVDRead;
};
namespace mDoDvdHack {
typedef struct FSTEntry {
/* 0x00 */ uint isDirAndStringOff;
/* 0x04 */ uint parentOrPosition;
/* 0x08 */ uint nextEntryOrLength;
} FSTEntry;
extern OSBootInfo* BootInfo;
extern FSTEntry* FstStart;
extern const char* FstStringStart;
extern u32 MaxEntryNum;
void __DVDFSInit();
const char* EntryToName(s32 entry);
const char* ConvertEntrynumToName(s32 entry);
class Manager {
public:
Manager() { __DVDFSInit(); }
static Manager sManager;
};
}
#endif /* M_DO_M_DO_DVD_THREAD_H */
|