Skip to content

Commit 4311417

Browse files
committed
Add base IOS38 support for vWii
1 parent 16c04f1 commit 4311417

File tree

7 files changed

+181
-14
lines changed

7 files changed

+181
-14
lines changed

data/Changelog.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55

66
[ d2x v11 ]
77

8+
- Improved WiiWare & VC compatibility by using some MEM1 safe functions.
9+
- Improved game compatibility when using base IOS58 by ignoring encrypted
10+
USB drives that are used for Wii U games.
11+
- Added base IOS38 v4380 support for vWii.
12+
- Enabled Korean key patching for vWii.
13+
- Fixed a typo that made the FAT module not reproducible.
14+
- Reduced memory usage for the EHCI module.
815
- Fixed RiiConnect24 compatibility by removing the SDHC module and adding
916
the SDHC functions directly to the cIOS lib.
1017
- Added EmuNAND UStealth support thanks to airline38.

data/ciosmaps-vWii.xml

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,45 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ciosmaps ciosgroupscount="1">
3-
<ciosgroup name="d2x-v${MAJOR_VER}-${MINOR_VER}" version="${IOS_REV}" basescount="3">
3+
<ciosgroup name="d2x-v${MAJOR_VER}-${MINOR_VER}" version="${IOS_REV}" basescount="4">
4+
<base ios="38" version="4380" contentscount="21" modulescount="6">
5+
<content id="0x0" patchscount="7">
6+
<!-- cIOS signature fields -->
7+
<patch offset="0x00" size="4" originalbytes="0x66,0x69,0x72,0x6d" newbytes="0x1e,0xe7,0xc1,0x05"/>
8+
<patch offset="0x04" size="4" originalbytes="0x77,0x61,0x72,0x65" newbytes="0x00,0x00,0x00,0x01"/>
9+
<patch offset="0x08" size="4" originalbytes="0x2e,0x36,0x34,0x2e" newbytes="${HEX_MAJOR_VER}"/>
10+
<patch offset="0x0c" size="4" originalbytes="0x31,0x32,0x30,0x34" newbytes="0x00,0x00,0x00,0x26"/>
11+
<patch offset="0x10" size="16" originalbytes="0x31,0x30,0x31,0x30,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00" newbytes="0x64,0x32,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00"/>
12+
<patch offset="0x20" size="16" originalbytes="0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00" newbytes="${HEX_MINOR_VER}"/>
13+
<patch offset="0x30" size="16" originalbytes="0x61,0x64,0x6D,0x69,0x6E,0x40,0x46,0x57,0x50,0x55,0x42,0x4C,0x49,0x53,0x48,0x00" newbytes="0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00"/>
14+
</content>
15+
<content id="0x1" patchscount="2">
16+
<!-- Disable DI DVD Video commands -->
17+
<patch offset="0x68D" size="1" originalbytes="0x01" newbytes="0x00"/>
18+
<patch offset="0x719" size="1" originalbytes="0x01" newbytes="0x00"/>
19+
</content>
20+
<content id="0x2" />
21+
<content id="0x3" />
22+
<content id="0x4" />
23+
<content id="0x5" />
24+
<content id="0x6" />
25+
<content id="0x7" />
26+
<content id="0x8" />
27+
<content id="0x9" />
28+
<content id="0xa" />
29+
<content id="0xb" />
30+
<content id="0xc" />
31+
<content id="0xd" />
32+
<content id="0xe" patchscount="1">
33+
<!-- Reroute IRQ9 to mload -->
34+
<patch offset="0x26510" size="4" originalbytes="0xFF,0xFF,0x5A,0xF2" newbytes="0x13,0x6D,0x00,0x11"/>
35+
</content>
36+
<content id="0xf" module="MLOAD" tmdmoduleid="-1"/>
37+
<content id="0x10" module="FAT" tmdmoduleid="-1"/>
38+
<content id="0x11" module="EHCI" tmdmoduleid="3"/>
39+
<content id="0x12" module="DIPP" tmdmoduleid="-1"/>
40+
<content id="0x13" module="ES" tmdmoduleid="-1"/>
41+
<content id="0x14" module="FFSP" tmdmoduleid="-1"/>
42+
</base>
443
<base ios="56" version="5918" contentscount="21" modulescount="6">
544
<content id="0x0" patchscount="7">
645
<!-- cIOS signature fields -->

