-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbootstrap.patch
More file actions
123 lines (115 loc) · 4.32 KB
/
bootstrap.patch
File metadata and controls
123 lines (115 loc) · 4.32 KB
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
diff --git a/bootstrap/bootstrap.c b/bootstrap/bootstrap.c
index 94e9808..890c134 100644
--- a/bootstrap/bootstrap.c
+++ b/bootstrap/bootstrap.c
@@ -30,6 +30,7 @@
#define TAIHEN_SKPRX_FILE "ur0:tai/taihen.skprx"
#define HENKAKU_SUPRX_FILE "ur0:tai/henkaku.suprx"
#define HENKAKU_SKPRX_FILE "ur0:tai/henkaku.skprx"
+#define GAMESD_SKPRX_FILE "ur0:tai/gamesd.skprx"
#undef LOG
#if RELEASE
@@ -58,6 +59,7 @@ const char taihen_config_header[] =
const char taihen_config[] =
"*KERNEL\n"
"# henkaku.skprx is hard-coded to load and is not listed here\n"
+ GAMESD_SKPRX_FILE "\n"
"*main\n"
"# main is a special titleid for SceShell\n"
HENKAKU_SUPRX_FILE "\n"
@@ -334,6 +336,18 @@ int install_pkg(const char *pkg_url_prefix) {
char file_name[0x400];
char url[0x400];
+ // 0x80af5022 fix by Yoti
+ mkdirs("ux0:app");
+ mkdirs("ux0:appmeta");
+ mkdirs("ux0:bgdl");
+ mkdirs("ux0:cache");
+ mkdirs("ux0:data");
+ mkdirs("ux0:license/app");
+ mkdirs("ux0:patch");
+ mkdirs("ux0:ptmp");
+ mkdirs("ux0:temp");
+ mkdirs("ux0:user/00/savedata");
+
LOG("package url prefix: %x\n", pkg_url_prefix);
// this is to get random directory
@@ -431,12 +445,26 @@ int install_taihen(const char *pkg_url_prefix) {
// create directory structure
mkdirs(pkg_path);
+ // 0x80af5022 fix by Yoti
+ mkdirs("ux0:app");
+ mkdirs("ux0:appmeta");
+ mkdirs("ux0:bgdl");
+ mkdirs("ux0:cache");
+ mkdirs("ux0:data");
+ mkdirs("ux0:license/app");
+ mkdirs("ux0:patch");
+ mkdirs("ux0:ptmp");
+ mkdirs("ux0:temp");
+ mkdirs("ux0:user/00/savedata");
+
sceIoRemove(TAIHEN_SKPRX_FILE);
sceIoRemove(HENKAKU_SKPRX_FILE);
sceIoRemove(HENKAKU_SUPRX_FILE);
+ sceIoRemove(GAMESD_SKPRX_FILE);
GET_FILE("taihen.skprx");
GET_FILE("henkaku.skprx");
GET_FILE("henkaku.suprx");
+ GET_FILE("gamesd.skprx");
if (!exists(TAIHEN_CONFIG_FILE)) {
mkdirs("ux0:tai");
@@ -447,7 +475,7 @@ int install_taihen(const char *pkg_url_prefix) {
write_taihen_config(TAIHEN_RECOVERY_CONFIG_FILE, 1);
}
- if (exists(TAIHEN_SKPRX_FILE) && exists(HENKAKU_SKPRX_FILE) && exists(HENKAKU_SUPRX_FILE)) {
+ if (exists(TAIHEN_SKPRX_FILE) && exists(HENKAKU_SKPRX_FILE) && exists(HENKAKU_SUPRX_FILE) && exists(GAMESD_SKPRX_FILE)) {
return 0;
} else {
return -1;
@@ -590,6 +618,9 @@ int verify_taihen(void) {
crc = crc32_file(HENKAKU_SUPRX_FILE);
DRAWF("henkaku.suprx CRC32: 0x%08X\n", crc);
if (crc != HENKAKU_USER_CRC32) return -1;
+ crc = crc32_file(GAMESD_SKPRX_FILE);
+ DRAWF("gamesd.skprx CRC32: 0x%08X\n", crc);
+ if (crc != 0x029DA7C9) return -1; // hardcoded
}
return 1;
}
@@ -725,6 +756,7 @@ int module_start(SceSize argc, const void *args) {
sceIoRemove("ux0:tai/taihen.skprx");
sceIoRemove(CONFIG_PATH);
sceIoRemove(OLD_CONFIG_PATH);
+ sceIoRemove(GAMESD_SKPRX_FILE);
sceIoRemove(HENKAKU_SUPRX_FILE);
sceIoRemove(HENKAKU_SKPRX_FILE);
sceIoRemove(TAIHEN_SKPRX_FILE);
@@ -740,16 +772,18 @@ int module_start(SceSize argc, const void *args) {
LOG("am still running\n");
- int crc[3] = {0};
+ int crc[4] = {0};
const char *force_reinstall = "(if you want to force reinstall, reboot your Vita and press R1 when asked to)\n";
while (tries-- > 0 && !offline) {
// check if we actually need to install the package
- if (TAIHEN_CRC32 == 0 || (crc[0] = crc32_file(TAIHEN_SKPRX_FILE)) != TAIHEN_CRC32 ||
+ if (TAIHEN_CRC32 == 0 || (crc[0] = crc32_file(TAIHEN_SKPRX_FILE)) != TAIHEN_CRC32 ||
(crc[1] = crc32_file(HENKAKU_SUPRX_FILE)) != HENKAKU_USER_CRC32 ||
- (crc[2] = crc32_file(HENKAKU_SKPRX_FILE)) != HENKAKU_CRC32) {
+ (crc[2] = crc32_file(HENKAKU_SKPRX_FILE)) != HENKAKU_CRC32 ||
+ (crc[3] = crc32_file(GAMESD_SKPRX_FILE)) != 0x029DA7C9) { // hardcoded
DRAWF("taihen.skprx CRC32:%x, latest:%x\n", crc[0], TAIHEN_CRC32);
if (crc[1]) DRAWF("henkaku.suprx CRC32:%x, latest:%x\n", crc[1], HENKAKU_USER_CRC32);
if (crc[2]) DRAWF("henkaku.skprx CRC32:%x, latest:%x\n", crc[2], HENKAKU_CRC32);
+ if (crc[3]) DRAWF("gamesd.skprx CRC32:%x, latest:%x\n", crc[3], 0x029DA7C9); // hardcoded
ret = install_taihen(PKG_URL_PREFIX);
} else {
DRAWF("taiHEN already installed and is the latest version\n");
@@ -801,6 +835,7 @@ int module_start(SceSize argc, const void *args) {
sceIoRemove(TAIHEN_SKPRX_FILE);
sceIoRemove(HENKAKU_SKPRX_FILE);
sceIoRemove(HENKAKU_SUPRX_FILE);
+ sceIoRemove(GAMESD_SKPRX_FILE);
} else {
break;
}