source/dip-plugin/patches.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,22 @@ s32 Patch_DipModule(void)
110110
break;
111111
}
112112

113+
/** 04/03/12 12:00:16 **/
114+
case 0x4F7AE650: { // vIOS: 38v4380
115+
static dipAddrInfo aInfo = {
116+
0x20200068, // init
117+
0x202003B8, // ioctl
118+
0x20200D2C, // cmd
119+
0x20202888, // readHash
120+
0x202008C4, // alloc
121+
0x20200898, // free
122+
0x20203670, // printf
123+
0x2022CDAC // readCtrl
124+
};
125+
__Patch_DipModule(&aInfo);
126+
break;
127+
}
128+
113129
/** 11/24/08 15:39:09 **/
114130
case 0x492ACA9D: // IOS: 60v6174
115131
/** 06/03/09 07:49:09 **/

source/es-plugin/patches.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,20 @@ s32 Patch_EsModule(void)
142142
break;
143143
}
144144

145+
/** 04/03/12 12:05:51 **/
146+
case 0x4F7AE79F: { // vIOS: 38v4380
147+
static esAddrInfo addrInfo = {
148+
0x20100048, // open
149+
0x201000CC, // ioctlv
150+
0x20104600, // launchTitle
151+
0x20109450, // memcpy
152+
0x20109598, // printf
153+
0x20109A40 // snprintf
154+
};
155+
__Patch_EsModule(&addrInfo);
156+
break;
157+
}
158+
145159
/** 04/02/12 14:00:51 **/
146160
case 0x4F79B113: { // vIOS: 56v5918, 57v6175, 58v6432
147161
static esAddrInfo addrInfo = {

source/ffs-plugin/patches.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,17 @@ s32 Patch_FfsModule(void)
141141
break;
142142
}
143143

144+
/** 04/03/12 11:58:08 **/
145+
case 0x4F7AE5D0: { // vIOS: 38v4380
146+
static ffsAddrInfo aInfo = {
147+
0x200021A4, // table
148+
0x20002170, // reentry
149+
0x20006090 // printf
150+
};
151+
__Patch_FfsModule(&aInfo);
152+
break;
153+
}
154+
144155
/** 11/24/08 15:36:10 **/
145156
case 0x492AC9EA: { // IOS: 56v5661, 57v5918, 58v6175, 60v6174, 61v5661, 70v6687, 80v6943
146157
static ffsAddrInfo aInfo = {
@@ -197,6 +208,11 @@ s32 Patch_IopModule(void)
197208
__Patch_IopModule(0xFFFF2E04);
198209
break;
199210

211+
/** 04/03/12 12:00:18 **/
212+
case 0x4F7AE652: // vIOS: 38v4380
213+
__Patch_IopModule(0xFFFF2E24);
214+
break;
215+
200216
/** 11/24/08 15:39:12 **/
201217
/** 03/03/10 10:43:18 **/
202218
case 0x492ACAA0: // IOS: 60v6174, 70v6687

source/mload-module/detect.c

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ s32 Detect_DipModule(void)
6464
ios.dipVersion = 0x4888E14C;
6565
break;
6666

67+
case 0x20207C48: // vIOS: 38v4380
68+
/* DIP: 04/03/12 12:00:16 */
69+
ios.dipVersion = 0x4F7AE650;
70+
break;
71+
6772
case 0x20207EA8: // IOS: 56v5661, 57v5918, 58v6175, 61v5661, 70v6687, 80v6943
6873
/* DIP: 06/03/09 07:49:09 */
6974
ios.dipVersion = 0x4A262AF5;
@@ -105,13 +110,12 @@ s32 Detect_EsModule(void)
105110

106111
case 0x201015E9:
107112
{
108-
#define ES_NUM 2
109-
static moduleId esIds[ES_NUM] = {
113+
static moduleId esIds[2] = {
110114
{0x2010B8D2, "03/03/10 10:40:14", 0x4B8E90EE}, // IOS: 56v5661, 57v5918, 58v6175, 61v5661, 80v6943
111115
{0x2010BB2E, "04/02/12 14:00:51", 0x4F79B113} // vIOS: 56v5918, 57v6175, 58v6432
112116
};
113117

114-
ios.esVersion = __Detect_ModuleVersion(esIds, ES_NUM);
118+
ios.esVersion = __Detect_ModuleVersion(esIds, 2);
115119
if (ios.esVersion == 0)
116120
return DETECT_ERROR;
117121

@@ -123,10 +127,20 @@ s32 Detect_EsModule(void)
123127
ios.esVersion = 0x4B8B882B;
124128
break;
125129

126-
case 0x2010139D: // IOS: 36v3607, 38v4123
127-
/* ES: 03/01/10 03:18:58 */
128-
ios.esVersion = 0x4B8B8682;
130+
case 0x2010139D: // IOS: 36v3607, 38v4123
131+
// vIOS: 38v4380
132+
{
133+
static moduleId esIds[2] = {
134+
{0x2010A3EE, "03/01/10 03:18:58", 0x4B8B3222}, // IOS: 36v3607, 38v4123
135+
{0x2010A64A, "04/03/12 12:05:51", 0x4F7AE79F} // vIOS: 38v4380 (0000000E)
136+
};
137+
138+
ios.esVersion = __Detect_ModuleVersion(esIds, 2);
139+
if (ios.esVersion == 0)
140+
return DETECT_ERROR;
141+
129142
break;
143+
}
130144

131145
default:
132146
/* Unknown version */
@@ -152,6 +166,11 @@ s32 Detect_FfsModule(void)
152166
ios.ffsVersion = 0x49511F3D;
153167
break;
154168

169+
case 0x20001FE1: // vIOS: 38v4380
170+
/* FFS: 04/03/12 11:58:08 */
171+
ios.ffsVersion = 0x4F7AE5D0;
172+
break;
173+
155174
case 0x20006009: // IOS: 56v5661, 57v5918, 58v6175, 60v6174, 61v5661, 70v6687, 80v6943
156175
/* FFS: 11/24/08 15:36:10 */
157176
ios.ffsVersion = 0x492AC9EA;
@@ -185,26 +204,43 @@ s32 Detect_IopModule(void)
185204
break;
186205

187206
case 0xFFFF1D10: // IOS: 36v3607, 38v4123
207+
// vIOS: 38v4380
188208
case 0xFFFF7938: // gecko patched IOS: 36v3607, 38v4123
189-
/* IOSP: 03/01/10 03:13:17 */
190-
ios.iopVersion = 0x4B8B30CD;
191-
ios.syscallBase = 0xFFFF9100;
209+
{
210+
static moduleId iospIds[2] = {
211+
{0xFFFF856B, "03/01/10 03:13:17", 0x4B8B30CD}, // IOS: 36v3607, 38v4123
212+
{0xFFFF83f3, "04/03/12 12:00:18", 0x4F7AE652} // vIOS: 38v4380 (0000000E)
213+
};
214+
215+
ios.iopVersion = __Detect_ModuleVersion(iospIds, 2);
216+
217+
switch (ios.iopVersion) {
218+
case 0x4B8B30CD: // IOS: 36v3607, 38v4123
219+
ios.syscallBase = 0xFFFF9100;
220+
break;
221+
case 0x4F7AE652: // vIOS: 38v4380
222+
ios.syscallBase = 0xFFFF8F80;
223+
break;
224+
default:
225+
/* Unknown version */
226+
return DETECT_ERROR;
227+
}
192228

193229
break;
230+
}
194231

195232
case 0xFFFF1F20: // IOS: 60v6174, 70v6687, 56v5661, 57v5918, 58v6175, 61v5661, 80v6943
196233
// vIOS: 56v5918, 57v6175, 58v6432
197234
case 0xFFFF7B98: // gecko patched IOS: 60v6174, 70v6687
198235
case 0xFFFF7BD0: // gecko patched IOS: 56v5661, 57v5918, 58v6175, 61v5661, 80v6943
199236
{
200-
#define IOSP_NUM 3
201-
static moduleId iospIds[IOSP_NUM] = {
237+
static moduleId iospIds[3] = {
202238
{0xFFFF880B, "03/03/10 10:43:18", 0x4B8E3D46}, // IOS: 56v5661, 57v5918, 58v6175, 61v5661, 80v6943
203239
{0xFFFF8693, "04/02/12 14:03:56", 0x4F79B1CC}, // vIOS: 56v5918, 57v6175, 58v6432
204240
{0xFFFF87D3, "11/24/08 15:39:12", 0x492ACAA0} // IOS: 60v6174, 70v6687
205241
};
206242

207-
ios.iopVersion = __Detect_ModuleVersion(iospIds, IOSP_NUM);
243+
ios.iopVersion = __Detect_ModuleVersion(iospIds, 3);
208244

209245
switch (ios.iopVersion) {
210246
case 0x4B8E3D46: // IOS: 56v5661, 57v5918, 58v6175, 61v5661, 80v6943

source/mload-module/patches.c

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ s32 Patch_DipModule(void)
100100

101101
break;
102102

103+
/** 04/03/12 12:00:16 **/
104+
case 0x4F7AE650: // vIOS: 38v4380
105+
/* Unencrypted read limit */
106+
DCWrite32(0x20206380, 0x7ED40000);
107+
108+
break;
109+
103110
/** 11/24/08 15:39:09 **/
104111
case 0x492ACA9D: // IOS: 60v6174
105112
/** 06/03/09 07:49:09 **/
@@ -242,6 +249,29 @@ s32 Patch_EsModule(void)
242249
break;
243250
}
244251

252+
/** 04/03/12 12:05:51 **/
253+
case 0x4F7AE79F: { // vIOS: 38v4380
254+
static esAddrInfo addrInfo = {
255+
0x13A750DE, // signatureCheck1 (added in d2x v8 r42)
256+
0x13A75266, // signatureCheck2
257+
0x20100CC4, // identifyCheck1
258+
0x20100D3C, // identifyCheck2
259+
0x20104D7C, // openContentPerm1
260+
0x20104DA0, // openContentPerm2
261+
0x0, // openContentPerm3
262+
0x20104E98, // readContentPerm
263+
0x20104EE8, // seekContentPerm
264+
0x20105206, // setUidCheck
265+
0x201026EC, // titleVersionCheck
266+
0x2010789E, // titleDeleteCheck
267+
0x0 // decryptCheck
268+
};
269+
270+
__Patch_EsModule(&addrInfo);
271+
272+
break;
273+
}
274+
245275
/** 04/02/12 14:00:51 **/
246276
case 0x4F79B113: { // vIOS: 56v5918, 57v6175, 58v6432
247277
static esAddrInfo addrInfo = {
@@ -284,12 +314,19 @@ s32 Patch_FfsModule(void)
284314
break;
285315

286316
/** 12/23/09 17:26:21 **/
287-
case 0x49511F3D:
317+
case 0x49511F3D: // IOS: 38v4123
288318
/* Permissions check */
289319
DCWrite8(0x2000347E, 0xE0);
290320

291321
break;
292322

323+
/** 04/03/12 11:58:08 **/
324+
case 0x4F7AE5D0: // vIOS: 38v4380
325+
/* Permissions check */
326+
DCWrite8(0x20003452, 0xE0);
327+
328+
break;
329+
293330
/** 11/24/08 15:36:10 **/
294331
case 0x492AC9EA: // IOS: 56v5661, ....
295332
/** 04/02/12 14:00:54 **/
@@ -321,6 +358,8 @@ s32 Patch_IopModule(void)
321358
case 0x49511FC0: // IOS: ???
322359
case 0x4B8E3D46: // IOS: 56v5661, 57v5918, 58v6175, 61v5661, 80v6943
323360
case 0x4B8B30CD: // IOS: 36v3607, 38v4123
361+
/** 04/03/12 12:00:18 **/
362+
case 0x4F7AE652: // vIOS: 38v4380
324363
/** 04/02/12 14:03:56 **/
325364
case 0x4F79B1CC: // vIOS: 56v5918, 57v6175, 58v6432
326365
/* SWI handler */

0 commit comments

Comments
 (0)