Compare commits
2288 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
691a453d77 | ||
|
|
88246f475c | ||
|
|
269d4496b2 | ||
|
|
bb4c7a390b | ||
|
|
b846628362 | ||
|
|
26fb201518 | ||
|
|
01ce7cef14 | ||
|
|
3f3aaa01fa | ||
|
|
bf8de39e69 | ||
|
|
6bb4253df5 | ||
|
|
cfd7121574 | ||
|
|
972681c57e | ||
|
|
0a11cbc2d6 | ||
|
|
32f487abfb | ||
|
|
7d61cab01c | ||
|
|
14ed4e4057 | ||
|
|
e8ba632606 | ||
|
|
dbcb1e1564 | ||
|
|
15381409dc | ||
|
|
10ad6934ac | ||
|
|
03e66efd85 | ||
|
|
7040e8976d | ||
|
|
296a6af058 | ||
|
|
2c332d1cf8 | ||
|
|
243d7dc777 | ||
|
|
355010ad84 | ||
|
|
ef0c15b764 | ||
|
|
0dc308d92a | ||
|
|
eb5542963f | ||
|
|
18673d96cb | ||
|
|
36f6bdc3a0 | ||
|
|
d6fff49845 | ||
|
|
d05e8fb23a | ||
|
|
0767d9f8da | ||
|
|
21f3d29df7 | ||
|
|
4f16106702 | ||
|
|
19be54ff95 | ||
|
|
ed80d6ec8c | ||
|
|
57b6c71c1c | ||
|
|
0a11d341b7 | ||
|
|
8010290472 | ||
|
|
fbc526d163 | ||
|
|
5bb790e4a7 | ||
|
|
0a6219e6e0 | ||
|
|
037b04ac60 | ||
|
|
9e563d590b | ||
|
|
bdcf02a3ef | ||
|
|
88ac85c423 | ||
|
|
2e1a93f1d1 | ||
|
|
997e4dd665 | ||
|
|
aa2d03d8e1 | ||
|
|
274c1deae4 | ||
|
|
d5bbf32a26 | ||
|
|
97a251b4b2 | ||
|
|
9d30917f4e | ||
|
|
c67c29ebd5 | ||
|
|
88dd414721 | ||
|
|
0f6f13a1ac | ||
|
|
b24784f5c1 | ||
|
|
3b3082cf58 | ||
|
|
38a2fdcd76 | ||
|
|
0ca2f962de | ||
|
|
03a98635d8 | ||
|
|
461e2ced6f | ||
|
|
b2d2f65b87 | ||
|
|
b2b0c50802 | ||
|
|
1118421fa6 | ||
|
|
b1b3914ccf | ||
|
|
9be8b32311 | ||
|
|
57c8bc432d | ||
|
|
58776f5ba8 | ||
|
|
affeeb2724 | ||
|
|
822875ecf5 | ||
|
|
e3a65b1405 | ||
|
|
20a7fa1588 | ||
|
|
315b7bdf22 | ||
|
|
ec988c5a99 | ||
|
|
21b883a75c | ||
|
|
e93d71d932 | ||
|
|
dc6a0d7562 | ||
|
|
1d2be0a2eb | ||
|
|
96937a611d | ||
|
|
dc7862882f | ||
|
|
6faa3534bf | ||
|
|
afb1d68d06 | ||
|
|
911e431d65 | ||
|
|
ee91063bbb | ||
|
|
cbdf33260e | ||
|
|
c62a7381f8 | ||
|
|
b4498734e4 | ||
|
|
4407237f5b | ||
|
|
15956fcf9a | ||
|
|
6a368d3d1a | ||
|
|
8e4be9aef9 | ||
|
|
0f8b7be2d2 | ||
|
|
a1e137cc1c | ||
|
|
504472af4e | ||
|
|
19b253fd17 | ||
|
|
01f5c89902 | ||
|
|
44ccbc2a7b | ||
|
|
6e4664ee05 | ||
|
|
85f9355184 | ||
|
|
60b5bd73b7 | ||
|
|
53e7aa0a20 | ||
|
|
561a16a348 | ||
|
|
1fce7b08b1 | ||
|
|
c216f92a91 | ||
|
|
2f930c2d5f | ||
|
|
256eb92f4c | ||
|
|
ec1d9c4c49 | ||
|
|
3356eddcba | ||
|
|
f67d1b7026 | ||
|
|
e64fef109c | ||
|
|
1b2cf173b3 | ||
|
|
2fb258ca7e | ||
|
|
962cf97150 | ||
|
|
b3bd443636 | ||
|
|
4b9e7c7d27 | ||
|
|
46612156f4 | ||
|
|
279bb863df | ||
|
|
252ea97ca5 | ||
|
|
f89cfe41da | ||
|
|
e3e3679cfe | ||
|
|
75a2052144 | ||
|
|
5666c59657 | ||
|
|
c99ce36d7d | ||
|
|
d84dcb653d | ||
|
|
aff0da9427 | ||
|
|
8d9174b227 | ||
|
|
c8404e8452 | ||
|
|
79e4c82d7e | ||
|
|
3afd9a737c | ||
|
|
a7564cf303 | ||
|
|
5362ee9450 | ||
|
|
021d4c88fa | ||
|
|
deb4aece9a | ||
|
|
a6729171d3 | ||
|
|
c9015581ca | ||
|
|
35c816d62f | ||
|
|
18031ae107 | ||
|
|
c7e4f963e8 | ||
|
|
97875c7d2f | ||
|
|
0da3b2b273 | ||
|
|
3cbd99a709 | ||
|
|
6ce2076d92 | ||
|
|
cee1ecd06f | ||
|
|
a739e3fb20 | ||
|
|
953246a175 | ||
|
|
d8faa37de0 | ||
|
|
64c7c6b2a5 | ||
|
|
1c974a387c | ||
|
|
b5ab491603 | ||
|
|
8b32b9eadf | ||
|
|
ce149f996c | ||
|
|
0ec54ed492 | ||
|
|
72de4d85f3 | ||
|
|
d0673aa2fb | ||
|
|
f7fcb54622 | ||
|
|
ec643789ab | ||
|
|
70caadafd5 | ||
|
|
7667104961 | ||
|
|
0c791f2279 | ||
|
|
f71943c03a | ||
|
|
536e3e99a8 | ||
|
|
abff428212 | ||
|
|
1541985222 | ||
|
|
61929d6e21 | ||
|
|
f0ef9fb918 | ||
|
|
7621bd4e13 | ||
|
|
d20bceff75 | ||
|
|
1961cb1034 | ||
|
|
9daec3a66a | ||
|
|
e79417c37c | ||
|
|
b371487525 | ||
|
|
5c97469348 | ||
|
|
99a38dce32 | ||
|
|
f28a410ba0 | ||
|
|
5fc1981061 | ||
|
|
1bd0094bee | ||
|
|
870b45f208 | ||
|
|
9fbbb9fadb | ||
|
|
dec06ff649 | ||
|
|
b898241112 | ||
|
|
10255f7f51 | ||
|
|
cb5a706659 | ||
|
|
4d86863f2c | ||
|
|
79a3f442d6 | ||
|
|
7485a1968a | ||
|
|
3be005b638 | ||
|
|
d60b1abed0 | ||
|
|
1867c31f63 | ||
|
|
82757cd1b4 | ||
|
|
f5e98de1a3 | ||
|
|
0880cebc4d | ||
|
|
1f03b11dbc | ||
|
|
b925344c3b | ||
|
|
42cf3f50d7 | ||
|
|
70aae4e27a | ||
|
|
87165e0f08 | ||
|
|
e20c2450ce | ||
|
|
968ce12492 | ||
|
|
00ab210e66 | ||
|
|
4cb6c63516 | ||
|
|
1963ae7ec0 | ||
|
|
889f144b27 | ||
|
|
4408ad6a47 | ||
|
|
4ed665bcd3 | ||
|
|
df3d62df84 | ||
|
|
0977ee72ca | ||
|
|
2cdfde6637 | ||
|
|
6fc24d8883 | ||
|
|
4e9bc617bb | ||
|
|
679fec2ddc | ||
|
|
8f85cc17dc | ||
|
|
e40eece74e | ||
|
|
2341f18edd | ||
|
|
c9c41e0e8d | ||
|
|
c59388caf1 | ||
|
|
c878123274 | ||
|
|
1687bf2e07 | ||
|
|
cf99f54a34 | ||
|
|
83c1c175ba | ||
|
|
fc060d3777 | ||
|
|
eb50e99748 | ||
|
|
287f4e6fa1 | ||
|
|
cbf3ba9b75 | ||
|
|
95a6b0828f | ||
|
|
1545fa9d44 | ||
|
|
71add1add8 | ||
|
|
a96786fd2c | ||
|
|
74e4e70053 | ||
|
|
26b6216fa0 | ||
|
|
fe5c850e69 | ||
|
|
2b825d56dc | ||
|
|
13b17a5848 | ||
|
|
621520c30b | ||
|
|
846cc0b47a | ||
|
|
e82ad1cdc5 | ||
|
|
b40da8f445 | ||
|
|
a9c6476416 | ||
|
|
c1d93a9495 | ||
|
|
201b17f100 | ||
|
|
c0e3cee657 | ||
|
|
26d8db74f8 | ||
|
|
ee2e9d50fd | ||
|
|
fd1a39996e | ||
|
|
8eb65ab401 | ||
|
|
bcda834980 | ||
|
|
408b81b881 | ||
|
|
d854b94382 | ||
|
|
63440cab18 | ||
|
|
4fa585a23f | ||
|
|
e521ae805d | ||
|
|
6950989552 | ||
|
|
ffbdf29c10 | ||
|
|
135d42ffee | ||
|
|
1306d03136 | ||
|
|
97aa209c43 | ||
|
|
4ce2a6deb3 | ||
|
|
e45d8cd7d8 | ||
|
|
79211e1159 | ||
|
|
ca8e8ce487 | ||
|
|
b30311be65 | ||
|
|
6694d8c2d9 | ||
|
|
658389fc60 | ||
|
|
d6477cf024 | ||
|
|
400f5142ee | ||
|
|
8bf8df43e2 | ||
|
|
a28c60970f | ||
|
|
b5f72b9f20 | ||
|
|
8d10584a51 | ||
|
|
366c265ab2 | ||
|
|
42964992d1 | ||
|
|
4a82d9bf28 | ||
|
|
4190281b2f | ||
|
|
48830d190f | ||
|
|
3389aaefc3 | ||
|
|
f8f987aa8d | ||
|
|
e87e146112 | ||
|
|
5751bcc117 | ||
|
|
eb1e979257 | ||
|
|
204539664b | ||
|
|
f5c6736431 | ||
|
|
d00ebaa28a | ||
|
|
402e4d1adb | ||
|
|
ed7c0605f9 | ||
|
|
c848a830ee | ||
|
|
dbe8add4f4 | ||
|
|
e4e278bb3d | ||
|
|
3761f80592 | ||
|
|
9878c18e47 | ||
|
|
3bb94aa146 | ||
|
|
83c04fa5d7 | ||
|
|
dc4ee1a5bc | ||
|
|
5191f0e305 | ||
|
|
170034aed3 | ||
|
|
21236020cb | ||
|
|
f06de12bea | ||
|
|
8314d015f3 | ||
|
|
49f07b065a | ||
|
|
9e104bb83f | ||
|
|
33457d61da | ||
|
|
b5816b4a91 | ||
|
|
af7233d84c | ||
|
|
8ac8abf295 | ||
|
|
b26ebc12e1 | ||
|
|
b4122da6ad | ||
|
|
6a2ee02409 | ||
|
|
094cede39e | ||
|
|
9cfd259c5c | ||
|
|
4f7f37fae6 | ||
|
|
d2f81d2ca2 | ||
|
|
b8072b1398 | ||
|
|
a6e3a93c07 | ||
|
|
1e643f7ab0 | ||
|
|
4aa18b06e8 | ||
|
|
f051f707ed | ||
|
|
1c9d6b4d90 | ||
|
|
b21f8a5043 | ||
|
|
e53b9cc518 | ||
|
|
99e4920d9d | ||
|
|
428b5b266c | ||
|
|
2b48743265 | ||
|
|
a0769844f4 | ||
|
|
e0fe29743d | ||
|
|
9ace85a4aa | ||
|
|
e53b171693 | ||
|
|
8b1835368a | ||
|
|
cf7ae775e8 | ||
|
|
07202f7c88 | ||
|
|
97157577ab | ||
|
|
6d65aa7e72 | ||
|
|
601c4516bf | ||
|
|
192ea926f6 | ||
|
|
f1d320b6b6 | ||
|
|
6b3a3ecb44 | ||
|
|
dcfd01cf59 | ||
|
|
4b09b5d5ce | ||
|
|
f6833a794a | ||
|
|
b7895ff2a7 | ||
|
|
f7898f3519 | ||
|
|
96f3c0c387 | ||
|
|
f4e763ce40 | ||
|
|
a05e87f78a | ||
|
|
4809ced64d | ||
|
|
222300d03c | ||
|
|
b918d4b2aa | ||
|
|
53c684a17a | ||
|
|
4ffdf8d525 | ||
|
|
7480b6bb80 | ||
|
|
3e8688e19e | ||
|
|
3b05315616 | ||
|
|
2b81ed7315 | ||
|
|
ff7e52a1c1 | ||
|
|
e391f593de | ||
|
|
f600dff961 | ||
|
|
8104beb2e0 | ||
|
|
4cd56f8423 | ||
|
|
198bdacaf4 | ||
|
|
35ab0939fa | ||
|
|
4958d01153 | ||
|
|
b625fd324e | ||
|
|
5e342d8c52 | ||
|
|
d233b482fb | ||
|
|
3e2f776184 | ||
|
|
7a9018dc7a | ||
|
|
f768e3c8f9 | ||
|
|
d42f2e4d1b | ||
|
|
24111d46a1 | ||
|
|
f2a6a4a6e6 | ||
|
|
6633af769e | ||
|
|
131c8609c8 | ||
|
|
30e70e20d8 | ||
|
|
a26e8ac54f | ||
|
|
8bfda27e0e | ||
|
|
0c9cb830f7 | ||
|
|
ee1b638dde | ||
|
|
9826358533 | ||
|
|
113ab8439d | ||
|
|
60c888126b | ||
|
|
d7b14f48d2 | ||
|
|
1085ccbe60 | ||
|
|
8b61537aa3 | ||
|
|
968f50bc07 | ||
|
|
0bf2ade76f | ||
|
|
35a6705d55 | ||
|
|
b8471bcd4e | ||
|
|
f7e83a72a9 | ||
|
|
f6b847177a | ||
|
|
a6d40e85f1 | ||
|
|
6a81206373 | ||
|
|
4be5733c8e | ||
|
|
8dcb07152e | ||
|
|
3b5dff0f83 | ||
|
|
1ca373cd71 | ||
|
|
4ff026224e | ||
|
|
2c39efea4c | ||
|
|
16cd1141d1 | ||
|
|
4b71e3a87e | ||
|
|
d090a7886d | ||
|
|
9a6cca7499 | ||
|
|
1ec2c0c2cb | ||
|
|
569e1bc650 | ||
|
|
652e9bf9e8 | ||
|
|
ca2cc5e179 | ||
|
|
17c8c390fc | ||
|
|
d8ae1d873c | ||
|
|
63e3c02688 | ||
|
|
14a415c4b2 | ||
|
|
734122f20a | ||
|
|
7fb902d8fb | ||
|
|
be8473cf65 | ||
|
|
6df26d674c | ||
|
|
1a6e003a5d | ||
|
|
0acd79c8c2 | ||
|
|
8a4bf6a0a8 | ||
|
|
af259eabda | ||
|
|
16e2f46aed | ||
|
|
bcc7eed037 | ||
|
|
abd7ad2720 | ||
|
|
58c3c8c19a | ||
|
|
f62330c73b | ||
|
|
2de85c633a | ||
|
|
121c981bb4 | ||
|
|
15396dbbc2 | ||
|
|
9ca1d3a7f7 | ||
|
|
32803d9920 | ||
|
|
5ef93778f6 | ||
|
|
7548940efa | ||
|
|
bf55776241 | ||
|
|
73167448cc | ||
|
|
c45088d1cd | ||
|
|
7336dc2b7a | ||
|
|
d2f48d5e36 | ||
|
|
422e9434d8 | ||
|
|
2b93bbd9ee | ||
|
|
021b29d2db | ||
|
|
6da28f4a27 | ||
|
|
bba99d49da | ||
|
|
e760a9d4b0 | ||
|
|
ee91f3fde0 | ||
|
|
f72475872a | ||
|
|
199a9aec8b | ||
|
|
1b83f5169a | ||
|
|
7bb77f44af | ||
|
|
801ce24622 | ||
|
|
1d778b2dc8 | ||
|
|
7c9608021d | ||
|
|
b8fbd0baff | ||
|
|
525da05629 | ||
|
|
2e9db4d113 | ||
|
|
4f1a4e7499 | ||
|
|
972283032a | ||
|
|
57f935391d | ||
|
|
4804e1e1e0 | ||
|
|
4ae74b9b4e | ||
|
|
726d7b6e4d | ||
|
|
390bdc7b6b | ||
|
|
2d8acf9c64 | ||
|
|
9743f63f0d | ||
|
|
ccd2798ae2 | ||
|
|
f3dbab4876 | ||
|
|
41a53075e5 | ||
|
|
ab8de72db0 | ||
|
|
331fa1d00d | ||
|
|
fd745ab2d3 | ||
|
|
972b396f61 | ||
|
|
3c8e7de915 | ||
|
|
1b164613a6 | ||
|
|
3d4ab95ab2 | ||
|
|
152def19c0 | ||
|
|
63974d9bce | ||
|
|
2b483866c7 | ||
|
|
7e1da15f6e | ||
|
|
0a1465f198 | ||
|
|
748893fe77 | ||
|
|
1ca64cf2a1 | ||
|
|
aac8af8bf5 | ||
|
|
5da6b60008 | ||
|
|
e400e2afc7 | ||
|
|
56c6e4244a | ||
|
|
c8ebd7eea0 | ||
|
|
550f5690bf | ||
|
|
28f9b534b6 | ||
|
|
3fd59b61bc | ||
|
|
f86059de70 | ||
|
|
a03ee7b148 | ||
|
|
8b2ed36698 | ||
|
|
1852fe8612 | ||
|
|
b60054dba1 | ||
|
|
c7f37f81ee | ||
|
|
19a279ce45 | ||
|
|
783f1077be | ||
|
|
b0debd72a7 | ||
|
|
24d545701c | ||
|
|
aae565629e | ||
|
|
bee629b8ad | ||
|
|
5cb237d030 | ||
|
|
a4e09fc6c4 | ||
|
|
73d9d5ff47 | ||
|
|
08cfee54fa | ||
|
|
7b279ab863 | ||
|
|
6a85f7225d | ||
|
|
f469dfbeb3 | ||
|
|
cc11d452e5 | ||
|
|
3bce008170 | ||
|
|
3383509da6 | ||
|
|
281dcf232a | ||
|
|
71a2fe1bb6 | ||
|
|
4a216dc928 | ||
|
|
18099e19b1 | ||
|
|
a0a45853dd | ||
|
|
fe9a4cd2fc | ||
|
|
88a66c89e2 | ||
|
|
93128b6b17 | ||
|
|
db2de8ef31 | ||
|
|
05832cec73 | ||
|
|
632c8984c8 | ||
|
|
694e3b579e | ||
|
|
20eba0dc98 | ||
|
|
730ef6d6db | ||
|
|
7cb24713ab | ||
|
|
a685842804 | ||
|
|
ad6dd60474 | ||
|
|
05af215191 | ||
|
|
e06b73aafa | ||
|
|
fd7e4dfb97 | ||
|
|
77d7e6b121 | ||
|
|
ee9585dd57 | ||
|
|
8ba513fefb | ||
|
|
ef4d7dc024 | ||
|
|
87512439a3 | ||
|
|
51aeb280f1 | ||
|
|
078a42f80c | ||
|
|
06dcc6bc17 | ||
|
|
2bc6dec126 | ||
|
|
5382011b0d | ||
|
|
8ba1cdeef2 | ||
|
|
45830472c1 | ||
|
|
7f1a7cfd2d | ||
|
|
24eef96b15 | ||
|
|
1ea49bdae3 | ||
|
|
c98f4f1ff6 | ||
|
|
dd56f8449f | ||
|
|
835aa6b9db | ||
|
|
69f9fb8713 | ||
|
|
a843cc0ee7 | ||
|
|
b96b162b0b | ||
|
|
512fc8f9b1 | ||
|
|
b32c9bf17c | ||
|
|
5f6942aec8 | ||
|
|
a2c89a8f3f | ||
|
|
898fe61034 | ||
|
|
7bcd5c6e3b | ||
|
|
123ed80dc7 | ||
|
|
5dfe355df1 | ||
|
|
c77b76fbd2 | ||
|
|
1525c66de7 | ||
|
|
f72b21d665 | ||
|
|
74da8a4885 | ||
|
|
cb7c6a5d8a | ||
|
|
fc97237447 | ||
|
|
a203ac3f80 | ||
|
|
2ef41f0027 | ||
|
|
ee3a7e7740 | ||
|
|
3c595994df | ||
|
|
b4c908ba9f | ||
|
|
c572024a5e | ||
|
|
71a38ae74d | ||
|
|
f74527d93c | ||
|
|
72f83ea43e | ||
|
|
43ef260c66 | ||
|
|
f2c553be1a | ||
|
|
304b9bfbd1 | ||
|
|
1d8744164e | ||
|
|
d587054f96 | ||
|
|
29facf6141 | ||
|
|
b8c3128d16 | ||
|
|
b62aa044e4 | ||
|
|
affdea9244 | ||
|
|
fdab964e3d | ||
|
|
15c752f52d | ||
|
|
28862f69f8 | ||
|
|
a20f278ede | ||
|
|
7c58a21c4c | ||
|
|
5bd02f128d | ||
|
|
d9350d24a9 | ||
|
|
68f42a14c8 | ||
|
|
4d1c4f1677 | ||
|
|
708f5bf1fb | ||
|
|
485304bd17 | ||
|
|
3d31837ca1 | ||
|
|
35552bac2c | ||
|
|
323e893433 | ||
|
|
258cfb62a2 | ||
|
|
42caa4ffd1 | ||
|
|
b74b309a77 | ||
|
|
09f3b29a98 | ||
|
|
6c4280d27a | ||
|
|
6ff58fa4b3 | ||
|
|
e5bf06254a | ||
|
|
f4e499fed9 | ||
|
|
4a2daa4810 | ||
|
|
21fac86080 | ||
|
|
bd3ab76fd2 | ||
|
|
e1b5d81d65 | ||
|
|
4b4f05b4a6 | ||
|
|
ddf2f5f3c5 | ||
|
|
d2e530c2aa | ||
|
|
166318ba77 | ||
|
|
ac04e02a08 | ||
|
|
1c71d12d9d | ||
|
|
37738699f2 | ||
|
|
e973ef7533 | ||
|
|
2ee2a4f1ac | ||
|
|
2a2bffeb35 | ||
|
|
d04046ecaf | ||
|
|
f24171dc41 | ||
|
|
5b02c77400 | ||
|
|
2e7214b6fa | ||
|
|
d52179c708 | ||
|
|
388f9e6455 | ||
|
|
c547c7f0e7 | ||
|
|
4138abbefa | ||
|
|
1275eb0bf3 | ||
|
|
5ac9e45d86 | ||
|
|
feba788bc6 | ||
|
|
f4d10a4481 | ||
|
|
ff310a0647 | ||
|
|
85505db9b7 | ||
|
|
48b4dd48a4 | ||
|
|
8d46d901d9 | ||
|
|
1930880270 | ||
|
|
fa0df994ba | ||
|
|
909a1767a6 | ||
|
|
dbe59fd041 | ||
|
|
9b65daf439 | ||
|
|
4acdc899f5 | ||
|
|
76957e502d | ||
|
|
909397233c | ||
|
|
211a828730 | ||
|
|
28ceedb533 | ||
|
|
f551ca4461 | ||
|
|
2cf5c65bc5 | ||
|
|
47d0d5c6ab | ||
|
|
fd0e3e2160 | ||
|
|
074364753f | ||
|
|
b7d99b732a | ||
|
|
1cccb6efc4 | ||
|
|
f4cd4bcf03 | ||
|
|
e36fe62fca | ||
|
|
870b589379 | ||
|
|
acdce230da | ||
|
|
34dc062c11 | ||
|
|
ab2568ddfb | ||
|
|
4dc728824f | ||
|
|
cc6b8ea4d1 | ||
|
|
49af4fae32 | ||
|
|
e8ffbe630f | ||
|
|
ce95af89ef | ||
|
|
546e2de300 | ||
|
|
11b120b667 | ||
|
|
4da1fe545c | ||
|
|
1983f86875 | ||
|
|
d50c7c5c79 | ||
|
|
496f93ccdb | ||
|
|
25ba61adae | ||
|
|
79c9bed528 | ||
|
|
657470830f | ||
|
|
cd62d83586 | ||
|
|
bb11c57e7d | ||
|
|
bb1cdd8c87 | ||
|
|
ff9b9fc5ff | ||
|
|
99b5458539 | ||
|
|
fac502aaa3 | ||
|
|
47f2e93a42 | ||
|
|
56ec55f3c4 | ||
|
|
1a262c1063 | ||
|
|
79201428b0 | ||
|
|
a75c16226e | ||
|
|
e5d30217d3 | ||
|
|
f77a4fbf98 | ||
|
|
717265a54c | ||
|
|
3ace441b1c | ||
|
|
2effe130e3 | ||
|
|
2cedf2bcf0 | ||
|
|
68e29b56b6 | ||
|
|
8e688de570 | ||
|
|
b917ea283e | ||
|
|
3c85e37667 | ||
|
|
48e8562033 | ||
|
|
f07bd0e337 | ||
|
|
4a35904d73 | ||
|
|
b8c2782ede | ||
|
|
3ec9a9e59f | ||
|
|
595c6dbe8f | ||
|
|
b5f2698bf0 | ||
|
|
f058536b59 | ||
|
|
8e5c0a9663 | ||
|
|
1b63002f91 | ||
|
|
90fd771fce | ||
|
|
c3fa3bd5d6 | ||
|
|
cda15f08d8 | ||
|
|
e5b7eb89e5 | ||
|
|
e1bd6fb874 | ||
|
|
920b017677 | ||
|
|
f9d68db3f6 | ||
|
|
89f1c0ce33 | ||
|
|
e435f56367 | ||
|
|
73798cb812 | ||
|
|
d3014f6ed9 | ||
|
|
35fffade4e | ||
|
|
2c6b7ce6c2 | ||
|
|
7658c07492 | ||
|
|
51b5c3d87d | ||
|
|
874208b44a | ||
|
|
44c5cb9789 | ||
|
|
420bc7df9b | ||
|
|
ee3e0fa537 | ||
|
|
501280b6e5 | ||
|
|
ee5a095c1a | ||
|
|
3726def6ec | ||
|
|
29358dc593 | ||
|
|
a82914d58e | ||
|
|
0508b5d31b | ||
|
|
235c070a37 | ||
|
|
82f757459e | ||
|
|
b2b47da8c1 | ||
|
|
bc364029b2 | ||
|
|
ac9832c5ce | ||
|
|
b65707efd9 | ||
|
|
98ca5e2927 | ||
|
|
91bbdf2baf | ||
|
|
3fd4002bc9 | ||
|
|
5d462c626c | ||
|
|
8cd81b3092 | ||
|
|
5c4fbf5c67 | ||
|
|
3afd723b92 | ||
|
|
e1f3bb10a5 | ||
|
|
bea550ebce | ||
|
|
85f533e6c4 | ||
|
|
c9f8252577 | ||
|
|
325802e29d | ||
|
|
4c3c910774 | ||
|
|
b88e09de5b | ||
|
|
b143f1e05f | ||
|
|
3289b45408 | ||
|
|
91fa0d651f | ||
|
|
9bc2c0c0c5 | ||
|
|
96c3dfee14 | ||
|
|
51084c0837 | ||
|
|
0993ae0685 | ||
|
|
e4b30f4022 | ||
|
|
f6f43300e0 | ||
|
|
1ffe08672d | ||
|
|
f866f37cdc | ||
|
|
008bfc27f3 | ||
|
|
7352d87b20 | ||
|
|
9ddb4194b3 | ||
|
|
3f17a34b67 | ||
|
|
5de853b662 | ||
|
|
36a3909a24 | ||
|
|
8922bbd108 | ||
|
|
b6cb561c47 | ||
|
|
2db6760461 | ||
|
|
bb7f320f7f | ||
|
|
94a170c437 | ||
|
|
7cf0432569 | ||
|
|
39b22cee8c | ||
|
|
3fb3beeaff | ||
|
|
4bb9ef061a | ||
|
|
f70ee67753 | ||
|
|
787964f7e7 | ||
|
|
b1f38be3ae | ||
|
|
9dc3e025fc | ||
|
|
4ac94e9179 | ||
|
|
1448068b69 | ||
|
|
0af44d2875 | ||
|
|
a4d376cc0f | ||
|
|
840ab0785c | ||
|
|
583899ede3 | ||
|
|
2ad9927a88 | ||
|
|
893b046111 | ||
|
|
3a01fd1ebc | ||
|
|
1b9acc4a6a | ||
|
|
cbecda2a27 | ||
|
|
5ecc80a5f6 | ||
|
|
695b82b945 | ||
|
|
fd9b986938 | ||
|
|
9231646f33 | ||
|
|
418de7b0dc | ||
|
|
46935fea80 | ||
|
|
11d5353827 | ||
|
|
240e6227e9 | ||
|
|
1d4d637818 | ||
|
|
23eed522d3 | ||
|
|
c622539b95 | ||
|
|
d87a9f011c | ||
|
|
28aab09b5d | ||
|
|
3917ecad46 | ||
|
|
ab96255a5d | ||
|
|
185baa7c4d | ||
|
|
eecf59dd00 | ||
|
|
afe7e41de8 | ||
|
|
632a75eee7 | ||
|
|
7aa3120f60 | ||
|
|
81db43932d | ||
|
|
51311a7332 | ||
|
|
8759cb4da3 | ||
|
|
fb6e85b291 | ||
|
|
3cf793f87e | ||
|
|
3265927ed7 | ||
|
|
0c82709af4 | ||
|
|
058f223b97 | ||
|
|
43ad4eb794 | ||
|
|
dea1235e12 | ||
|
|
266001ded4 | ||
|
|
ea6000b372 | ||
|
|
4fca870f2f | ||
|
|
26df56cd87 | ||
|
|
5b8a20dbf7 | ||
|
|
94f9cc1626 | ||
|
|
36eb78a3ce | ||
|
|
1c5b58ce66 | ||
|
|
0bd14b7114 | ||
|
|
75e6999668 | ||
|
|
5fa59ec888 | ||
|
|
fae2daf77c | ||
|
|
8d507aa5a1 | ||
|
|
a0cc22302c | ||
|
|
01a7606f95 | ||
|
|
9c4c058307 | ||
|
|
9beb05da50 | ||
|
|
2ca6772475 | ||
|
|
0d3aa13f70 | ||
|
|
863515a3b5 | ||
|
|
fe035736ca | ||
|
|
cfddb75398 | ||
|
|
04f325cf5a | ||
|
|
b35380a942 | ||
|
|
93be2ffcba | ||
|
|
9f79710cb7 | ||
|
|
ef1763334b | ||
|
|
d9e9fbe3c2 | ||
|
|
ff022115ca | ||
|
|
3d2eb8e903 | ||
|
|
65b42497d7 | ||
|
|
46bd03c06d | ||
|
|
9482fafabd | ||
|
|
762db93f4a | ||
|
|
5c3cd7d610 | ||
|
|
48a38847c2 | ||
|
|
9382ff0939 | ||
|
|
f71ad5ac2c | ||
|
|
fef8a4918e | ||
|
|
72afe34cf9 | ||
|
|
51dd668c7c | ||
|
|
c01753370a | ||
|
|
33434e21ef | ||
|
|
18698bf1d3 | ||
|
|
57867d6ced | ||
|
|
35c1959131 | ||
|
|
a4e3eae4b6 | ||
|
|
84d8634938 | ||
|
|
095fc6b996 | ||
|
|
bc767742f7 | ||
|
|
e2e5a2ccc2 | ||
|
|
a8d4b10b17 | ||
|
|
3c8d8161cc | ||
|
|
4a7ce9dd75 | ||
|
|
ca9327a120 | ||
|
|
f37eda6b86 | ||
|
|
c72bdec328 | ||
|
|
4a767c9082 | ||
|
|
c8f71007ec | ||
|
|
4ff10f3ce0 | ||
|
|
d52655eaf1 | ||
|
|
1b429918de | ||
|
|
b29dc76b20 | ||
|
|
4db9d95958 | ||
|
|
2ec4ed3568 | ||
|
|
4e226b523e | ||
|
|
9fa6d12586 | ||
|
|
804aa0e55d | ||
|
|
9d57783aa8 | ||
|
|
a510a1138d | ||
|
|
4e667bc7c1 | ||
|
|
84b1be1d58 | ||
|
|
1b2203d102 | ||
|
|
4f12449acf | ||
|
|
f4fd4cbbb2 | ||
|
|
be98aaa185 | ||
|
|
7f4c6ae9e7 | ||
|
|
9503aae522 | ||
|
|
78da7422ae | ||
|
|
f52232f0f2 | ||
|
|
16c9c53a4a | ||
|
|
d0d8914f28 | ||
|
|
7400a8ff68 | ||
|
|
a2eb93fde8 | ||
|
|
1a0696f8a3 | ||
|
|
faad5609b9 | ||
|
|
ad551c3b55 | ||
|
|
c2408395d8 | ||
|
|
084dd3232e | ||
|
|
8d6e076b77 | ||
|
|
9bd6916646 | ||
|
|
f168542931 | ||
|
|
852c039f70 | ||
|
|
bffd553b80 | ||
|
|
2d9f5b6942 | ||
|
|
aa2d1e15ab | ||
|
|
0cac10a2f0 | ||
|
|
499f29d2f0 | ||
|
|
9efca346d9 | ||
|
|
9fde97cfdd | ||
|
|
94eb2195d3 | ||
|
|
b08ccd7341 | ||
|
|
0a53c74aad | ||
|
|
70e67da1e1 | ||
|
|
e2b17086d4 | ||
|
|
3fe7700e5c | ||
|
|
828b170aac | ||
|
|
1084817d84 | ||
|
|
e16b87c843 | ||
|
|
2a5d1572e1 | ||
|
|
f7f284e5c0 | ||
|
|
bf92daf055 | ||
|
|
5cb9fa510e | ||
|
|
46c460e235 | ||
|
|
29f1eb8070 | ||
|
|
9229696308 | ||
|
|
1473adf5c4 | ||
|
|
a5447dd72d | ||
|
|
ecbd986529 | ||
|
|
73a6aeed15 | ||
|
|
f223c27bb0 | ||
|
|
1bc271bab1 | ||
|
|
3324dd52ef | ||
|
|
a6218ed814 | ||
|
|
28a6bb713c | ||
|
|
fdc7ef62f7 | ||
|
|
f197b88dd7 | ||
|
|
f594de0081 | ||
|
|
9003ad6e49 | ||
|
|
3295132946 | ||
|
|
22ae311393 | ||
|
|
033ae1dbe0 | ||
|
|
2ed7f84523 | ||
|
|
a680b35e09 | ||
|
|
d236b88571 | ||
|
|
9b8ffdf093 | ||
|
|
45a8c5a54a | ||
|
|
f68d33b70a | ||
|
|
0698338312 | ||
|
|
23d3f786e3 | ||
|
|
d9c9083574 | ||
|
|
b966345b25 | ||
|
|
c129256dd0 | ||
|
|
43f5a0ef45 | ||
|
|
73c1615cda | ||
|
|
c827c0d599 | ||
|
|
d165ec7162 | ||
|
|
79e4c0ef6e | ||
|
|
37d13f92a8 | ||
|
|
1047ceab98 | ||
|
|
597bdded69 | ||
|
|
47512cc8a2 | ||
|
|
6780b096ca | ||
|
|
da4107996a | ||
|
|
42f1a3bf60 | ||
|
|
282f8f6612 | ||
|
|
c75e61a40b | ||
|
|
293c213bf2 | ||
|
|
ff87ff2592 | ||
|
|
f82954e98b | ||
|
|
6c145d76c7 | ||
|
|
bb6671a94a | ||
|
|
95d38a1a94 | ||
|
|
2fb363dcf0 | ||
|
|
34098f7215 | ||
|
|
0202a95832 | ||
|
|
e1835d9ba2 | ||
|
|
068c25ce66 | ||
|
|
8e401f4daa | ||
|
|
8a4019151b | ||
|
|
ccba70abfe | ||
|
|
985e97cf78 | ||
|
|
36754e2c38 | ||
|
|
1e0124fb67 | ||
|
|
b922dff414 | ||
|
|
1fb9407d5d | ||
|
|
91e0bbd9d7 | ||
|
|
4fe42eb997 | ||
|
|
99e0448f30 | ||
|
|
a0b08d0540 | ||
|
|
bb3a8a888f | ||
|
|
aa50944568 | ||
|
|
e0dbfc69a8 | ||
|
|
b6b114ec40 | ||
|
|
bf546d5fb3 | ||
|
|
864b6085a8 | ||
|
|
fa64bf4951 | ||
|
|
6bf283ec2e | ||
|
|
e3eadcd2e3 | ||
|
|
8c4c1db506 | ||
|
|
27843314a4 | ||
|
|
1fdd83628e | ||
|
|
3d6baf96a3 | ||
|
|
ab703646d5 | ||
|
|
435d2fb0c3 | ||
|
|
63629b22a1 | ||
|
|
b7ff9e8fcc | ||
|
|
ad664daea5 | ||
|
|
97ab282351 | ||
|
|
81846fa5c3 | ||
|
|
dc6abf9f68 | ||
|
|
87bdc46beb | ||
|
|
f391354415 | ||
|
|
9ddcbe9dc3 | ||
|
|
e11fad6598 | ||
|
|
cbcd1d87fb | ||
|
|
f66b41c027 | ||
|
|
71e0102f7a | ||
|
|
fe0bd03feb | ||
|
|
80e49696ea | ||
|
|
f215da3b37 | ||
|
|
a2496e5462 | ||
|
|
de9a3c6dfc | ||
|
|
79ae47f028 | ||
|
|
19d8a0fc2b | ||
|
|
8052dd6249 | ||
|
|
9baf096a10 | ||
|
|
9598da0a0b | ||
|
|
c8e5461e3f | ||
|
|
53a47e07fd | ||
|
|
311d2678c7 | ||
|
|
81f91803ec | ||
|
|
3a1ccdd919 | ||
|
|
17b6bcfd37 | ||
|
|
0e289461bb | ||
|
|
8e75a4169d | ||
|
|
85cd2c97a0 | ||
|
|
3e6031b8f4 | ||
|
|
9ddc6e596b | ||
|
|
b56f9966b7 | ||
|
|
3bc7c52ade | ||
|
|
e819f3dbce | ||
|
|
4d78b834cb | ||
|
|
f670949ca9 | ||
|
|
72f1e85aba | ||
|
|
491ba8fdcf | ||
|
|
67b91cfa13 | ||
|
|
7361fa25a9 | ||
|
|
793bde256c | ||
|
|
234c83522a | ||
|
|
0bfbc6e6eb | ||
|
|
2dfe5b192e | ||
|
|
aca2992c68 | ||
|
|
39f5933600 | ||
|
|
52c89a76b2 | ||
|
|
faaef5eff5 | ||
|
|
a9cc74da34 | ||
|
|
93e855a293 | ||
|
|
a61fdc8d65 | ||
|
|
9622912059 | ||
|
|
59ea93e9cd | ||
|
|
57ac153671 | ||
|
|
71d266f867 | ||
|
|
970b85bf9a | ||
|
|
7bc0250cea | ||
|
|
524da78b0e | ||
|
|
7458879555 | ||
|
|
1d40a08ef9 | ||
|
|
be07035954 | ||
|
|
b7c4dae899 | ||
|
|
94d0d06660 | ||
|
|
2e4e59dbda | ||
|
|
0fb528836c | ||
|
|
4a01ae8b9d | ||
|
|
5bec9395b1 | ||
|
|
3bc2d79384 | ||
|
|
6ac1ff6f24 | ||
|
|
93e0c9194d | ||
|
|
6ad0f0e7f2 | ||
|
|
4f50f57bb7 | ||
|
|
97cba5e881 | ||
|
|
6eb77e69c4 | ||
|
|
90d754f920 | ||
|
|
b39b6f0d5b | ||
|
|
dcfb3bc9b5 | ||
|
|
b4d003b4b9 | ||
|
|
bc1d3ccc91 | ||
|
|
152a945561 | ||
|
|
3da0cda4ae | ||
|
|
d77fe98203 | ||
|
|
94ec9ae41b | ||
|
|
332dbdd497 | ||
|
|
98cc051387 | ||
|
|
f2944d36ba | ||
|
|
46d79387e8 | ||
|
|
0bb2c0a04f | ||
|
|
eca2b453ae | ||
|
|
e14dc18bd3 | ||
|
|
c7743c6098 | ||
|
|
d81a3bdc36 | ||
|
|
32e5283ac2 | ||
|
|
1d9a4f47fd | ||
|
|
3f5f9b60ea | ||
|
|
08e1b4d116 | ||
|
|
683580861f | ||
|
|
7d30460214 | ||
|
|
d7ba3291ed | ||
|
|
c07f54f370 | ||
|
|
6fe8ada37a | ||
|
|
94b10b5779 | ||
|
|
9b677c81a5 | ||
|
|
a25be61e94 | ||
|
|
116e00c21c | ||
|
|
122b0775f1 | ||
|
|
11f840b1e3 | ||
|
|
36039ddbb7 | ||
|
|
5347f0d583 | ||
|
|
408dde533f | ||
|
|
b15b46a68e | ||
|
|
ba6f298618 | ||
|
|
c6424921a6 | ||
|
|
8547802904 | ||
|
|
353e27b9e2 | ||
|
|
4a38a36036 | ||
|
|
200d2df785 | ||
|
|
73552c86c3 | ||
|
|
dd80e1f463 | ||
|
|
15c929a0e4 | ||
|
|
aa4c79cd9c | ||
|
|
6719abec65 | ||
|
|
79b9e07ee9 | ||
|
|
eca5ac01b8 | ||
|
|
50ea19e7a2 | ||
|
|
823a1f3ea3 | ||
|
|
b73895df0a | ||
|
|
5062329979 | ||
|
|
065485b971 | ||
|
|
6193283f03 | ||
|
|
eb48e7cc59 | ||
|
|
d98490d339 | ||
|
|
b2e86f5a1b | ||
|
|
0e9974e7b3 | ||
|
|
496be5ecd4 | ||
|
|
50a91b1d6e | ||
|
|
f872be67eb | ||
|
|
e04679f05a | ||
|
|
8d1ada2a1b | ||
|
|
a50d6a2696 | ||
|
|
76d72fa946 | ||
|
|
8b19fdfd51 | ||
|
|
612d846132 | ||
|
|
816ce605d3 | ||
|
|
07c95662b1 | ||
|
|
2b930d21fd | ||
|
|
0b52596087 | ||
|
|
e9134d8044 | ||
|
|
33d6dfb6b3 | ||
|
|
6096fa0e45 | ||
|
|
058f265bd6 | ||
|
|
bd4c608b08 | ||
|
|
7fc1e86bf5 | ||
|
|
87ec045a98 | ||
|
|
7502e2174f | ||
|
|
0545eb18c0 | ||
|
|
0c161a4c1b | ||
|
|
3d518759da | ||
|
|
0af2758fde | ||
|
|
9bb5af9823 | ||
|
|
82eab9c8d0 | ||
|
|
3cca3801ca | ||
|
|
03408f404a | ||
|
|
92e7a3ca08 | ||
|
|
b27c7552d2 | ||
|
|
426257d4ae | ||
|
|
7d34d599bb | ||
|
|
067fe2d10f | ||
|
|
4759c2f92c | ||
|
|
ca26d8ce27 | ||
|
|
6c52cc3e26 | ||
|
|
e42d3a3abf | ||
|
|
884844bc23 | ||
|
|
f556db8c89 | ||
|
|
96d15b28c6 | ||
|
|
37f7afb426 | ||
|
|
7dd4e76c1d | ||
|
|
daa0deb1bf | ||
|
|
43bd733f0a | ||
|
|
70367e3e7c | ||
|
|
45f8343659 | ||
|
|
e8dfe04701 | ||
|
|
95d5375158 | ||
|
|
b735bc53c4 | ||
|
|
b4856a2d07 | ||
|
|
ed4491a24f | ||
|
|
93004be59e | ||
|
|
237b513408 | ||
|
|
4c5e980e07 | ||
|
|
08d9de6907 | ||
|
|
6eee3f5fe7 | ||
|
|
4eb3109c93 | ||
|
|
f7fb689412 | ||
|
|
2181adb82b | ||
|
|
40c6733de3 | ||
|
|
c703be86fc | ||
|
|
f3732c72dc | ||
|
|
c7026b9094 | ||
|
|
f9403201f0 | ||
|
|
fd34e2342a | ||
|
|
0e5ade727c | ||
|
|
c4065c976c | ||
|
|
392c9c3a0b | ||
|
|
4f33afe0ee | ||
|
|
dc1404061c | ||
|
|
8da705d40b | ||
|
|
4f34a38a97 | ||
|
|
799f94958c | ||
|
|
c17b6d0d44 | ||
|
|
5a8aebf74d | ||
|
|
191414c832 | ||
|
|
a429c61f33 | ||
|
|
ad1158b30a | ||
|
|
ba8c77fec6 | ||
|
|
f427c3d7a5 | ||
|
|
05a24b5726 | ||
|
|
8306464758 | ||
|
|
4a30437e80 | ||
|
|
80e1847534 | ||
|
|
8ccac1d18a | ||
|
|
c3656aae30 | ||
|
|
5fa534fb71 | ||
|
|
f3629f863d | ||
|
|
d675aa3414 | ||
|
|
981166783b | ||
|
|
c0f7cd95b9 | ||
|
|
40400aee1f | ||
|
|
9572fb2ce3 | ||
|
|
eb75d54b2b | ||
|
|
081bd0aefc | ||
|
|
fa4a96d021 | ||
|
|
3c5efefb15 | ||
|
|
3e4c962bbb | ||
|
|
34fb48b412 | ||
|
|
40980904f7 | ||
|
|
5055bdb23e | ||
|
|
d2a888d9e8 | ||
|
|
bb3f7c8ab9 | ||
|
|
efae01c165 | ||
|
|
9f9593e05f | ||
|
|
80b115ef57 | ||
|
|
560c340c96 | ||
|
|
aae3c789f2 | ||
|
|
c568788609 | ||
|
|
28ea0b12a8 | ||
|
|
b857153964 | ||
|
|
d9c3908caf | ||
|
|
b99bcbc619 | ||
|
|
905ce0eeea | ||
|
|
0534ddd37a | ||
|
|
30b3825f5c | ||
|
|
05a3e95834 | ||
|
|
fba8fb539d | ||
|
|
772e1f1c4f | ||
|
|
154422562a | ||
|
|
25b0baae59 | ||
|
|
92521eed2a | ||
|
|
cbc73f4407 | ||
|
|
30d6b359f9 | ||
|
|
2c496e94d5 | ||
|
|
20b5268e90 | ||
|
|
11f70759ce | ||
|
|
b3e6571586 | ||
|
|
5b98426171 | ||
|
|
c91386b0fa | ||
|
|
19e6d2e1c0 | ||
|
|
ea0011d572 | ||
|
|
364b04b68a | ||
|
|
8c93eb5712 | ||
|
|
c6d1579265 | ||
|
|
34bb800440 | ||
|
|
ef3da6cb51 | ||
|
|
3bcc4adb5c | ||
|
|
3c78bc4dbf | ||
|
|
fdd7b1db15 | ||
|
|
50b8189e7f | ||
|
|
3284656aad | ||
|
|
1d65352167 | ||
|
|
d8e94996ad | ||
|
|
5dae43b192 | ||
|
|
4b6b06fcaa | ||
|
|
919b8124dc | ||
|
|
e330b6187f | ||
|
|
1224ed8abe | ||
|
|
e9e949ec36 | ||
|
|
8cfffc69d5 | ||
|
|
cb6af379d8 | ||
|
|
d9e6771e63 | ||
|
|
f7d3d50f33 | ||
|
|
9dc7a4dc18 | ||
|
|
1de607c183 | ||
|
|
23f5d77f37 | ||
|
|
5961151a92 | ||
|
|
323858cf96 | ||
|
|
5f857cb079 | ||
|
|
62de3322ff | ||
|
|
1309e93e26 | ||
|
|
c6a736a6f6 | ||
|
|
30e39e60f7 | ||
|
|
108b997ef2 | ||
|
|
877b2cf790 | ||
|
|
5e4307046a | ||
|
|
2355047715 | ||
|
|
57222e8301 | ||
|
|
797c04d19f | ||
|
|
9accbcf8e1 | ||
|
|
86eea62cd8 | ||
|
|
00b093ec62 | ||
|
|
b2b1129cc0 | ||
|
|
d9db723bc8 | ||
|
|
08cb370a45 | ||
|
|
d262ff92cc | ||
|
|
e1adbb6dba | ||
|
|
e25a4ca8d7 | ||
|
|
059c706f19 | ||
|
|
484f132651 | ||
|
|
d5a4c17ee7 | ||
|
|
7d6b16d7fb | ||
|
|
2faf3d33b5 | ||
|
|
bb4ade30e4 | ||
|
|
981bb1f15d | ||
|
|
ad0d2faa6c | ||
|
|
507ab46709 | ||
|
|
7820e5b759 | ||
|
|
7c703903ea | ||
|
|
e7dee2a9fc | ||
|
|
b2e522c0a0 | ||
|
|
875b62f06a | ||
|
|
32fb22e361 | ||
|
|
b3bfd6c4c9 | ||
|
|
866771fdae | ||
|
|
308ddecc9c | ||
|
|
24d41ce55e | ||
|
|
bce7133128 | ||
|
|
3982afdd6b | ||
|
|
6ee305464a | ||
|
|
6ecf04c3b7 | ||
|
|
471bc7cc92 | ||
|
|
9df7f0aada | ||
|
|
3a91a6b786 | ||
|
|
7806766a59 | ||
|
|
11d4e74620 | ||
|
|
9068e2071c | ||
|
|
769a57526c | ||
|
|
0751db5d12 | ||
|
|
d1fbd64235 | ||
|
|
da59334c5e | ||
|
|
f3fa680d5d | ||
|
|
5b1060b30e | ||
|
|
d5458960d5 | ||
|
|
4d5cde3f7b | ||
|
|
8528248d2b | ||
|
|
814c9d1cfb | ||
|
|
9d7b548ce0 | ||
|
|
d779eea009 | ||
|
|
3038612774 | ||
|
|
59be817bb8 | ||
|
|
b965e3f335 | ||
|
|
43c0e39c34 | ||
|
|
0d8bde6079 | ||
|
|
38f942adf5 | ||
|
|
145ee8fcc8 | ||
|
|
48772307bf | ||
|
|
2619ccad0c | ||
|
|
6d5d97cfcd | ||
|
|
846f610fff | ||
|
|
2e8f06ef44 | ||
|
|
5fbd728962 | ||
|
|
11ec6a6912 | ||
|
|
b89f0e45ec | ||
|
|
18d998034d | ||
|
|
27994bb306 | ||
|
|
3e2ec256ab | ||
|
|
bf5bbfbcef | ||
|
|
d10621e832 | ||
|
|
d3b697fd1d | ||
|
|
daa7f5db79 | ||
|
|
4adc0e4096 | ||
|
|
8e3c34ea89 | ||
|
|
a85e20bcea | ||
|
|
879f8a5147 | ||
|
|
f78653d815 | ||
|
|
3c7c1fbd8a | ||
|
|
8efdd04fcd | ||
|
|
623b5f4eb9 | ||
|
|
af352e4f7f | ||
|
|
2866cb5fe6 | ||
|
|
b5becba8ff | ||
|
|
36c47a0014 | ||
|
|
0b0fdc5c58 | ||
|
|
5a15d62b8b | ||
|
|
d0404f3cc9 | ||
|
|
2ae298de24 | ||
|
|
a2d2b1b346 | ||
|
|
06e4b94674 | ||
|
|
f1a9dd8a98 | ||
|
|
0a18c63f24 | ||
|
|
f9a199557c | ||
|
|
0fdbdb1f4d | ||
|
|
e734b23f11 | ||
|
|
de1e6c9705 | ||
|
|
71b220a4e9 | ||
|
|
5448332009 | ||
|
|
d3bafc5b3b | ||
|
|
2c9e1a814c | ||
|
|
df012e6e21 | ||
|
|
2420b26981 | ||
|
|
c1d68d7f0d | ||
|
|
7cead4b620 | ||
|
|
27202b2fab | ||
|
|
1556a92a38 | ||
|
|
206b1a1b57 | ||
|
|
a26e157579 | ||
|
|
9578622abf | ||
|
|
d4f99ddb4d | ||
|
|
0105455086 | ||
|
|
28717bfd27 | ||
|
|
71fd69eb5a | ||
|
|
9d7b52e2d4 | ||
|
|
255e46e6d2 | ||
|
|
7472bc1c7f | ||
|
|
3c7ece2f8b | ||
|
|
a7e89c6dbb | ||
|
|
b0cae74bb9 | ||
|
|
889ea5e5aa | ||
|
|
7e6ff1f327 | ||
|
|
ea49c2ccd1 | ||
|
|
d484872a73 | ||
|
|
6ee525201c | ||
|
|
5ac7ae7edb | ||
|
|
0c590eb768 | ||
|
|
bd40d4f237 | ||
|
|
788436b4a3 | ||
|
|
2bb77237bc | ||
|
|
33827fe3a3 | ||
|
|
48b0b2fc46 | ||
|
|
4f29eedfe9 | ||
|
|
66372e2b2e | ||
|
|
2bae1ad116 | ||
|
|
bbdc643b6d | ||
|
|
a66fcde0ee | ||
|
|
7835486a4d | ||
|
|
90367aea0d | ||
|
|
16c638756c | ||
|
|
b08a97d883 | ||
|
|
746dbfe018 | ||
|
|
733f2b3cdd | ||
|
|
ad64cb5212 | ||
|
|
b1a9e8d0df | ||
|
|
4f9838df3c | ||
|
|
f4ca2c02a7 | ||
|
|
e1391d4162 | ||
|
|
8d9c51f204 | ||
|
|
c10ba67973 | ||
|
|
55610694c8 | ||
|
|
8764d94fd9 | ||
|
|
5228768841 | ||
|
|
9c68bea16c | ||
|
|
5484740cab | ||
|
|
421324b498 | ||
|
|
37e065fa2d | ||
|
|
b758e3fc55 | ||
|
|
393596ef9a | ||
|
|
02d4c97c6d | ||
|
|
2c5ef434f0 | ||
|
|
122f3e4403 | ||
|
|
ea3ebbaa7d | ||
|
|
1636668762 | ||
|
|
c6b9a0c4bf | ||
|
|
93a218abeb | ||
|
|
d7a06057eb | ||
|
|
8cb77ac136 | ||
|
|
4059dc6187 | ||
|
|
15773e4755 | ||
|
|
4f455dacf4 | ||
|
|
0b22af1206 | ||
|
|
ae2fa2fa60 | ||
|
|
6abd756e0c | ||
|
|
535e49a38d | ||
|
|
fbb5730369 | ||
|
|
e5d62025d3 | ||
|
|
89c6fc6437 | ||
|
|
799c158b86 | ||
|
|
8d16d2152b | ||
|
|
635ae4e3da | ||
|
|
59140d8dfa | ||
|
|
2cb8aadafc | ||
|
|
aa0826bb70 | ||
|
|
8bd2a9a23b | ||
|
|
2f959785e1 | ||
|
|
88a86a3363 | ||
|
|
0c7827104f | ||
|
|
c8ed190e5c | ||
|
|
f4dcd1db9b | ||
|
|
bd341d5c00 | ||
|
|
add18d868f | ||
|
|
609a302e16 | ||
|
|
e07011be32 | ||
|
|
bb223eb5ae | ||
|
|
73d904036d | ||
|
|
542833866e | ||
|
|
89c484414b | ||
|
|
fe2dd671fb | ||
|
|
8abee1bdaa | ||
|
|
78a730ddf6 | ||
|
|
a750e55f75 | ||
|
|
c62c4846fc | ||
|
|
8db5b01507 | ||
|
|
a6e405c988 | ||
|
|
6613fda4b1 | ||
|
|
a18a6e87df | ||
|
|
93d83c5bb9 | ||
|
|
6ee8720028 | ||
|
|
600d68bd1a | ||
|
|
0c3a294cbe | ||
|
|
25218795b4 | ||
|
|
a65ec67128 | ||
|
|
5d753f2384 | ||
|
|
1f2de35f94 | ||
|
|
5c140b4f35 | ||
|
|
362ee3cdb0 | ||
|
|
215f1bc8ee | ||
|
|
4d72c2b37a | ||
|
|
dc4dbe29ae | ||
|
|
72dd25a99e | ||
|
|
39d041466d | ||
|
|
442ebff829 | ||
|
|
7e169bc7df | ||
|
|
00f4e5158f | ||
|
|
0c688189f6 | ||
|
|
7cee36544c | ||
|
|
f9c1d5fc1b | ||
|
|
d95e20952c | ||
|
|
32a90334bb | ||
|
|
f534d3498e | ||
|
|
3ea9f444db | ||
|
|
5672c935ed | ||
|
|
4cc2b5c38a | ||
|
|
00e3d874e3 | ||
|
|
803e91a8c4 | ||
|
|
227a1d938d | ||
|
|
fc7f06dc78 | ||
|
|
6777dd9b38 | ||
|
|
4db212ea7b | ||
|
|
8177a27db9 | ||
|
|
27ff119ba6 | ||
|
|
c20774ff5d | ||
|
|
a9f5b7728b | ||
|
|
08ad48fbf3 | ||
|
|
2d0c881ffe | ||
|
|
c916a7db88 | ||
|
|
a5da286351 | ||
|
|
20a48c3a26 | ||
|
|
5bba0f47ff | ||
|
|
bfc987abcd | ||
|
|
85bf7c86e0 | ||
|
|
2225b86eea | ||
|
|
d09be18359 | ||
|
|
09ab3efddd | ||
|
|
382a0192f9 | ||
|
|
e3b968fa80 | ||
|
|
6f85b11fcc | ||
|
|
e561919a52 | ||
|
|
b0a66a63ba | ||
|
|
0d840e199d | ||
|
|
3a2bceef8d | ||
|
|
e871a754a8 | ||
|
|
6333327b81 | ||
|
|
18ca8aaf5b | ||
|
|
67c0f4527e | ||
|
|
e5c5101e8a | ||
|
|
934ff7bbde | ||
|
|
014f08f6b4 | ||
|
|
6ba2090c01 | ||
|
|
61fcf5e0f4 | ||
|
|
9217e4c5f9 | ||
|
|
3ccbb34c62 | ||
|
|
9baa4a17ed | ||
|
|
6bbece39bc | ||
|
|
729447eab0 | ||
|
|
1e7f41ea9f | ||
|
|
d0d4888184 | ||
|
|
804e5d49bb | ||
|
|
6d1d226842 | ||
|
|
06416aeded | ||
|
|
4fbae9e5a4 | ||
|
|
c87be7cd69 | ||
|
|
e62754ed56 | ||
|
|
53d7281e66 | ||
|
|
731a2c11a4 | ||
|
|
ec4d078d6d | ||
|
|
f9b48f06a3 | ||
|
|
d986ffa153 | ||
|
|
2357bc70a7 | ||
|
|
e86e1588e3 | ||
|
|
4be88c7180 | ||
|
|
8e8daa64ba | ||
|
|
1671c04e24 | ||
|
|
d3d6c552b7 | ||
|
|
8d9336f561 | ||
|
|
169ec9c12e | ||
|
|
60b831f369 | ||
|
|
4191dcee75 | ||
|
|
44725c8910 | ||
|
|
cead8a36ea | ||
|
|
7b6050a0cb | ||
|
|
491383c637 | ||
|
|
d7a3645f7f | ||
|
|
241b8f4627 | ||
|
|
3f7238cb10 | ||
|
|
1e8a6358ad | ||
|
|
c412d996fd | ||
|
|
f2086fe054 | ||
|
|
3f9d6574fb | ||
|
|
e996acff66 | ||
|
|
e274d3ef37 | ||
|
|
8663eb1a6e | ||
|
|
938da08e14 | ||
|
|
0468bd9483 | ||
|
|
c077c75b8d | ||
|
|
24f7977fa6 | ||
|
|
6699fda8c9 | ||
|
|
06e4158b93 | ||
|
|
b82d8aaba9 | ||
|
|
6829572556 | ||
|
|
11d8021435 | ||
|
|
493b074a9e | ||
|
|
befd912a88 | ||
|
|
c96ae0148e | ||
|
|
63a9c856fc | ||
|
|
31fde233e1 | ||
|
|
f9bf8923b1 | ||
|
|
ee40dcd76f | ||
|
|
c60ee15449 | ||
|
|
876d94c338 | ||
|
|
7c37b7497b | ||
|
|
dfcba5e6d4 | ||
|
|
a0cf3bbed8 | ||
|
|
1c503d59b5 | ||
|
|
0bf7df0426 | ||
|
|
2c46ec9638 | ||
|
|
ef0c8e0aac | ||
|
|
1a5801ee0f | ||
|
|
aa289410bb | ||
|
|
b7a370b156 | ||
|
|
87a1aa17a7 | ||
|
|
2fde907c5e | ||
|
|
3caa7166f2 | ||
|
|
af5d88d4e4 | ||
|
|
cd080e2552 | ||
|
|
68c530c4a4 | ||
|
|
aad02cd751 | ||
|
|
9de7b01ee6 | ||
|
|
65d499adb3 | ||
|
|
e5402bd8b8 | ||
|
|
5ae9bd5fe5 | ||
|
|
0dcb496522 | ||
|
|
c8f2d17d02 | ||
|
|
a4daa0761a | ||
|
|
8bd79e8299 | ||
|
|
4f8ab5c599 | ||
|
|
8cf30176cb | ||
|
|
e5e605a362 | ||
|
|
1021b4a455 | ||
|
|
919c3b2a65 | ||
|
|
0986b48a55 | ||
|
|
4c4f037361 | ||
|
|
e7e5ef4e5d | ||
|
|
df3c8f4c94 | ||
|
|
89a83b0e5a | ||
|
|
7bdd4bb2d1 | ||
|
|
f29ab6d0f3 | ||
|
|
dd10547ac2 | ||
|
|
452c61db7a | ||
|
|
00e22c7fd0 | ||
|
|
837b30d075 | ||
|
|
50e307b4b7 | ||
|
|
4c328b6c50 | ||
|
|
4387da1ecc | ||
|
|
6dd366cb22 | ||
|
|
40b838c896 | ||
|
|
d6502c174a | ||
|
|
f38965d0bd | ||
|
|
c2cb94062a | ||
|
|
cfa050cc8f | ||
|
|
bbcb3757bd | ||
|
|
a33ace8996 | ||
|
|
79d96bbdfd | ||
|
|
4dac80df75 | ||
|
|
cb532e3fb3 | ||
|
|
766097d0b7 | ||
|
|
5f5a8567ce | ||
|
|
7dbe61c94c | ||
|
|
422dce6974 | ||
|
|
1d429261e9 | ||
|
|
6f25e92892 | ||
|
|
6cc29185d2 | ||
|
|
13a1566b4e | ||
|
|
bbb658a7e5 | ||
|
|
ad812c8125 | ||
|
|
a64fdce505 | ||
|
|
7e950c3bcc | ||
|
|
d0d7772f98 | ||
|
|
674175e1c6 | ||
|
|
eab2d05680 | ||
|
|
56d7473451 | ||
|
|
bfd4d41834 | ||
|
|
defee07625 | ||
|
|
2c3111f9c9 | ||
|
|
ca2c171482 | ||
|
|
cfcb1cd3a1 | ||
|
|
bb6cc6532b | ||
|
|
03a425a579 | ||
|
|
41f5b39f6b | ||
|
|
b5dd621250 | ||
|
|
27cde7da7a | ||
|
|
377b8dae9f | ||
|
|
78828427a4 | ||
|
|
fe28dac9d3 | ||
|
|
a85102c97c | ||
|
|
9b11f1cb19 | ||
|
|
cf6b9de370 | ||
|
|
80c380e61e | ||
|
|
967fa456ba | ||
|
|
6ae6c80c25 | ||
|
|
142df74694 | ||
|
|
00db1dc286 | ||
|
|
1456246f60 | ||
|
|
7581306109 | ||
|
|
a4ee4d20ad | ||
|
|
625ac5b357 | ||
|
|
3f75a92fd2 | ||
|
|
b5e91ff9a4 | ||
|
|
db47a0c041 | ||
|
|
5e7b33cabd | ||
|
|
3cc79f4e11 | ||
|
|
7c36a827da | ||
|
|
ea90325535 | ||
|
|
72377c2345 | ||
|
|
cccef3b85c | ||
|
|
e10c6a3217 | ||
|
|
4ef7b83e34 | ||
|
|
4ca53e2ef1 | ||
|
|
d9da531b41 | ||
|
|
93fb060fac | ||
|
|
fe0d41623c | ||
|
|
4ea6ce3156 | ||
|
|
520b5f6c59 | ||
|
|
505324f625 | ||
|
|
9319463a6e | ||
|
|
31c4c33042 | ||
|
|
55a8154691 | ||
|
|
453c05cf7c | ||
|
|
4c5c78858c | ||
|
|
967613a261 | ||
|
|
348345340d | ||
|
|
38159bdf9a | ||
|
|
e58948a42b | ||
|
|
9c53c0c0cc | ||
|
|
7c5dc61795 | ||
|
|
6034beb084 | ||
|
|
0177b612f4 | ||
|
|
a9afbd2458 | ||
|
|
8c3dae846e | ||
|
|
dcc93ce60e | ||
|
|
7fef83885f | ||
|
|
3207c38a44 | ||
|
|
5952ebab54 | ||
|
|
ad41d010d3 | ||
|
|
21db90bae9 | ||
|
|
cf4f74c8f9 | ||
|
|
bf5a649928 | ||
|
|
c5fa4660c8 | ||
|
|
0d4a0348b5 | ||
|
|
51858e732a | ||
|
|
edcfbf4254 | ||
|
|
d984621150 | ||
|
|
4b8ebfa7c3 | ||
|
|
bc44e02aed | ||
|
|
85e8506fa8 | ||
|
|
5633444d5e | ||
|
|
99106076e6 | ||
|
|
0a194cb6a6 | ||
|
|
f4a8124dc3 | ||
|
|
9ea1a2a941 | ||
|
|
bfa84e27c1 | ||
|
|
14683405be | ||
|
|
ccbab35deb | ||
|
|
2dfa1c96d1 | ||
|
|
d44b91826d | ||
|
|
3a8f9114fc | ||
|
|
9858d6fc95 | ||
|
|
f6645387b0 | ||
|
|
df963967f5 | ||
|
|
8313669716 | ||
|
|
13c825a8bb | ||
|
|
30485f1df9 | ||
|
|
7945a921ca | ||
|
|
b09adb6a34 | ||
|
|
c3875796df | ||
|
|
a1d4caa7b4 | ||
|
|
9f972831cc | ||
|
|
f50bfaf7d7 | ||
|
|
bfd04cfe92 | ||
|
|
cb74bc6bb8 | ||
|
|
be4ca7eee5 | ||
|
|
7b24b43477 | ||
|
|
253afc90a4 | ||
|
|
a09c08994f | ||
|
|
13ded6bd1c | ||
|
|
4ba6d8b24c | ||
|
|
cb88fdfd62 | ||
|
|
d69fc060f4 | ||
|
|
e04fcfff6b | ||
|
|
79c52e2b91 | ||
|
|
4ac8f2745b | ||
|
|
6004b7479e | ||
|
|
ed86c44a49 | ||
|
|
5c9d0f05b1 | ||
|
|
87f7a6ebdc | ||
|
|
664e5e6b52 | ||
|
|
9691286d73 | ||
|
|
81895c8019 | ||
|
|
1a396235cd | ||
|
|
732a6159f7 | ||
|
|
a3389e25c9 | ||
|
|
908de31a0e | ||
|
|
4e5f033e41 | ||
|
|
ae90a9d7a6 | ||
|
|
a67d4064f0 | ||
|
|
017d473b99 | ||
|
|
a1512cf30f | ||
|
|
d0659377e8 | ||
|
|
ac07971211 | ||
|
|
b03a778611 | ||
|
|
67891954ec | ||
|
|
1e5fcff242 | ||
|
|
88294116b8 | ||
|
|
fe62ab9aed | ||
|
|
5868e0769a | ||
|
|
3cb60b324b | ||
|
|
03e176d7f1 | ||
|
|
92816be055 | ||
|
|
9eb0b84ed1 | ||
|
|
6b41a7e2e1 | ||
|
|
aed472775c | ||
|
|
a8ca92bc1e | ||
|
|
c878e96398 | ||
|
|
e5045556bf | ||
|
|
5bedcd305d | ||
|
|
c7ffcad74e | ||
|
|
2f1f56307d | ||
|
|
9113b04b48 | ||
|
|
05c4dfd8f8 | ||
|
|
938169cd3c | ||
|
|
7a4d1e786c | ||
|
|
b237168ec7 | ||
|
|
753958de28 | ||
|
|
fb5e02050b | ||
|
|
08a2f02a7c | ||
|
|
477bee2e4c | ||
|
|
a0f3183c79 | ||
|
|
f44a730a90 | ||
|
|
3459968ac3 | ||
|
|
428e176d9c | ||
|
|
16430217ff | ||
|
|
262d6af519 | ||
|
|
350dccff3d | ||
|
|
4d76f4d79c | ||
|
|
fd4d6a4e55 | ||
|
|
81aa5c7ec7 | ||
|
|
c6d67eab6a | ||
|
|
9427a5cf46 | ||
|
|
4167dfea14 | ||
|
|
c50cb83ec1 | ||
|
|
0001e93810 | ||
|
|
84c4cd7c53 | ||
|
|
29be429d2f | ||
|
|
acffae6643 | ||
|
|
285feba42b | ||
|
|
b940f61d42 | ||
|
|
696f66f620 | ||
|
|
db19fa0f7f | ||
|
|
2678735f73 | ||
|
|
23424629c9 | ||
|
|
f2433824ba | ||
|
|
d00b183f92 | ||
|
|
994d7d5429 | ||
|
|
eb90603f18 | ||
|
|
2d27dab6ab | ||
|
|
325c71b1b4 | ||
|
|
f9c9c1048e | ||
|
|
4ccb39a228 | ||
|
|
ad8acaefec | ||
|
|
106ae81614 | ||
|
|
93745dc40c | ||
|
|
3316820f86 | ||
|
|
f4950ff26e | ||
|
|
20ba6432b9 | ||
|
|
a611027eeb | ||
|
|
1a82b407a4 | ||
|
|
dc1db0dc72 | ||
|
|
047f3b653e | ||
|
|
79244078a6 | ||
|
|
fce2099d7d | ||
|
|
22d4de27f1 | ||
|
|
9d5ca47ac8 | ||
|
|
c1588d0300 | ||
|
|
b62014554c | ||
|
|
afcaf20020 | ||
|
|
bcf20b4441 | ||
|
|
c8a4a6dc58 | ||
|
|
634ce933be | ||
|
|
ca42a9daec | ||
|
|
9e1e9ff8c0 | ||
|
|
761c383958 | ||
|
|
48e4688c13 | ||
|
|
7ddaad615b | ||
|
|
a5854afd2f | ||
|
|
db3c5cf20f | ||
|
|
e7f941fa3d | ||
|
|
51fa778fb2 | ||
|
|
35167da6dd | ||
|
|
2a973b9e16 | ||
|
|
83626923cf | ||
|
|
7551bebb88 | ||
|
|
433b01aaf8 | ||
|
|
da664b49ad | ||
|
|
5d79952bdd | ||
|
|
e5ecd243f2 | ||
|
|
274035edd6 | ||
|
|
60776e8111 | ||
|
|
3fcad4bc65 | ||
|
|
991fe78740 | ||
|
|
aac64b1ded | ||
|
|
b6d3df3335 | ||
|
|
66560d0a7b | ||
|
|
b42d16cf1c | ||
|
|
bcdf32b214 | ||
|
|
9c3728c8f2 | ||
|
|
23fff1e8fd | ||
|
|
a553fbcdd1 | ||
|
|
e62606d276 | ||
|
|
e25d83f701 | ||
|
|
ed37c149d1 | ||
|
|
7c8d126f23 | ||
|
|
c9b88f0404 | ||
|
|
e24d7a1fd2 | ||
|
|
d756f2fc0d | ||
|
|
4d0ab41e6e | ||
|
|
512dbc3a24 | ||
|
|
a3d44e37b5 | ||
|
|
18e4d80073 | ||
|
|
e5bedd52ac | ||
|
|
a38927ec04 | ||
|
|
fbddf090a4 | ||
|
|
b4b1208222 | ||
|
|
4e95397ed5 | ||
|
|
853a57e4d4 | ||
|
|
8c86074da2 | ||
|
|
88a6ef4cd7 | ||
|
|
7d2dd628ba | ||
|
|
7e93ca0977 | ||
|
|
eddbd7c072 | ||
|
|
e734a5412a | ||
|
|
7ddb0da5f6 | ||
|
|
862aa73783 | ||
|
|
34af93b72f | ||
|
|
5ef3ca9364 | ||
|
|
37d3577028 | ||
|
|
ef68881e5c | ||
|
|
e8a5aa81f4 | ||
|
|
f2f25dd5ed | ||
|
|
8d140d835a | ||
|
|
afae7eaa11 | ||
|
|
af70a4a3a3 | ||
|
|
bc6ad53018 | ||
|
|
a3fc2c95b8 | ||
|
|
68af2c1c2a | ||
|
|
2552c0327c | ||
|
|
f5ac895062 | ||
|
|
e4cc39c29b | ||
|
|
c80eb26135 | ||
|
|
964a698875 | ||
|
|
b57ec74ca3 | ||
|
|
66d5c9fe26 | ||
|
|
434f600f95 | ||
|
|
89503049b3 | ||
|
|
aaabb4bfc4 | ||
|
|
be772b40e1 | ||
|
|
3149b8a6fe | ||
|
|
c8e0028874 | ||
|
|
a8d929a343 | ||
|
|
618de9546a | ||
|
|
2673118478 | ||
|
|
6cc69fb3fc | ||
|
|
eefee8c7a8 | ||
|
|
dcf44e406e | ||
|
|
1970a52fc9 | ||
|
|
37161c5d11 | ||
|
|
d646023bbd | ||
|
|
b63061a505 | ||
|
|
61b057c37d | ||
|
|
2388a3f4fd | ||
|
|
cfc9576eaf | ||
|
|
e9e3f29d74 | ||
|
|
83f21d7d2a | ||
|
|
4adf297c80 | ||
|
|
f5695145ef | ||
|
|
a0e06cf7b2 | ||
|
|
0288986e14 | ||
|
|
fa6cf1ffb8 | ||
|
|
5b235a4b03 | ||
|
|
771039e6a7 | ||
|
|
1a63078c32 | ||
|
|
4a60cee5ff | ||
|
|
0df92148a4 | ||
|
|
f1ea368585 | ||
|
|
656053582a | ||
|
|
37eb3315b6 | ||
|
|
d20cd73523 | ||
|
|
a0acbda9ce | ||
|
|
f00dd05f82 | ||
|
|
92d8829ee1 | ||
|
|
9979cec045 | ||
|
|
8cff208d36 | ||
|
|
7d170259d3 | ||
|
|
d0ff791260 | ||
|
|
ddc5222208 | ||
|
|
f1068d6c3f | ||
|
|
fb2baa8c8d | ||
|
|
c56561b234 | ||
|
|
f58f7c8a16 | ||
|
|
5fe24b620d | ||
|
|
26f45fab19 | ||
|
|
85669ef491 | ||
|
|
56246551e6 | ||
|
|
6027ff243d | ||
|
|
1d0efbf456 | ||
|
|
67c7ef69f4 | ||
|
|
e2a7f23214 | ||
|
|
784964d49d | ||
|
|
e715197290 | ||
|
|
5f836aca6d | ||
|
|
4e99eaa590 | ||
|
|
a3adb70a04 | ||
|
|
de07ed42bb | ||
|
|
53488eb8e5 | ||
|
|
752e0757d9 | ||
|
|
a71b2d9329 | ||
|
|
506ac3f167 | ||
|
|
46f4896992 | ||
|
|
6c41e105c4 | ||
|
|
bdfd7946e3 | ||
|
|
f78fd29e38 | ||
|
|
3d6405be85 | ||
|
|
7bdb2ae897 | ||
|
|
891b865da8 | ||
|
|
dc2b8ebab9 | ||
|
|
901723621c | ||
|
|
3f6325c358 | ||
|
|
ea02f389ac | ||
|
|
cd8621c632 | ||
|
|
e55a7bef26 | ||
|
|
da68d02c77 | ||
|
|
2677cf68d4 | ||
|
|
cedbcba3e3 | ||
|
|
5b1bb71787 | ||
|
|
7d4a257d57 | ||
|
|
051789c430 | ||
|
|
0e4c300745 | ||
|
|
f99dea798a | ||
|
|
f15fc6645e | ||
|
|
c56db864eb | ||
|
|
5b4e81aa8b | ||
|
|
e75f4e9f5a | ||
|
|
08d1e9b880 | ||
|
|
b2fb42e39d | ||
|
|
776ab21641 | ||
|
|
031c9e545b | ||
|
|
c6f06e2c40 | ||
|
|
c9c8f64f09 | ||
|
|
9bc45475f4 | ||
|
|
8bf8503fcd | ||
|
|
8a73ad996a | ||
|
|
24f74312f2 | ||
|
|
5f179cf19f | ||
|
|
254ac59016 | ||
|
|
2711702e29 | ||
|
|
18ee6eb2e6 | ||
|
|
4711d0565d | ||
|
|
f61f5feaf4 | ||
|
|
2165555170 | ||
|
|
260a819fd2 | ||
|
|
83025080c8 | ||
|
|
b6684ff845 | ||
|
|
deb124138b | ||
|
|
eeef08e58e | ||
|
|
295574740d | ||
|
|
a52e601f2e | ||
|
|
d349bdb1f8 | ||
|
|
caba025e97 | ||
|
|
add52b90c9 | ||
|
|
c42fc16d8e | ||
|
|
a09137c008 | ||
|
|
2a2d1bc78b | ||
|
|
50db685274 | ||
|
|
d0285fb57c | ||
|
|
a899a61f80 | ||
|
|
da0d22f05a | ||
|
|
35cf3b65a3 | ||
|
|
d0505d3c11 | ||
|
|
d1abc53d33 | ||
|
|
36a727ef81 | ||
|
|
3ce32d2014 | ||
|
|
a01d0e94f8 | ||
|
|
34c16e211f | ||
|
|
95a9e1e215 | ||
|
|
3924a2ef76 | ||
|
|
4f9ecc9d50 | ||
|
|
f6bc4abfd0 | ||
|
|
7a704827f1 | ||
|
|
72594c6783 | ||
|
|
754aaecc18 | ||
|
|
b419c0df29 | ||
|
|
a4ce50ffd5 | ||
|
|
802830d8d4 | ||
|
|
83941f8647 | ||
|
|
8d08e60916 | ||
|
|
0b15539479 | ||
|
|
a94bee71d2 | ||
|
|
5f905c6b42 | ||
|
|
e0f1e637f7 | ||
|
|
fc4912ef54 | ||
|
|
dca51291aa | ||
|
|
b72a68f622 | ||
|
|
a9a71fbeed | ||
|
|
84c776fa6b | ||
|
|
a21b5d453a | ||
|
|
aca8f53050 | ||
|
|
0ef3368893 | ||
|
|
4827fd71b4 | ||
|
|
00aa283a54 | ||
|
|
ef373d954f | ||
|
|
cdb7ce3dec | ||
|
|
49d1e65496 | ||
|
|
29153af2bc | ||
|
|
f79f4d175b | ||
|
|
600ad660a6 | ||
|
|
efcce68a56 | ||
|
|
6b04c937e6 | ||
|
|
46c50f2cbe | ||
|
|
d452d6f89d | ||
|
|
eb6ab2ba62 | ||
|
|
8a92a63a64 | ||
|
|
907f6fa72d | ||
|
|
94e527e763 | ||
|
|
588315f877 | ||
|
|
d1985fe77e | ||
|
|
61ad4e0991 | ||
|
|
24be9ffc57 | ||
|
|
d875d84d2d | ||
|
|
9fe8b22269 | ||
|
|
37e5a8544b | ||
|
|
bf7dc84893 | ||
|
|
bb48e33074 | ||
|
|
a51d355707 | ||
|
|
a79f4cf6f6 | ||
|
|
903789cf6e | ||
|
|
49ba3a86e2 | ||
|
|
021d84ff04 | ||
|
|
8ecf68cb65 | ||
|
|
bbed78149c | ||
|
|
3fa973f430 | ||
|
|
bd76e73b25 | ||
|
|
fc426a06b2 | ||
|
|
2572ae8378 | ||
|
|
46001263f8 | ||
|
|
ec8523af7c | ||
|
|
2708de3876 | ||
|
|
ef17dc16fa | ||
|
|
ed4a999caa | ||
|
|
6b3662d047 | ||
|
|
33b7e227d4 | ||
|
|
be5b58d033 | ||
|
|
8d3b8354c3 | ||
|
|
25956c4fa1 | ||
|
|
5201803685 | ||
|
|
c6003ff530 | ||
|
|
72f028efae | ||
|
|
72a2c10896 | ||
|
|
49ad66e478 | ||
|
|
bcdfc53d7d | ||
|
|
ed37706915 | ||
|
|
e321f0ac04 | ||
|
|
87c0c8b83e | ||
|
|
7bc95f35d7 | ||
|
|
ae4d29a49f | ||
|
|
67ff4fe913 | ||
|
|
dd255df90d | ||
|
|
ab33329129 | ||
|
|
767a4b3606 | ||
|
|
a71d98d78b | ||
|
|
c3569ec5e2 | ||
|
|
eab5e0df9b | ||
|
|
e214f4d325 | ||
|
|
982797df31 | ||
|
|
77bbb0ef78 | ||
|
|
13aa774d7a | ||
|
|
6e7eb47d33 | ||
|
|
a07e37121d | ||
|
|
d88fd04c73 | ||
|
|
abde50f162 | ||
|
|
2b4e6bf25d | ||
|
|
ff09efb1bf | ||
|
|
cff283f77d | ||
|
|
e0c7bfc93d | ||
|
|
ac391d9c5e | ||
|
|
46cc08160d | ||
|
|
7e3b5c37d0 | ||
|
|
a00e120bf7 | ||
|
|
1932662b4c | ||
|
|
b4781b8a4f | ||
|
|
83644692fe | ||
|
|
420361597e | ||
|
|
05187502b3 | ||
|
|
878ac59aae | ||
|
|
e1cc1b8d29 | ||
|
|
d95fc102db | ||
|
|
66da896347 | ||
|
|
c530bb8910 | ||
|
|
8054b2d219 | ||
|
|
7c61e935ee | ||
|
|
e5e9968d22 | ||
|
|
962fa0a690 | ||
|
|
9714db14d2 | ||
|
|
50c65ea7e1 | ||
|
|
98bdb2a7a3 | ||
|
|
d4ee772714 | ||
|
|
fa9d7f40fc | ||
|
|
20026587fd | ||
|
|
f16423c413 | ||
|
|
1bface09d5 | ||
|
|
560d899a9b | ||
|
|
2838e41819 | ||
|
|
8550f722ca | ||
|
|
9f6ff2ed6e | ||
|
|
164fb96da0 | ||
|
|
31c1338dba | ||
|
|
7d729e1836 | ||
|
|
36530a5501 | ||
|
|
1aba87ef76 | ||
|
|
b19e50e720 | ||
|
|
caf9d11c8c | ||
|
|
f7a7ce1847 | ||
|
|
893bad0db2 | ||
|
|
29833539bb | ||
|
|
f914edeebd | ||
|
|
5f3187300d | ||
|
|
5d5f8ad3d5 | ||
|
|
f8abd2b402 | ||
|
|
6335d21901 | ||
|
|
5649b6d63f | ||
|
|
e96eaa3d7c | ||
|
|
aa86d1abfa | ||
|
|
1228cd6903 | ||
|
|
6f240b1665 | ||
|
|
13e5043d64 | ||
|
|
b771c42f7f | ||
|
|
4d1481e2eb | ||
|
|
21b0f228b6 | ||
|
|
b9091e9466 | ||
|
|
a520481168 | ||
|
|
8daa2da97c |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
config_templates/hbl_html/accessible-urls/accessible-urls.txt text eol=lf
|
||||
49
.github/ISSUE_TEMPLATE/bug_report.md
vendored
49
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,25 +1,58 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Something doesn't work correctly in Atmosphère.
|
||||
|
||||
#assignees:
|
||||
---
|
||||
|
||||
## Bug Report
|
||||
|
||||
[ If any section does not apply, replace its contents with "N/A". ]</br>
|
||||
[ Lines between [ ] (square brackets) should be removed before posting. ]</br>
|
||||
|
||||
[ * ]</br>
|
||||
[ Note: If the bug or crash you encountered is related to; ]</br>
|
||||
[ - software used to make "backups", ]</br>
|
||||
[ - software explicitly distributed for piracy, etc ]</br>
|
||||
[ then contributors will not provide support for your issue and your issue will be closed. ]</br>
|
||||
|
||||
### What's the issue you encountered?
|
||||
|
||||
[ Describe the issue in detail and what you were doing beforehand. ]</br>
|
||||
[ Did you make any changes related to Atmosphère itself? ]</br>
|
||||
[ If so, make sure to include details relating to what exactly you changed. ]</br>
|
||||
|
||||
### How can the issue be reproduced?
|
||||
|
||||
### Crash report?
|
||||
[ * ]</br>
|
||||
[ Include a detailed step by step process for recreating your issue. ]</br>
|
||||
|
||||
(If a crash report was created under /atmosphere/crash_reports/, please upload it to
|
||||
[gist](https://gist.github.com/) and paste the link here.)
|
||||
### Crash Report
|
||||
|
||||
[ Crash reports can be found under ``/atmosphere/crash_reports``. ]</br>
|
||||
[ If your issue caused Atmosphère to crash, include the crash report(s) by creating a [gist](https://gist.github.com/) and pasting the link here. ]</br>
|
||||
[ If you don't include a crash report in instances of crash related issues, we will ask you one to provide one. ]</br>
|
||||
|
||||
### System Firmware Version
|
||||
|
||||
X.X.X</br>
|
||||
[ Replace X's with system firmware version at time of crash. ]</br>
|
||||
[ You can find your firmware version in the Settings -> System, under "System Update". ]</br>
|
||||
[ If it says "Update Pending", you can clear the pending update by rebooting to Maintenance Mode. ]</br>
|
||||
|
||||
### Environment?
|
||||
|
||||
- What bootloader (fusee, hekate, etc) was Atmosphère launched by:
|
||||
- Official release or unofficial build:
|
||||
- Do you have additional kips you're loading:
|
||||
- Additional info about your environment:
|
||||
- What bootloader (fusèe, hekate, etc) was Atmosphère launched by:
|
||||
- Official release or unofficial build:
|
||||
- [ Official release version x.x.x (or) unofficial build ]
|
||||
- [ If using an unofficial build, include details on where/how you acquired the build. ]
|
||||
- [ Ex: Self-compilation ]
|
||||
- [ Ex: Kosmos' distribution of Atmosphère ]
|
||||
- Do you have additional kips or sysmodules you're loading:
|
||||
- Homebrew software installed: [ * ]
|
||||
- EmuMMC or SysNAND:
|
||||
- [ If using an EmuMMC, include whether it's partition-based or file-based. ]
|
||||
|
||||
### Additional context?
|
||||
|
||||
- Additional info about your environment:
|
||||
- [ Any other information relevant to your issue. ]
|
||||
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: ReSwitched Discord
|
||||
url: https://discordapp.com/invite/DThbZ7z
|
||||
about: Please ask questions here, instead of making GitHub issues.
|
||||
42
.github/ISSUE_TEMPLATE/feature_request.md
vendored
42
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,12 +1,48 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: You want to suggest a new feature for Atmosphère.
|
||||
|
||||
about: Suggest a new feature for Atmosphère.
|
||||
#assignees:
|
||||
---
|
||||
|
||||
## Feature Request
|
||||
|
||||
[ If any section does not apply, replace its contents with "N/A". ]</br>
|
||||
[ If you do not have the information needed for a section, replace its contents with "Unknown". ]</br>
|
||||
[ Lines between [ ] (square brackets) are to be removed before posting. ]
|
||||
|
||||
[ Please search for existing [feature requests](https://github.com/Atmosphere-NX/Atmosphere/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22features%2Ffeature-request%22) before you make your own request. ]</br>
|
||||
[ Duplicate requests will be marked as such and you will be referred to the original request. ]
|
||||
|
||||
### What feature are you suggesting?
|
||||
#### Overview:
|
||||
- [ Include the basic, high-level concepts for this feature here. ]</br>
|
||||
|
||||
#### Smaller Details:
|
||||
- [ These may include specific methods of implementation etc. ]</br>
|
||||
|
||||
#### Nature of Request:
|
||||
[ Remove all that do not apply to your request. ]
|
||||
- Addition
|
||||
- [ Ex: Addition of certain original features or features from other community projects. ]
|
||||
- [ If you are suggesting porting features or including features from other projects, include what license they are distributed under and what, if any libraries those project use. ]
|
||||
- Change
|
||||
- Removal
|
||||
- [Ex: Removal of certain features or implementation due to a specific issue/bug or because of low quality code, etc.]
|
||||
|
||||
### What component do you feel this would best fit within?
|
||||
- [Fusée](https://github.com/Atmosphere-NX/Atmosphere#components)</br>
|
||||
- Atmosphère's custom bootloader.</br>
|
||||
- [Exosphère](https://github.com/Atmosphere-NX/Atmosphere#components)</br>
|
||||
- Fully-featured custom secure monitor.</br>
|
||||
- [Stratosphère](https://github.com/Atmosphere-NX/Atmosphere#components)</br>
|
||||
- Custom system modules.</br>
|
||||
- [**Thermosphère**](https://github.com/Atmosphere-NX/Atmosphere#components)</br>
|
||||
- Atmosphère's emuNAND implementation.</br>
|
||||
- [**Troposphère**](https://github.com/Atmosphere-NX/Atmosphere#components)</br>
|
||||
- Application-level patches to the Horizon OS.</br>
|
||||
|
||||
[ Note: **Bolded components are not implemented** or are still at the prototyping phase. ]
|
||||
|
||||
### Why would this feature be useful?
|
||||
|
||||
[ If this is a feature for an end-user, how does it benefit the end-user? ]</br>
|
||||
[ If this feature is for developers, what does it add to Atmosphère that did not already exist? ]</br>
|
||||
|
||||
12
.github/ISSUE_TEMPLATE/question.md
vendored
12
.github/ISSUE_TEMPLATE/question.md
vendored
@@ -1,12 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: Please ask questions in the ReSwitched discord, instead of making issues.
|
||||
|
||||
---
|
||||
|
||||
We would like to use GitHub to keep track of problems/feature requests.
|
||||
|
||||
If you have a question, please join the ReSwitched discord for help.
|
||||
|
||||
- Discord link: https://discordapp.com/invite/DThbZ7z
|
||||
|
||||
25
.gitignore
vendored
25
.gitignore
vendored
@@ -31,12 +31,16 @@
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.lz4
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Deko3d shaders
|
||||
*.dksh
|
||||
|
||||
# Switch Executables
|
||||
*.nso
|
||||
*.nro
|
||||
@@ -64,11 +68,32 @@ dkms.conf
|
||||
# Distribution files
|
||||
*.tgz
|
||||
*.zip
|
||||
*.bz2
|
||||
|
||||
# IDA binaries
|
||||
*.id0
|
||||
*.id1
|
||||
*.id2
|
||||
*.idb
|
||||
*.i64
|
||||
*.nam
|
||||
*.til
|
||||
|
||||
# KEYS file for sept-secondary.
|
||||
*.pyc
|
||||
sept/sept-secondary/KEYS.py
|
||||
|
||||
.**/
|
||||
|
||||
# NOTE: make sure to make exceptions to this pattern when needed!
|
||||
*.bin
|
||||
*.enc
|
||||
|
||||
**/out
|
||||
**/build
|
||||
**/build_nintendo_nx_arm64
|
||||
**/build_nintendo_nx_arm
|
||||
**/build_nintendo_nx_x64
|
||||
**/build_nintendo_nx_x86
|
||||
|
||||
stratosphere/test/
|
||||
|
||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,6 +0,0 @@
|
||||
[submodule "common/include/boost"]
|
||||
path = common/include/boost
|
||||
url = https://github.com/Atmosphere-NX/ext-boost.git
|
||||
[submodule "stratosphere/libstratosphere"]
|
||||
path = stratosphere/libstratosphere
|
||||
url = https://github.com/Atmosphere-NX/libstratosphere.git
|
||||
|
||||
151
Makefile
151
Makefile
@@ -1,12 +1,21 @@
|
||||
TOPTARGETS := all clean dist
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||
endif
|
||||
|
||||
include $(DEVKITPRO)/devkitA64/base_tools
|
||||
|
||||
TOPTARGETS := all clean dist-no-debug dist
|
||||
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
||||
AMSREV := $(AMSBRANCH)-$(shell git rev-parse --short HEAD)
|
||||
AMSHASH := $(shell git rev-parse --short HEAD)
|
||||
AMSREV := $(AMSBRANCH)-$(AMSHASH)
|
||||
|
||||
ifneq (, $(strip $(shell git status --porcelain 2>/dev/null)))
|
||||
AMSREV := $(AMSREV)-dirty
|
||||
endif
|
||||
|
||||
all: fusee stratosphere exosphere thermosphere
|
||||
COMPONENTS := fusee stratosphere mesosphere exosphere thermosphere troposphere libraries
|
||||
|
||||
all: $(COMPONENTS)
|
||||
|
||||
thermosphere:
|
||||
$(MAKE) -C thermosphere all
|
||||
@@ -14,24 +23,36 @@ thermosphere:
|
||||
exosphere: thermosphere
|
||||
$(MAKE) -C exosphere all
|
||||
|
||||
stratosphere: exosphere
|
||||
stratosphere: exosphere libraries
|
||||
$(MAKE) -C stratosphere all
|
||||
|
||||
fusee: exosphere stratosphere
|
||||
mesosphere: exosphere libraries
|
||||
$(MAKE) -C mesosphere all
|
||||
|
||||
troposphere: stratosphere
|
||||
$(MAKE) -C troposphere all
|
||||
|
||||
sept: exosphere
|
||||
$(MAKE) -C sept all
|
||||
|
||||
fusee: exosphere mesosphere stratosphere sept
|
||||
$(MAKE) -C $@ all
|
||||
|
||||
libraries:
|
||||
$(MAKE) -C libraries all
|
||||
|
||||
clean:
|
||||
$(MAKE) -C fusee clean
|
||||
rm -rf out
|
||||
|
||||
dist: all
|
||||
$(eval MAJORVER = $(shell grep '\ATMOSPHERE_RELEASE_VERSION_MAJOR\b' common/include/atmosphere/version.h \
|
||||
|
||||
dist-no-debug: all
|
||||
$(eval MAJORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval MINORVER = $(shell grep '\ATMOSPHERE_RELEASE_VERSION_MINOR\b' common/include/atmosphere/version.h \
|
||||
$(eval MINORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MINOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval MICROVER = $(shell grep '\ATMOSPHERE_RELEASE_VERSION_MICRO\b' common/include/atmosphere/version.h \
|
||||
$(eval MICROVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MICRO\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval AMSVER = $(MAJORVER).$(MINORVER).$(MICROVER)-$(AMSREV))
|
||||
@@ -39,19 +60,109 @@ dist: all
|
||||
rm -rf out
|
||||
mkdir atmosphere-$(AMSVER)
|
||||
mkdir atmosphere-$(AMSVER)/atmosphere
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/titles/0100000000000036
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/titles/0100000000000032
|
||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/fusee-secondary.bin
|
||||
cp common/defaults/BCT.ini atmosphere-$(AMSVER)/BCT.ini
|
||||
cp common/defaults/loader.ini atmosphere-$(AMSVER)/atmosphere/loader.ini
|
||||
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/atmosphere/titles/0100000000000036/exefs.nsp
|
||||
cp stratosphere/set_mitm/set_mitm.nsp atmosphere-$(AMSVER)/atmosphere/titles/0100000000000032/exefs.nsp
|
||||
touch atmosphere-$(AMSVER)/atmosphere/titles/0100000000000032/boot2.flag
|
||||
mkdir atmosphere-$(AMSVER)/sept
|
||||
mkdir atmosphere-$(AMSVER)/switch
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/fatal_errors
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config_templates
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config
|
||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/flags
|
||||
touch atmosphere-$(AMSVER)/atmosphere/flags/clean_stratosphere_for_0.19.0.flag
|
||||
cp fusee/fusee-primary/fusee-primary.bin atmosphere-$(AMSVER)/atmosphere/reboot_payload.bin
|
||||
cp fusee/fusee-mtc/fusee-mtc.bin atmosphere-$(AMSVER)/atmosphere/fusee-mtc.bin
|
||||
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
||||
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/sept/payload.bin
|
||||
cp sept/sept-primary/sept-primary.bin atmosphere-$(AMSVER)/sept/sept-primary.bin
|
||||
cp sept/sept-secondary/sept-secondary.bin atmosphere-$(AMSVER)/sept/sept-secondary.bin
|
||||
cp sept/sept-secondary/sept-secondary_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_00.enc
|
||||
cp sept/sept-secondary/sept-secondary_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_01.enc
|
||||
cp sept/sept-secondary/sept-secondary_dev_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_00.enc
|
||||
cp sept/sept-secondary/sept-secondary_dev_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_01.enc
|
||||
cp config_templates/BCT.ini atmosphere-$(AMSVER)/atmosphere/config_templates/BCT.ini
|
||||
cp config_templates/override_config.ini atmosphere-$(AMSVER)/atmosphere/config_templates/override_config.ini
|
||||
cp config_templates/system_settings.ini atmosphere-$(AMSVER)/atmosphere/config_templates/system_settings.ini
|
||||
cp config_templates/exosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/exosphere.ini
|
||||
cp -r config_templates/kip_patches atmosphere-$(AMSVER)/atmosphere/kip_patches
|
||||
cp -r config_templates/hbl_html atmosphere-$(AMSVER)/atmosphere/hbl_html
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C
|
||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042
|
||||
cp stratosphere/boot2/boot2.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008/exefs.nsp
|
||||
cp stratosphere/dmnt/dmnt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D/exefs.nsp
|
||||
cp stratosphere/erpt/erpt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B/exefs.nsp
|
||||
cp stratosphere/eclct.stub/eclct.stub.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032/exefs.nsp
|
||||
cp stratosphere/fatal/fatal.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034/exefs.nsp
|
||||
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036/exefs.nsp
|
||||
cp stratosphere/ro/ro.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037/exefs.nsp
|
||||
cp stratosphere/jpegdec/jpegdec.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C/exefs.nsp
|
||||
cp stratosphere/pgl/pgl.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042/exefs.nsp
|
||||
@build_romfs atmosphere-$(AMSVER)/stratosphere_romfs atmosphere-$(AMSVER)/atmosphere/stratosphere.romfs
|
||||
rm -r atmosphere-$(AMSVER)/stratosphere_romfs
|
||||
cp troposphere/reboot_to_payload/reboot_to_payload.nro atmosphere-$(AMSVER)/switch/reboot_to_payload.nro
|
||||
cp troposphere/daybreak/daybreak.nro atmosphere-$(AMSVER)/switch/daybreak.nro
|
||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER).zip ./*; cd ../;
|
||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/sept/payload.bin
|
||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip ./*; cd ../;
|
||||
rm -r atmosphere-$(AMSVER)
|
||||
mkdir out
|
||||
mv atmosphere-$(AMSVER).zip out/atmosphere-$(AMSVER).zip
|
||||
mv atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip out/atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip
|
||||
cp fusee/fusee-primary/fusee-primary.bin out/fusee-primary.bin
|
||||
|
||||
|
||||
.PHONY: $(TOPTARGETS) fusee
|
||||
dist: dist-no-debug
|
||||
$(eval MAJORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval MINORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MINOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval MICROVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MICRO\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||
| tr -s [:blank:] \
|
||||
| cut -d' ' -f3))
|
||||
$(eval AMSVER = $(MAJORVER).$(MINORVER).$(MICROVER)-$(AMSREV))
|
||||
rm -rf atmosphere-$(AMSVER)-debug
|
||||
mkdir atmosphere-$(AMSVER)-debug
|
||||
cp fusee/fusee-primary/fusee-primary.elf atmosphere-$(AMSVER)-debug/fusee-primary.elf
|
||||
cp fusee/fusee-mtc/fusee-mtc.elf atmosphere-$(AMSVER)-debug/fusee-mtc.elf
|
||||
cp fusee/fusee-secondary/fusee-secondary-experimental.elf atmosphere-$(AMSVER)-debug/fusee-secondary.elf
|
||||
cp sept/sept-primary/sept-primary.elf atmosphere-$(AMSVER)-debug/sept-primary.elf
|
||||
cp sept/sept-secondary/sept-secondary.elf atmosphere-$(AMSVER)-debug/sept-secondary.elf
|
||||
cp sept/sept-secondary/key_derivation/key_derivation.elf atmosphere-$(AMSVER)-debug/sept-secondary-key-derivation.elf
|
||||
cp exosphere/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/exosphere-loader-stub.elf
|
||||
cp exosphere/program/program.elf atmosphere-$(AMSVER)-debug/exosphere-program.elf
|
||||
cp exosphere/warmboot/warmboot.elf atmosphere-$(AMSVER)-debug/exosphere-warmboot.elf
|
||||
cp exosphere/mariko_fatal/mariko_fatal.elf atmosphere-$(AMSVER)-debug/exosphere-mariko-fatal.elf
|
||||
cp exosphere/program/sc7fw/sc7fw.elf atmosphere-$(AMSVER)-debug/exosphere-sc7fw.elf
|
||||
cp exosphere/program/rebootstub/rebootstub.elf atmosphere-$(AMSVER)-debug/exosphere-rebootstub.elf
|
||||
cp mesosphere/kernel_ldr/kernel_ldr.elf atmosphere-$(AMSVER)-debug/kernel_ldr.elf
|
||||
cp mesosphere/kernel/kernel.elf atmosphere-$(AMSVER)-debug/kernel.elf
|
||||
cp stratosphere/ams_mitm/ams_mitm.elf atmosphere-$(AMSVER)-debug/ams_mitm.elf
|
||||
cp stratosphere/boot/boot.elf atmosphere-$(AMSVER)-debug/boot.elf
|
||||
cp stratosphere/boot2/boot2.elf atmosphere-$(AMSVER)-debug/boot2.elf
|
||||
cp stratosphere/creport/creport.elf atmosphere-$(AMSVER)-debug/creport.elf
|
||||
cp stratosphere/dmnt/dmnt.elf atmosphere-$(AMSVER)-debug/dmnt.elf
|
||||
cp stratosphere/eclct.stub/eclct.stub.elf atmosphere-$(AMSVER)-debug/eclct.stub.elf
|
||||
cp stratosphere/erpt/erpt.elf atmosphere-$(AMSVER)-debug/erpt.elf
|
||||
cp stratosphere/fatal/fatal.elf atmosphere-$(AMSVER)-debug/fatal.elf
|
||||
cp stratosphere/jpegdec/jpegdec.elf atmosphere-$(AMSVER)-debug/jpegdec.elf
|
||||
cp stratosphere/loader/loader.elf atmosphere-$(AMSVER)-debug/loader.elf
|
||||
cp stratosphere/ncm/ncm.elf atmosphere-$(AMSVER)-debug/ncm.elf
|
||||
cp stratosphere/pgl/pgl.elf atmosphere-$(AMSVER)-debug/pgl.elf
|
||||
cp stratosphere/pm/pm.elf atmosphere-$(AMSVER)-debug/pm.elf
|
||||
cp stratosphere/ro/ro.elf atmosphere-$(AMSVER)-debug/ro.elf
|
||||
cp stratosphere/sm/sm.elf atmosphere-$(AMSVER)-debug/sm.elf
|
||||
cp stratosphere/spl/spl.elf atmosphere-$(AMSVER)-debug/spl.elf
|
||||
cp troposphere/daybreak/daybreak.elf atmosphere-$(AMSVER)-debug/daybreak.elf
|
||||
cd atmosphere-$(AMSVER)-debug; zip -r ../atmosphere-$(AMSVER)-debug.zip ./*; cd ../;
|
||||
rm -r atmosphere-$(AMSVER)-debug
|
||||
mv atmosphere-$(AMSVER)-debug.zip out/atmosphere-$(AMSVER)-debug.zip
|
||||
|
||||
|
||||
.PHONY: $(TOPTARGETS) $(COMPONENTS)
|
||||
|
||||
20
README.md
20
README.md
@@ -3,6 +3,7 @@
|
||||
=====
|
||||
|
||||

|
||||
[](https://discordapp.com/invite/ZdqEhed)
|
||||
|
||||
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.
|
||||
|
||||
@@ -12,24 +13,37 @@ Components
|
||||
Atmosphère consists of multiple components, each of which replaces/modifies a different component of the system:
|
||||
|
||||
* Fusée: First-stage Loader, responsible for loading and validating stage 2 (custom TrustZone) plus package2 (Kernel/FIRM sysmodules), and patching them as needed. This replaces all functionality normally in Package1loader/NX Bootloader.
|
||||
* Sept: Payload used to enable support for runtime key derivation on 7.0.0.
|
||||
* Exosphère: Customized TrustZone, to run a customized Secure Monitor
|
||||
* Thermosphère: EL2 EmuNAND support, i.e. backing up and using virtualized/redirected NAND images
|
||||
* Stratosphère: Custom Sysmodule(s), both Rosalina style to extend the kernel/provide new features, and of the loader reimplementation style to hook important system actions
|
||||
* Troposphère: Application-level Horizon OS patches, used to implement desirable CFW features
|
||||
|
||||
Licensing
|
||||
=====
|
||||
|
||||
This software is licensed under the terms of the GPLv2, with exemptions for specific projects noted below.
|
||||
|
||||
You can find a copy of the license in the [LICENSE file](LICENSE).
|
||||
|
||||
Exemptions:
|
||||
* The [yuzu Nintendo Switch emulator](https://github.com/yuzu-emu/yuzu) and the [Ryujinx Team and Contributors](https://github.com/orgs/Ryujinx) are exempt from GPLv2 licensing. They are permitted, each at their individual discretion, to instead license any source code authored for the Atmosphère project as either GPLv2 or later or the [MIT license](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/licensing_exemptions/MIT_LICENSE). In doing so, they may alter, supplement, or entirely remove the copyright notice for each file they choose to relicense. Neither the Atmosphère project nor its individual contributors shall assert their moral rights against any of the aforementioned projects.
|
||||
* [Nintendo](https://github.com/Nintendo) is exempt from GPLv2 licensing and may (at its option) instead license any source code authored for the Atmosphère project under the Zero-Clause BSD license.
|
||||
|
||||
Credits
|
||||
=====
|
||||
|
||||
Atmosphère is currently being developed and maintained by __SciresM__, __TuxSH__ and __hexkyz__.<br>
|
||||
Atmosphère is currently being developed and maintained by __SciresM__, __TuxSH__, __hexkyz__, and __fincs__.<br>
|
||||
In no particular order, we credit the following for their invaluable contributions:
|
||||
|
||||
* __switchbrew__ for the [libnx](https://github.com/switchbrew/libnx) project and the extensive [documentation, research and tool development](http://switchbrew.org) pertaining to the Nintendo Switch.
|
||||
* __devkitPro__ for the [devkitA64](https://devkitpro.org/) toolchain and libnx support.
|
||||
* __ReSwitched Team__ for additional [documentation, research and tool development](https://reswitched.tech/) pertaining to the Nintendo Switch.
|
||||
* __ReSwitched Team__ for additional [documentation, research and tool development](https://reswitched.team/) pertaining to the Nintendo Switch.
|
||||
* __ChaN__ for the [FatFs](http://elm-chan.org/fsw/ff/00index_e.html) module.
|
||||
* __Marcus Geelnard__ for the [bcl-1.2.0](https://sourceforge.net/projects/bcl/files/bcl/bcl-1.2.0) library.
|
||||
* __naehrwert__ and __st4rk__ for the original [hekate](https://github.com/nwert/hekate) project and its hwinit code base.
|
||||
* __CTCaer__ for the continued [hekate](https://github.com/CTCaer/hekate) project's fork.
|
||||
* __CTCaer__ for the continued [hekate](https://github.com/CTCaer/hekate) project's fork and the [minerva_tc](https://github.com/CTCaer/minerva_tc) project.
|
||||
* __m4xw__ for development of the [emuMMC](https://github.com/m4xw/emummc) project.
|
||||
* __Riley__ for suggesting "Atmosphere" as a Horizon OS reimplementation+customization project name.
|
||||
* __hedgeberg__ for research and hardware testing.
|
||||
* __lioncash__ for code cleanup and general improvements.
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
BCT0
|
||||
[stage1]
|
||||
stage2_path = fusee-secondary.bin
|
||||
stage2_addr = 0xF0000000
|
||||
stage2_entrypoint = 0xF0000000
|
||||
@@ -1,4 +0,0 @@
|
||||
[config]
|
||||
hbl_tid=010000000000100D
|
||||
hbl_path=atmosphere/hbl.nsp
|
||||
override_key=!R
|
||||
Submodule common/include/boost deleted from fc6429e463
12
config_templates/BCT.ini
Normal file
12
config_templates/BCT.ini
Normal file
@@ -0,0 +1,12 @@
|
||||
BCT0
|
||||
[stage1]
|
||||
stage2_path = atmosphere/fusee-secondary.bin
|
||||
stage2_mtc_path = atmosphere/fusee-mtc.bin
|
||||
stage2_addr = 0xF0000000
|
||||
stage2_entrypoint = 0xF0000000
|
||||
|
||||
[stratosphere]
|
||||
; To force-enable nogc, add nogc = 1
|
||||
; To force-disable nogc, add nogc = 0
|
||||
|
||||
; To opt out of using Atmosphere's NCM reimplementation, add disable_ncm = 1
|
||||
59
config_templates/exosphere.ini
Normal file
59
config_templates/exosphere.ini
Normal file
@@ -0,0 +1,59 @@
|
||||
# Key: debugmode, default: 1.
|
||||
# Desc: Controls whether kernel is debug mode.
|
||||
# Disabling this may break Atmosphere's debugger in a future release.
|
||||
|
||||
# Key: debugmode_user, default: 0.
|
||||
# Desc: Controls whether userland is debug mode.
|
||||
|
||||
# Key: disable_user_exception_handlers, default: 0.
|
||||
# Desc: Controls whether user exception handlers are executed on error.
|
||||
# NOTE: This will cause atmosphere to not fail gracefully.
|
||||
# Support may not be provided to users tho disable these.
|
||||
# If you do not know what you are doing, leave them on.
|
||||
|
||||
# Key: enable_user_pmu_access, default: 0.
|
||||
# Desc: Controls whether userland has access to the PMU registers.
|
||||
# NOTE: It is unknown what effects this has on official code.
|
||||
|
||||
# Key: blank_prodinfo_sysmmc, default: 0.
|
||||
# Desc: Controls whether PRODINFO should be blanked in sysmmc.
|
||||
# This will cause the system to see dummied out keys and
|
||||
# serial number information.
|
||||
# NOTE: This is not known to be safe, as data may be
|
||||
# cached elsewhere in the system. Usage is not encouraged.
|
||||
|
||||
# Key: blank_prodinfo_emummc, default: 0.
|
||||
# Desc: Controls whether PRODINFO should be blanked in emummc.
|
||||
# NOTE: This is not known to be safe, as data may be
|
||||
# cached elsewhere in the system. Usage is not encouraged.
|
||||
|
||||
# Key: allow_writing_to_cal_sysmmc, default: 0.
|
||||
# Desc: Controls whether PRODINFO can be written by homebrew in sysmmc.
|
||||
# NOTE: Usage of this setting is strongly discouraged without
|
||||
# a safe backup elsewhere. Turning this on will also cause Atmosphere
|
||||
# to ensure a safe backup of calibration data is stored in unused
|
||||
# mmc space, encrypted to prevent detection. This backup can be used
|
||||
# to prevent unrecoverable edits in emergencies.
|
||||
|
||||
# Key: log_port, default: 0.
|
||||
# Desc: Controls what uart port exosphere will set up for logging.
|
||||
# NOTE: 0 = UART-A, 1 = UART-B, 2 = UART-C, 3 = UART-D
|
||||
|
||||
# Key: log_baud_rate, default: 115200
|
||||
# Desc: Controls the baud rate exosphere will set up for logging.
|
||||
# NOTE: 0 is treated as equivalent to 115200.
|
||||
|
||||
# Key: log_inverted, default: 0.
|
||||
# Desc: Controls whether the logging uart port is inverted.
|
||||
|
||||
[exosphere]
|
||||
debugmode=1
|
||||
debugmode_user=0
|
||||
disable_user_exception_handlers=0
|
||||
enable_user_pmu_access=0
|
||||
blank_prodinfo_sysmmc=0
|
||||
blank_prodinfo_emummc=0
|
||||
allow_writing_to_cal_sysmmc=0
|
||||
log_port=0
|
||||
log_baud_rate=115200
|
||||
log_inverted=0
|
||||
@@ -0,0 +1 @@
|
||||
^http*
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
21
config_templates/override_config.ini
Normal file
21
config_templates/override_config.ini
Normal file
@@ -0,0 +1,21 @@
|
||||
[hbl_config]
|
||||
; Program Specific Config
|
||||
; Up to 8 program-specific configurations can be set.
|
||||
; These use `program_id_#`, `override_address_space_#`, and `override_key_#`
|
||||
; where # is in range [0,7].
|
||||
; program_id_0=010000000000100D
|
||||
; override_address_space=39_bit
|
||||
; override_key_0=!R
|
||||
|
||||
; Any Application Config
|
||||
; Note that this will only apply to program IDs that
|
||||
; are both applications and not specified above
|
||||
; by a program specific config.
|
||||
; override_any_app=true
|
||||
; override_any_app_key=R
|
||||
; override_any_app_address_space=39_bit
|
||||
; path=atmosphere/hbl.nsp
|
||||
|
||||
[default_config]
|
||||
; override_key=!L
|
||||
; cheat_enable_key=!L
|
||||
64
config_templates/system_settings.ini
Normal file
64
config_templates/system_settings.ini
Normal file
@@ -0,0 +1,64 @@
|
||||
[eupld]
|
||||
; Disable uploading error reports to Nintendo
|
||||
; upload_enabled = u8!0x0
|
||||
[usb]
|
||||
; Enable USB 3.0 superspeed for homebrew
|
||||
; 0 = USB 3.0 support is system default (usually disabled), 1 = USB 3.0 support is enabled.
|
||||
; usb30_force_enabled = u8!0x0
|
||||
[ro]
|
||||
; Control whether RO should ease its validation of NROs.
|
||||
; (note: this is normally not necessary, and ips patches can be used.)
|
||||
; ease_nro_restriction = u8!0x1
|
||||
; Atmosphere custom settings
|
||||
[atmosphere]
|
||||
; Reboot from fatal automatically after some number of milliseconds.
|
||||
; If field is not present or 0, fatal will wait indefinitely for user input.
|
||||
; fatal_auto_reboot_interval = u64!0x0
|
||||
; Make the power menu's "reboot" button reboot to payload.
|
||||
; Set to "normal" for normal reboot, "rcm" for rcm reboot.
|
||||
; power_menu_reboot_function = str!payload
|
||||
; Controls whether dmnt cheats should be toggled on or off by
|
||||
; default. 1 = toggled on by default, 0 = toggled off by default.
|
||||
; dmnt_cheats_enabled_by_default = u8!0x1
|
||||
; Controls whether dmnt should always save cheat toggle state
|
||||
; for restoration on new game launch. 1 = always save toggles,
|
||||
; 0 = only save toggles if toggle file exists.
|
||||
; dmnt_always_save_cheat_toggles = u8!0x0
|
||||
; Enable writing to BIS partitions for HBL.
|
||||
; This is probably undesirable for normal usage.
|
||||
; enable_hbl_bis_write = u8!0x0
|
||||
; Enable reading the CAL0 partition for HBL.
|
||||
; This is probably undesirable for normal usage.
|
||||
; enable_hbl_cal_read = u8!0x0
|
||||
; Controls whether fs.mitm should redirect save files
|
||||
; to directories on the sd card.
|
||||
; 0 = Do not redirect, 1 = Redirect.
|
||||
; NOTE: EXPERIMENTAL
|
||||
; If you do not know what you are doing, do not touch this yet.
|
||||
; fsmitm_redirect_saves_to_sd = u8!0x0
|
||||
; Controls whether am sees system settings "DebugModeFlag" as
|
||||
; enabled or disabled.
|
||||
; 0 = Disabled (not debug mode), 1 = Enabled (debug mode)
|
||||
; enable_am_debug_mode = u8!0x0
|
||||
; Controls whether dns.mitm is enabled
|
||||
; 0 = Disabled, 1 = Enabled
|
||||
; enable_dns_mitm = u8!0x1
|
||||
; Controls whether dns.mitm uses the default redirections in addition to
|
||||
; whatever is specified in the user's hosts file.
|
||||
; 0 = Disabled (use hosts file contents), 1 = Enabled (use defaults and hosts file contents)
|
||||
; add_defaults_to_dns_hosts = u8!0x1
|
||||
; Controls whether dns.mitm logs to the sd card for debugging
|
||||
; 0 = Disabled, 1 = Enabled
|
||||
; enable_dns_mitm_debug_log = u8!0x0
|
||||
; Controls whether htc is enabled
|
||||
; 0 = Disabled, 1 = Enabled
|
||||
; enable_htc = u8!0x0
|
||||
[hbloader]
|
||||
; Controls the size of the homebrew heap when running as applet.
|
||||
; If set to zero, all available applet memory is used as heap.
|
||||
; The default is zero.
|
||||
; applet_heap_size = u64!0x0
|
||||
; Controls the amount of memory to reserve when running as applet
|
||||
; for usage by other applets. This setting has no effect if
|
||||
; applet_heap_size is non-zero. The default is 0x8600000.
|
||||
; applet_heap_reservation_size = u64!0x8600000
|
||||
@@ -1,6 +1,32 @@
|
||||
# Building Atmosphère
|
||||
The process for building Atmosphère is similar to building Fusée Gelée payloads and other Switch apps.
|
||||
Building Atmosphère is a very straightforward process that relies almost exclusively on tools provided by the [devkitPro](https://devkitpro.org) organization.
|
||||
|
||||
In order to build Atmosphère you must have devkitARM and devkitA64 installed on your computer. You can find instructions on how to install and setup devkitARM and devkitA64 on various OSes [here](https://devkitpro.org/wiki/Getting_Started).
|
||||
## Dependencies
|
||||
+ [devkitA64](https://devkitpro.org)
|
||||
+ [devkitARM](https://devkitpro.org)
|
||||
+ [Python 2](https://www.python.org) (Python 3 may work as well, but this is not guaranteed)
|
||||
+ [LZ4](https://pypi.org/project/lz4)
|
||||
+ [PyCryptodome](https://pypi.org/project/pycryptodome) (optional)
|
||||
|
||||
Once you have finished installing devkitARM and devkitA64, simply clone the Atmosphère repo, change to it and run `make`.
|
||||
## Instructions
|
||||
1. Follow the guide located [here](https://devkitpro.org/wiki/Getting_Started) to install and configure all the tools necessary for the build process.
|
||||
|
||||
2. Install the following packages via (dkp-)pacman:
|
||||
+ `switch-dev`
|
||||
+ `switch-glm`
|
||||
+ `switch-libjpeg-turbo`
|
||||
+ `devkitARM`
|
||||
+ `devkitarm-rules`
|
||||
|
||||
3. Install the following library via python's package manager `pip`, required by [exosphere](components/exosphere.md):
|
||||
+ `lz4`
|
||||
|
||||
4. (Optional) In order to build [sept](components/sept.md) the pycryptodome PyPi package is required, which can be installed by running `pip install pycryptodome` under the installed Python environment of your choice or by installing the complete zip package to support the `make dist` recipe. This is an optional step included for advanced users who have the ability to provide the necessary encryption/signing keys themselves.
|
||||
|
||||
5. It is, instead, possible to build [sept](components/sept.md) by providing previously encrypted/signed binaries distributed by official Atmosphère release packages. In order to do so, export the following variables in your current environment:
|
||||
+ `SEPT_00_ENC_PATH` (must point to the `sept-secondary_00.enc` file)
|
||||
+ `SEPT_01_ENC_PATH` (must point to the `sept-secondary_01.enc` file)
|
||||
+ `SEPT_DEV_00_ENC_PATH` (must point to the `sept-secondary_dev_00.enc` file)
|
||||
+ `SEPT_DEV_01_ENC_PATH` (must point to the `sept-secondary_dev_01.enc` file)
|
||||
|
||||
6. Finally, clone the Atmosphère repository and run `make` under its root directory.
|
||||
|
||||
@@ -1,9 +1,909 @@
|
||||
# Changelog
|
||||
## 0.19.3
|
||||
+ Support was added for 12.0.2.
|
||||
+ A number of minor issues were fixed, including:
|
||||
+ An issue was fixed in dns.mitm that caused a crash when games attempted to resolve the IP address of nullptr.
|
||||
+ An issue was fixed in erpt that would cause an abort when booting without having ever booted stock previously.
|
||||
+ An issue was fixed in (file-based) emummc that caused an error on system format/downloading certain games.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.19.2
|
||||
+ Atmosphère's components were further updated to reflect latest official behaviors as of 12.0.0.
|
||||
+ Notably, `erpt` was updated to implement the new forced shutdown detection feature.
|
||||
+ When a forced-shutdown occurs, an erpt_report will be generated and saved to the SD card on the next boot.
|
||||
+ Atmosphere-libs was updated to use GCC 11 (latest devkitA64/devkitARM releases).
|
||||
+ Initial inspections show mild-to-moderate optimizer improvements in several important places (kernel is 0x3000 smaller).
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
+ A number of minor issues were fixed, including:
|
||||
+ A bug was fixed that caused a black screen when attempting to boot firmware versions 2.0.0-4.1.0.
|
||||
+ A bug was fixed that caused sm to abort when at the session limit, rather than returning error codes.
|
||||
+ A bug was fixed that allowed for resource exhaustion on 12.0.0, under certain circumstances.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.19.1
|
||||
+ An issue was fixed that caused a fatal error when using official `migration` services to transfer data between consoles.
|
||||
+ An issue was fixed in `ncm` that caused an error when the OS tried to enumerate installed SD card content.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.19.0
|
||||
+ Support was added for 12.0.0.
|
||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||
+ `sm`, `boot2`, `pgl` were updated to reflect the latest official behaviors.
|
||||
+ **Please Note**: 12.0.0 added a new protocol for IPC ("tipc"), which has been freshly reimplemented in its entirety.
|
||||
+ It is possible there may be as of yet unfound issues; if there are, please send the appropriate crash reports to SciresM (SciresM#0524 on discord).
|
||||
+ Homebrew which uses atmosphere extensions (including the mitm API) will need to be re-compiled in order to function on 0.19.0.
|
||||
+ I apologize for this, but it's unavoidable for technical reasons. If you're affected by this and mad about it, please contact SciresM to complain.
|
||||
+ `erpt` was partially updated to reflect the latest official behaviors.
|
||||
+ New features were added to erpt to track the activity of running applets, and to detect when a forced shutdown occurs.
|
||||
+ These behaviors have been temporarily stubbed, as they are not necessary for 12.0.0 to run (and their outputs won't be saved anywhere).
|
||||
+ A future atmosphère update will implement these behaviors, in the interest of reflecting official logic as faithfully as we can.
|
||||
+ Atmosphère no longer uses the /contents/ folder for its own programs.
|
||||
+ Atmosphère's system modules are now bundled together in the single file "stratosphere.romfs".
|
||||
+ For those working on developing for atmosphère, executables inside the /contents/ directory will be preferred to those in "stratosphere.romfs".
|
||||
+ **Please Note**: In order to facilitate this change (and the desired behavior), the first time you boot after extracting a release zip, atmosphère system modules inside /contents/ will be deleted.
|
||||
+ This will have no impact on user programs (it only removes programs with specific program ids).
|
||||
+ Improvements were made to mesosphere, including:
|
||||
+ An extension InfoType was added for getting the current process handle, without having to spawn a thread and do IPC with oneself.
|
||||
+ An issue was fixed in SvcSetDebugThreadContext.
|
||||
+ An issue was fixed when doing IPC with user buffers.
|
||||
+ Support was fixed for toggling the custom setting `usb!usb30_force_enabled` on 9.0.0+.
|
||||
+ This was broken by Nintendo's introducing a dependency that made USB a requirement to launch before custom settings are parsed.
|
||||
+ Since the fix, you can now toggle the setting (as you could prior to atmosphère 0.9.4), and it will work as expected.
|
||||
+ **Please Note**: Enabling USB 3.0 often severely impacts wireless communications.
|
||||
+ Because of this, the setting will default to off. If you experience issues with it enabled, consider disabling it.
|
||||
+ A warning was added to daybreak when resetting the console to factory settings.
|
||||
+ Substantial work was completed towards atmosphere's upcoming implementation of the host target connection protocol.
|
||||
+ Once completed, users will be able to interact with a Switch running atmosphère via a PC application ("Starlink") currently under development.
|
||||
+ Planned eventual features for connected consoles include a gdbstub, interacting with memory (for cheat development), streaming gameplay audio and video, and accessing the Switch's SD card filesystem.
|
||||
+ Switch homebrew will also have access to a (configurable and sandboxed) filesystem on the host PC, while connected.
|
||||
+ Towards this end, the following was accomplished:
|
||||
+ The "htc" system module was reimplemented completely.
|
||||
+ The system module which provides remote access to the SD card was reimplemented completely.
|
||||
+ This is currently the active focus of atmosphère's development.
|
||||
+ **Please Note**: Support is not yet completed, and users are disadvised from interacting with the related settings for the time being, unless they particularly know what they're doing.
|
||||
+ A number of minor issues were fixed, including:
|
||||
+ A bug was fixed in `dmnt` that could cause a fatal when launching certain games with cheats active.
|
||||
+ An issue was fixed that could cause an abort in `sm` when using a large number of custom system modules.
|
||||
+ An issue was fixed that prevented launching gamecards on 1.0.0.
|
||||
+ Minor issues were fixed in the cheat virtual machine's behavior.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.18.1
|
||||
+ A number of minor issues were fixed, including:
|
||||
+ The new `dns.mitm` module added in 0.18.0 no longer fatal errors when receiving port=nullptr.
|
||||
+ This fixes youtube ad-blocking, and possibly other usecases.
|
||||
+ A bug was fixed that caused ams.mitm to incorrectly cache data storages.
|
||||
+ This potentially broke DLC when using romfs mods, and could have caused other issues (e.g. with custom themes, and maybe other cases).
|
||||
+ A bug was fixed in power state control module registration.
|
||||
+ This might fix a weird edge case with system module dependencies on sleep/wake, but probably nobody should notice any differences.
|
||||
+ A bug was fixed where mesosphere sometimes treated virtual core IDs as though they were physical core IDs.
|
||||
+ This had zero impact, because for Switch virtual core == physical core, but it could have affected future platforms if it had remained unresolved.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.18.0
|
||||
+ A new mitm module was added (`dns.mitm`).
|
||||
+ This provides a highly configurable mechanism for redirecting DNS resolution requests.
|
||||
+ By default atmosphère redirects resolution requests for official telemetry servers to a loopback address.
|
||||
+ Documentation on how to configure `dns.mitm` to meet your more specific needs may be found [here](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/dns_mitm.md).
|
||||
+ The service framework API (`sf`) was refactored to be more accurate to official logic and greatly reduce memory requirements.
|
||||
+ The comparison of atmosphère module memory usage versus Nintendo's found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons) was updated to reflect this.
|
||||
+ **Please Note**: If you are a developer using the libstratosphere service APIs, some updating may be required. Contact SciresM#0524 on discord for assistance if required.
|
||||
+ A number of deprecations were removed, following a general codebase cleanup:
|
||||
+ The `sm` extension to not unregister services on connection close was superseded by official opt-in logic in 11.0.0, and has been removed in favor of official logic.
|
||||
+ This should have zero impact on users.
|
||||
+ The temporary `hid-mitm` added in 0.9.0 has finally been removed, following over a year of deprecation.
|
||||
+ There shouldn't be any homebrew in use still affected by this, but the situation will be monitored.
|
||||
+ If this is somehow still a real issue, an unaffiliated hid mitm sysmodule providing the same functionality can be created and released, separate from atmosphère itself.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.17.1
|
||||
+ A number of atmosphère's modules were using more memory than their Nintendo equivalent's in 0.17.0; a number of code generatio tweaks have been applied to fix this across the board.
|
||||
+ A detailed comparison of atmosphère module memory usage versus Nintendo's was made and can be found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons).
|
||||
+ Several minor bugs were fixed, including:
|
||||
+ A bug was fixed in mesosphère that caused games which attempt to map more memory than the Switch has to fail.
|
||||
+ This affected "Piczle Lines DX 500 More Puzzles!", and possibly other games.
|
||||
+ Enabling configuration to "blank" PRODINFO no longer causes a hang on Mariko devices (or any devices with newer format).
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.17.0
|
||||
+ fusee was heavily rewritten in order to add support for Mariko hardware.
|
||||
+ **Please Note**: Mariko hardware currently has no (and may not ever have any) software exploits; fusee works when loaded from bootloader context with the right keys in the security engine. No means of getting the system into this state is provided.
|
||||
+ An issue was fixed in the way shutdown was performed on Erista hardware.
|
||||
+ This fixes an issue that caused OFW to black screen on boot after power off from atmosphere without first doing a reboot.
|
||||
+ This also substantially improves power drain when the system is shut off; consoles powered off from Atmosphere should now drain battery at the same reduced rate as original firmware.
|
||||
+ A number of minor changes were made, including:
|
||||
+ A number of inconsistencies in the build system were fixed.
|
||||
+ For those building atmosphère at home, the `boot` sysmodule will no longer rebuild every time make is invoked.
|
||||
+ This substantially improves build times during development iteration.
|
||||
+ `sm` was updated to more accurately reflect how official code manages request deferral.
|
||||
+ `mesosphère` was updated to more accurately reflect official kernel management of the trace buffer.
|
||||
+ `mesosphère` was updated to improve kernel loader's logic by taking advantage of the assumption that we only boot our kernel, not Nintendo's.
|
||||
+ As it has been a few months with zero reported issues, `mesosphère` is now opt-out.
|
||||
+ Users who wish to begin using or continue using mesosphere should use the standard/cool kids zip ("atmosphere-").
|
||||
+ Users who wish to opt-out of mesosphere should download and extract the opt-out zip ("atmosphere-WITHOUT_MESOSPHERE-").
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.16.2
|
||||
+ Atmosphère release zips no longer bundle BCT.ini, instead relying on defaults in code.
|
||||
+ This means atmosphere updates should no longer overwrite any user configuration at all.
|
||||
+ If you wish to modify BCT.ini config, copy the template from /config_templates/ as with other configuration.
|
||||
+ `pgl` and `creport` were further updated to reflect differences in official behavior in 11.0.0.
|
||||
+ An issue was fixed that caused creport to be launched multiple times on process crash.
|
||||
+ This fixes the "duplicate reports" issue that sometimes plagued people.
|
||||
+ A new system setting (`atmosphere!enable_am_debug_mode`) configuring am to use debug mode.
|
||||
+ If you are not a developer or don't see a clear use for this, leave it configured to the default (off).
|
||||
+ Reboot to payload NRO was updated to fix support with certain payloads.
|
||||
+ Support was fixed for atmosphere's extension to support homebrew use of new (8.0.0+) kernel mappings.
|
||||
+ In particular, when running tracing debug builds of `mesosphère`, hbloader now has access to the kernel trace buffer.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.16.1
|
||||
+ Support was added for 11.0.1.
|
||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||
+ A new svc::InfoType added in 11.0.0 was implemented (it wasn't discovered before 0.16.0 released).
|
||||
+ The new Control Flow Integrity (CFI) logic added in 11.0.0 kernel was implemented.
|
||||
+ `fs` logic was refactored and cleaned up to reflect some newer sysmodule behavioral and structural changes.
|
||||
+ `exosphère` was updated to allow dynamic control of what uart port is used for logging.
|
||||
+ This can be controlled by editing the `log_port`, `log_baud_rate`, and `log_inverted` fields in `exosphere.ini`.
|
||||
+ `mesosphère` was updated to improve debugging capabilities.
|
||||
+ This is still a work in progress, but developers may be interested.
|
||||
+ A bug was fixed that caused `fatal` to fatal error if the fatal process was already being debugged.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.16.0
|
||||
+ Support was added for 11.0.0.
|
||||
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||
+ `loader`, `sm`, `boot`, `pgl` were updated to reflect the latest official behaviors.
|
||||
+ **Please Note**: 11.0.0 implements an opt-in version of the atmosphère `sm` extension that allows for closing session without unregistering services.
|
||||
+ Correspondingly, the extension will be deprecated in favor of the new official opt-in command. In 0.17.0, it will be removed entirely.
|
||||
+ If your custom system module relies on this extension (however unlikely that seems to me), please update it accordingly.
|
||||
+ `erpt` was partially updated to provide compatibility with 11.0.0.
|
||||
+ The latest firmware attaches additional fields and context information to logs.
|
||||
+ A future atmosphère update will implement this logic, so that users who are interested can also get the new information when examining their logs.
|
||||
+ **Please Note**: 11.0.0 introduced breaking changes to the `usb` system module's `usb:ds` API.
|
||||
+ Homebrew which uses the `usb:ds` service should rebuild with the latest libnx version to support running on 11.0.0.
|
||||
+ The `boot` system module was rewritten to reflect the huge driver changes introduced in 8.0.0.
|
||||
+ This includes a number of improvements to both logo display and battery management logic.
|
||||
+ Support was added for configuring the address space width for `hbl`.
|
||||
+ The `hbl_config!override_address_space_(#)` and `hbl_config!override_any_app_address_space` can now be set to `39_bit`, `36_bit`, or `32_bit` to control the address space for hbl on a per-override basis.
|
||||
+ If a configuration has not been set, hbl will now default to 39-bit address space.
|
||||
+ Previously, a legacy 36-bit address space was always used to maintain compatibility with 1.0.0.
|
||||
+ A new loader extension was added to support 39-bit whenever possible (including mesosphere-on-1.0.0), with fallback to 36-bit when unavailable.
|
||||
+ Support was added to a number of components for running on Mariko hardware.
|
||||
+ The `boot` system module can now safely be run on mariko hardware, performing correct hardware initialization.
|
||||
+ Daybreak (and generally, system update logic) were updated to be usable on Mariko.
|
||||
+ Boot0 protection/management logic was updated to perform correct actions on Mariko.
|
||||
+ Reboot to payload does not and cannot work on Mariko. Correspondingly, A "fatal error" handler was written, to display and save fatal errors from within TrustZone.
|
||||
+ **Please Note:** Atmosphere is still not properly usable on Mariko hardware.
|
||||
+ In particular, wake-from-sleep will not properly function (the magic numbers aren't set correctly), among a few other minor issues.
|
||||
+ `exosphère` received support for building under debug configuration.
|
||||
+ A small (otherwise unused) portion of IRAM is now reserved for debug-only exosphere code (this region is unused/untouched under release config).
|
||||
+ This enables logging (including printf) to uart from the secure monitor, for those interested.
|
||||
+ A number of bugs were fixed, including:
|
||||
+ Minor issues in a number of filesystem related code were fixed.
|
||||
+ An issue was fixed that could cause NCM to abort on consoles which came with 3.0.x and were never updated.
|
||||
+ Several issues were fixed, and usability and stability were improved.
|
||||
## 0.15.0
|
||||
+ fusee-primary's panic display was updated to automatically identify and give suggestions to resolve many of the most common errors users encounter.
|
||||
+ Having been tested as well as I can alone, `mesosphere` (atmosphère's reimplementation of the Nintendo Switch kernel) is now available for users interested in trying it.
|
||||
+ Beginning in this release and until it is stable and well-tested, atmosphère will distribute two zips.
|
||||
+ Users who wish to opt-in to mesosphere should download and extract the "cool kids" zip ("atmosphere-EXPERIMENTAL-").
|
||||
+ Users who do not wish to use mesosphere should continue using the normal zip ("atmosphere-").
|
||||
+ Users may detect whether mesosphere is active in system settings.
|
||||
+ When mesosphere is active, the system version string will display "M.15.0" rather than "0.15.0", and so on for future releases.
|
||||
+ Crash reports and the like will contain information on whether or not the user is using mesosphere, as well.
|
||||
+ There are "probably" no material user-facing benefits to using mesosphere at this time.
|
||||
+ Developers may be interested in the fact that mesosphere provides many newer SVC APIs even when on lower firmware versions.
|
||||
+ The primary benefit to using mesosphere is that any issues you may encounter and report to me will be fixed.
|
||||
+ All users who choose to opt in to using mesosphere have my deepest gratitude.
|
||||
+ **Note:** If using hekate instead of fusee-primary, you will have to wait for the next hekate release for mesosphere to function, as hekate's support has not yet been included in an official release build.
|
||||
+ This will be updated in the release notes when hekate provides a new release.
|
||||
+ As mentioned in previous release notes, when mesosphere is stable and well-tested, it will be enabled by default and atmosphère's version will transition to 1.0.0.
|
||||
+ Having been tested sufficiently over the last half-year, Atmosphere's NCM implementation is now opt-out, rather than opt in.
|
||||
+ In the unlikely event that any issues are encountered, please report them to @SciresM.
|
||||
+ Users interested in opting out of using our implementation should set `stratosphere!disable_ncm = 1` in BCT.ini.
|
||||
+ The NCM implementation will stop being opt-out in a future update, probably around the same time that mesosphere becomes opt-out instead of opt-in.
|
||||
+ Several bugs were fixed, including:
|
||||
+ Loader now sets HBL's thread priority to a higher value when loading it in applet mode.
|
||||
+ This fixes an extremely-slow launch ("hang") when using applet-HBL with certain games that do not suspend while inactive (e.g. Super Mario Sunshine).
|
||||
+ set.mitm now caches user language configuration much more heavily.
|
||||
+ This severely reduces lag in certain games which misuse the "nn::oe::GetDesiredLanguage()" API.
|
||||
+ A bug was fixed that could cause erpt to fatal when loading an official save file that had error report attachments in it.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.14.4
|
||||
+ Several bugs were fixed involving the official jit sysmodule added in 10.0.0.
|
||||
+ A Process handle leak was fixed when JitPlugin NRRs were registered with the `ro` sysmodule.
|
||||
+ This prevented processes using jit from being able to exit, causing a full system freeze.
|
||||
+ The `sm` atmosphere extension to not unregister services when the server's connection is closed was special-case disabled for `jit:u`.
|
||||
+ This extension is normally desirable in order to allow more concurrent processes to exist (as only 0x40 sm connections may ever be concurrently open), but official jit sysmodule relies on the behavior.
|
||||
+ This would cause crashes on attempts to launch a program using jit services more than once per reboot.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.14.3
|
||||
+ Support was added for 10.2.0.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.14.2
|
||||
+ A bug was fixed that could cause a deadlock when installing mitm services.
|
||||
+ Fixing this required a breaking change to the client behavior when installing a mitm service, and so custom sysmodules which use mitm will need to be re-compiled to function properly.
|
||||
+ A bug was fixed that caused atmosphere sysmodules to respond incorrectly when receiving invalid messages.
|
||||
+ A bug was fixed that caused fatal auto-reboot timing to work improperly.
|
||||
+ Support was added to fusee for loading binaries for `mesosphere`, atmosphère's reimplementation of the Nintendo Switch kernel.
|
||||
+ 0.14.2 does not include mesosphere, but those who are especially interested can build and test mesosphere themselves.
|
||||
+ In the future, to enable a sufficient testing period Atmosphère releases will distribute two zips for some time.
|
||||
+ One zip will use mesosphere, and the other will not.
|
||||
+ This will allow users who are interested to opt-in to mesosphere usage before it has been tested to be stable.
|
||||
+ When mesosphere is stable and well-tested, it will be enabled by default and Atmosphère's version will transition to 1.0.0.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.14.1
|
||||
+ An issue was fixed in 0.14.0 that would cause a black screen on boot when the INI1's size was not aligned to 8 bytes.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.14.0
|
||||
+ An API (`ams:su`) was added to allow homebrew to safely install system upgrades or downgrades.
|
||||
+ This is a re-implementation of the logic that `ns` uses to install gamecard system updates.
|
||||
+ Nintendo (and now atmosphère) uses an installation process that can recover no matter where a failure occurs, which should significantly improve the safety of custom system update installation.
|
||||
+ Support was added to `exosphère` for running on Mariko hardware.
|
||||
+ **Please note**: Atmosphère still does not support Mariko, and should not be run on Mariko yet.
|
||||
+ Certain stratosphere components do not handle mariko-specific logic fully correctly yet, and may initialize or interact with hardware incorrectly.
|
||||
+ This will be fixed and support will be added over the remainder of the Summer.
|
||||
+ A homebrew application (`daybreak`) was added that uses the system updater API (with thanks to @Adubbz for both design and implementation).
|
||||
+ `daybreak` is included with atmosphère, and functions as a safer/more accurate equivalent to e.g. ChoiDujourNX.
|
||||
+ Upgrades/downgrades can be installed from a folder containing the update NCAs on the SD card.
|
||||
+ Because the update logic functions identically to Nintendo's, `daybreak` will be safe to use on Mariko when the rest of atmosphère has support.
|
||||
+ **Please note**: Daybreak requires that meta (.cnmt) NCAs have the correct extension `.cnmt.nca`.
|
||||
+ This is because gamecard system update logic uses extension to determine whether to mount the content.
|
||||
+ [Several](https://gist.github.com/HookedBehemoth/df36b5970e1c5b1b512ec7bdd9043c6e) [scripts](https://gist.github.com/antiKk/279966c27fdfd9c7fe63b4ae410f89c4) have been made by community members to automatically rename folders with incorrect extensions.
|
||||
+ A bug was fixed that would cause file-based emummc to throw an error (showing a hexdump) on boot.
|
||||
+ Major thanks to @hexkyz for tracking down and resolving this.
|
||||
+ A number of minor issues were resolved, including:
|
||||
+ fusee now prints information to the screen when an error occurs, instead of getting stuck trying to initialize the display.
|
||||
+ A race condition in Horizon was worked around that could prevent boot under certain circumstances.
|
||||
+ A bug was fixed that would cause atmosphère modules to open ten copies of certain filesystems instead of one.
|
||||
+ This could cause object exhaustion under certain circumstances.
|
||||
+ For those interested in atmosphère's future development plans, the project's [roadmap](https://github.com/Atmosphere-NX/Atmosphere/blob/ac9832c5ce7be5832f6d29f6564a9c03e7efd22f/docs/roadmap.md) was updated.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 0.13.0
|
||||
+ `exosphère`, atmosphère's secure monitor re-implementation, was completely re-written.
|
||||
+ `exosphère` was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code.
|
||||
+ This has made the codebase difficult to maintain as time has gone on.
|
||||
+ `exosphère` was also written to conform to constraints and assumptions that simply no longer apply when cfw is not launched from the web browser, and when warmboothax is possible.
|
||||
+ Even beyond these issues, `exosphère` used all but 1KB of the 64KB of space available to it. This was a problem for a few reasons:
|
||||
+ Each new system update added requires additional space to support (to add new keys and reflect various changes); 10.0.0 support used up 3 of the 4KB we had left.
|
||||
+ atmosphère will want to have software support for mariko hardware, and this is not possible to fit in 1 KB.
|
||||
+ The `exosphère` rewrite (which was codenamed `exosphère2` during development) solves these problems.
|
||||
+ The new codebase is C++20 written in atmosphère's style.
|
||||
+ This solves the maintainability problem, and should make understanding how the secure monitor works *much* easier for those interested in using the code as a reference implementation.
|
||||
+ In addition, the new implementation currently uses ~59.5 of the 64KB available.
|
||||
+ Several potential code changes are planned that can save/grant access to an additional ~2-3 KB if needed.
|
||||
+ Unlike the first codebase, the new `exosphère` actually already has space allocated for future keys/etc. It is currently expected that the reserved space will never be required.
|
||||
+ The previous implementation chose not to implement a number of "unimportant" secure monitor functions due to space concerns. The new code has enough breathing room that it can implement them without worries. :)
|
||||
+ Finally, the groundwork for mariko support has been laid -- there are only a few minor changes needed for the new secure monitor implementation to work on both erista and mariko hardware.
|
||||
+ **Please note**: `exosphère` is only one of many components, and many more need changes to support running on mariko hardware.
|
||||
+ Software-side support for executing on mariko hardware is expected some time during Summer 2020, though it should also be noted that this is not a hard deadline.
|
||||
+ **Please note**: The new `exosphère` binary is not abi-compatible with the old one. Users who boot using hekate should wait for it to update before running 0.13.0 (or boot fusee-primary via hekate).
|
||||
+ atmosphère's api for target firmware was changed. All minor/micro system versions are now recognized, instead of only major versions.
|
||||
+ This was required in order to support firmware version 5.1.0, which made breaking changes to certain IPC APIs that caused atmosphère 0.12.0 to abort.
|
||||
+ **Please note**: this is (unavoidably) a breaking change. System modules using atmosphere-libs will need to update to understand what firmware version they are running.
|
||||
+ `emummc` was updated to include the new changes.
|
||||
+ `emummc` now uses an updated/improved/faster SDMMC driver.
|
||||
+ File-based emummc is now almost as fast as raw partition-based emummc.
|
||||
+ For those interested in atmosphère's future development plans, the project's [roadmap](https://github.com/Atmosphere-NX/Atmosphere/blob/f68d33b70aed8954cc2c539e5934bcaf37ba51da/docs/roadmap.md) was updated.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.12.0
|
||||
+ Configuration for exosphere was moved to sd:/exosphere.ini.
|
||||
+ This is to facilitate BIS protection changes described below.
|
||||
+ Hopefully having this outside of the Atmosphere folder will prevent accidental deletion, since this now contains important settings.
|
||||
+ Atmosphere's bis protection policy for the PRODINFO partition was substantially reworked.
|
||||
+ Support was added for "automatically" performing a "blanking" operation to PRODINFO without actually modifying NAND.
|
||||
+ This is equivalent to using the "incognito" homebrew tool, but NAND is never actually modified.
|
||||
+ This can be turned on in sysmmc by setting `blank_prodinfo_sysmmc=1` in exosphere.ini, and in emummc by setting `blank_prodinfo_emummc=1` in exosphere.ini.
|
||||
+ **Please note**: This is not known to be safe. There is a lack of research on whether the information blanked out is cached elsewhere in the system.
|
||||
+ Usage of this option is not encouraged for this reason.
|
||||
+ Support was added for writing to the PRODINFO partition, if a verified encrypted backup has been made.
|
||||
+ PRODINFO is the only system data that cannot be recovered if not backed up, and thus Atmosphere has backed it up to the SD card on boot for some time now.
|
||||
+ Users who wish to modify their calibration data may now do so unconditionally in emummc, and in sysmmc if `allow_writing_to_cal_sysmmc=1` is set in exosphere.ini.
|
||||
+ **Please note**: This is heavily discouraged, and the typical user will almost never want to do this.
|
||||
+ Setting this option will cause Atmosphere to attempt to verify (or create) an encrypted backup of the PRODINFO data to an unused region in the partition.
|
||||
+ The backup is encrypted with per-console keys that Atmosphere's developers do not know.
|
||||
+ If the backup is not verified or created, writes will not work. Users who have corrupted their PRODINFO in the past are encouraged to flash a good backup to allow use of this setting.
|
||||
+ Reads and writes to the region used for the securely encrypted backup will appear to succeed, but will actually read/write from a buffer filled with garbage in memory.
|
||||
+ Support will be investigated in the future for supporting booting with fully blanked calibration.
|
||||
+ This is desirable to allow boot to succeed for users who lost their calibration data due to bricking homebrew before bis protection was implemented.
|
||||
+ `creport` has been updated to use the new screenshot APIs added in 9.0.0+.
|
||||
+ On 10.0.0+, if a crash occurs in an application (not applet or sysmodule) a screenshot will now be automatically saved to the SD card.
|
||||
+ If the user applies a patch to vi on 9.0.0 (as the command this uses was previously for dev-units only), this can also work on 9.0.0.
|
||||
+ The new sysmodule `pgl` added in 10.0.0 was reimplemented.
|
||||
+ `pgl` ("Program Launcher", probably) is responsible for managing launched user-processes, previously this was handled by NS.
|
||||
+ The most exciting thing about pgl is that it finally provides an API for multiple clients to subscribe to process events.
|
||||
+ Using these new APIs, system modules / other homebrew can subscribe to be notified whenever a process event occurs.
|
||||
+ This means action can be taken on process launch, process exit, process crash, etc.
|
||||
+ A slight concern with Nintendo's implementation is that each subscriber object uses 0x448 bytes of memory, and N only reserves 8KB for all allocations in pgl.
|
||||
+ Atmosphere's implementation uses a 32KB heap, which should not be exhaustible.
|
||||
+ Atmosphere's implementation has a total memory footprint roughly 0x28000 bytes smaller than Nintendo's.
|
||||
+ A reimplementation was added for the `jpegdec` system module (thanks @HookedBehemoth)!
|
||||
+ This allows two sessions instead of 1, so homebrew can now use it for software jpeg decoding in addition to the OS itself.
|
||||
+ As usual the implementation has a very slightly smaller memory footprint than Nintendo's.
|
||||
+ `dmnt`'s Cheat VM was extended to add three new opcodes.
|
||||
+ The first new opcode, "ReadWriteStaticRegister", allows for cheats to read from a bank of 128 read-only static registers, and write to a bank of 128 write-only static registers.
|
||||
+ This can be used in concert with new IPC commands that allow a cheat manager to read or write the value of these static registers to have "dynamic" cheats.
|
||||
+ As an example, a cheat manager could write a value to a static register that a cheat to control how many of an item to give in a game.
|
||||
+ As another example, a cheat manager could read a static register that a cheat writes to to learn how many items a player has.
|
||||
+ The second and third opcodes are a pair, "PauseProcess" and "ResumeProcess".
|
||||
+ Executing pause process in a cheat will pause the game (it will be frozen) until a resume process opcode is used.
|
||||
+ These are also available over IPC, for cheat managers or system modules that want to pause or resume the attached cheat process.
|
||||
+ This allows a cheat to know that the game won't modify or access data the cheat is accessing.
|
||||
+ For example, this can be used to prevent Pokemon from seeing a pokemon a cheat is in the middle of injecting and turning it into a bad egg.
|
||||
+ A bug was fixed that would cause the console to crash when connected to Wi-Fi on versions between 3.0.0 and 4.1.0 inclusive.
|
||||
+ A bug was fixed that could cause boot to fail sporadically due to cache/tlb mismanagement when doing physical ASLR of the kernel.
|
||||
+ A number of other minor issues were addressed (and more of Atmosphere was updated to reflect other changes in 10.0.x).
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.11.1
|
||||
+ A bug was fixed that could cause owls to flicker under certain circumstances.
|
||||
+ For those interested in technical details, in 10.0.0 kernelldr/kernel no longer set cpuactlr_el1, assuming that it was set correctly by the secure monitor.
|
||||
+ However, exosphere did not set cpuactlr_el1. This meant that the register held the reset value going into boot.
|
||||
+ This caused a variety of highly erratic symptoms, including causing basically any game to crash seemingly randomly.
|
||||
+ A number of other major inaccuracies in exosphere were corrected.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.11.0
|
||||
+ Support was added for 10.0.0.
|
||||
+ Exosphere has been updated to reflect the new key import semantics in 10.0.0.
|
||||
+ kernel_ldr now implements physical ASLR for the kernel's backing pages.
|
||||
+ Loader, NCM, and PM have been updated to reflect the changes Nintendo made in 10.0.0.
|
||||
+ Creport was updated to use the new `pgl` service to terminate processes instead of `ns:dev`.
|
||||
+ A reimplementation of the `erpt` (error reports) system module was added.
|
||||
+ In previous versions of Atmosphere, a majority of error reports were prevented via a combination of custom creport, fatal, and stubbed eclct.
|
||||
+ However, error reports were still generated via some system actions.
|
||||
+ Most notably, any time the error applet appeared, an error report was generated.
|
||||
+ By default, atmosphere disabled the *uploading* of error reports, but going online in OFW after an error report occurred in Atmosphere could lead to undesirable telemetry.
|
||||
+ Atmosphere's `erpt` reimplementation allows the system to interact with existing error reports as expected.
|
||||
+ However, all new error reports are instead saved to the sd card (`/atmosphere/erpt_reports`), and are not committed to the system savegame.
|
||||
+ Users curious about what kind of telemetry is being prevented can view the reports as they're generated in there.
|
||||
+ Reports are saved as msgpack (as this is what Nintendo uses).
|
||||
+ Please note, not all telemetry is disabled. Play reports and System reports will continue to function unmodified.
|
||||
+ With atmosphere's `erpt` implementation, homebrew can now use the native error applet to display errors without worrying about generating undesirable telemetry.
|
||||
+ libstratosphere and libvapours received a number of improvements.
|
||||
+ With thanks to @Adubbz for his work, the NCM namespace now has client code.
|
||||
+ This lays the groundwork for first-class system update/downgrade homebrew support in the near future.
|
||||
+ In particular, code implementing the os namespace is significantly more accurate.
|
||||
+ In addition, Nintendo's allocators were implemented, allowing for identical memory efficiency versus Nintendo's implementations.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.5
|
||||
+ Changes were made to the way fs.mitm builds images when providing a layeredfs romfs.
|
||||
+ Building romfs metadata previously had a memory cost of about ~4-5x the file table size.
|
||||
+ This caused games that have particularly enormous file metadata tables (> 4 MB) to exhaust fs.mitm's 16 MB memory pool.
|
||||
+ The code that creates romfs images was thus changed to be significantly more memory efficient, again.
|
||||
+ Memory requirements have been lowered from ~4x file table size to ~2x file table size + 0.5 MB.
|
||||
+ There is a slight speed penalty to this, but testing on Football Manager 2020 only took an extra ~1.5 seconds for the game to boot with many modded files.
|
||||
+ This shouldn't be noticeable thanks to the async changes made in 0.10.2.
|
||||
+ If you encounter a game that exhausts ams.mitm's memory (crashing it) when loading layeredfs mods, please contact SciresM.
|
||||
+ Romfs building can be made even more memory efficient, but unless games show up with even more absurdly huge file tables it seems not worth the speed trade-off.
|
||||
+ A bug was fixed that caused Atmosphere's fatal error context to not dump TLS for certain processes.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.4
|
||||
+ With major thanks to @Adubbz for his work, the NCM system module has now been re-implemented.
|
||||
+ This was a major stepping stone towards the goal of having implementations everything in the Switch's package1/package2 firmware.
|
||||
+ This also lays the groundwork for libstratosphere providing bindings for changing the installed version of the Switch's OS.
|
||||
+ **Please Note**: The NCM implementation will initially be opt-in.
|
||||
+ The Atmosphere team is confident in our NCM implementation (and we have tested it on every firmware version).
|
||||
+ That said, this is our first system module that manages NAND savegames -- and caution is a habit.
|
||||
+ We do not anticipate any issues that didn't come up in testing, so this is just our being particularly careful.
|
||||
+ Users interested in opting in to using our implementation should set `stratosphere!ncm_enabled = 1` in BCT.ini.
|
||||
+ In the unlikely event that any issues are encountered, please report them to @SciresM.
|
||||
+ The NCM implementation will stop being opt-in in a future update, after thorough testing has been done in practice.
|
||||
+ A bug was fixed in emummc that caused Nintendo path to be corrupted on 1.0.0.
|
||||
+ This manifested as the emummc folder being created inside the virtual NAND instead of the SD card.
|
||||
+ It's unlikely there are any negative consequences to this in practice.
|
||||
+ If you want to be truly sure, you can re-clone sysmmc before updating a 1.0.0 emummc to latest firmware.
|
||||
+ Stratosphere system modules now use new Nintendo-style FS bindings instead of stdio.
|
||||
+ This saves a modest amount of memory due to leaner code, and greatly increases the accuracy of several components.
|
||||
+ These bindings will make it easier for other system modules using libstratosphere to interact with the filesystem.
|
||||
+ This also lays the groundwork for changes necessary to support per-emummc Atmosphere folders in a future update.
|
||||
+ Atmosphere's fatal error context now dumps 0x100 of TLS.
|
||||
+ This will make it much easier to fix bugs when an error report is dumped for whatever caused the crash.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.3
|
||||
+ Support was added for 9.2.0.
|
||||
+ Support was added for redirecting manual html content for games.
|
||||
+ This works like normal layeredfs, replacing content placed in `/atmosphere/contents/<program id>/manual_html/`.
|
||||
+ This allows for game mods/translations to provide custom manual content, if they so choose.
|
||||
+ A number of improvements were made to Atmosphere's memory usage, including:
|
||||
+ `fatal` now uses STB instead of freetype for rendering.
|
||||
+ This saves around 1 MB of memory, and makes our fatal substantially leaner than Nintendo's.
|
||||
+ `sm` no longer wastes 2 MiB unnecessarily.
|
||||
+ fusee/sept's sdmmc access now better matches official behavior.
|
||||
+ This improves compatibility with some SD cards.
|
||||
+ `ro` has been updated to reflect changes made in 9.1.0.
|
||||
+ The temporary auto-migration added in 0.10.0 has been removed, since the transitionary period is well over.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.2
|
||||
+ hbl configuration was made more flexible.
|
||||
+ Up to eight specific program ids can now be specified to have their own override keys.
|
||||
+ This allows designating both the album applet and a specific game as hbl by default as desired.
|
||||
+ Configuration targeting a specific program is now mutually exclusive with override-any-app for that program.
|
||||
+ This fixes unintuitive behavior when override key differed for an application specific program.
|
||||
+ Loader's external content fileystem support was fixed (thanks @misson20000!).
|
||||
+ KernelLdr was reimplemented.
|
||||
+ This is the first step towards developing mesosphere, Atmosphere's planned reimplementation of the Switch's Kernel.
|
||||
+ The typical user won't notice anything different, as there are no extensions, but a lot of groundwork was laid for future development.
|
||||
+ Improvements were made to the way Atmosphere's buildsystem detects source code files.
|
||||
+ This significantly reduces compilation time (saving >30 seconds) on the machine that builds official releases.
|
||||
+ Certain device code was cleaned up and made more correct in fusee/sept/exosphere (thanks @hexkyz!).
|
||||
+ A number of changes were made to the way fs.mitm builds images when providing a layeredfs romfs.
|
||||
+ Some games (Resident Evil 6, Football Manager 2020 Touch, possibly others) have enormous numbers of files.
|
||||
+ Attempting to create a layeredfs mod for these games actually caused fs.mitm to run out of memory, causing a fatal error.
|
||||
+ The code that creates these images was changed to be significantly more memory efficient.
|
||||
+ However, these changes also cause a significant slowdown in the romfs building code (~2-5x).
|
||||
+ This introduced a noticeable stutter when launching a game, because the UI thread would block on the romfs creation.
|
||||
+ To solve this, fs.mitm now lazily initializes the image in a background thread.
|
||||
+ This fixes stutter issues, however some games may be slightly slower (~1-2s in the worst cases) to transition from the "loading" GIF to gameplay now.
|
||||
+ Please note: the slowdown is not noticeable in the common case where games don't have tons of files (typical is ~0.1-0.2 seconds).
|
||||
+ Once the image has been built, there is no further speed penalty at runtime -- only when the game is launched.
|
||||
+ A number of other bugs were fixed, including:
|
||||
+ Several minor logic inversions that could have caused fatal errors when modding games.
|
||||
+ Atmosphere's new-ipc code did not handle "automatic" recvlist buffers correctly, so some non-libnx homebrew could crash.
|
||||
+ fs.mitm now correctly mitms sdb, which makes redirection of certain system data archives work again.
|
||||
+ In 0.10.0/0.10.1, changing the system font/language did not work correctly due to this.
|
||||
+ A bug was fixed in process cleanup that caused the system to hang on < 5.0.0.
|
||||
+ The temporary hid-mitm added in Atmosphere 0.9.0 was disabled by default.
|
||||
+ Please ensure your homebrew is updated.
|
||||
+ For now, users may re-enable this mitm by use of a custom setting (`atmosphere!enable_deprecated_hid_mitm`) to ease the transition process some.
|
||||
+ Please note: support for this setting may be removed to save memory in a future atmosphere release.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.1
|
||||
+ A bug was fixed that caused memory reallocation to the system pool to work improperly on firmware 5.0.0 and above.
|
||||
+ Atmosphere was always trying to deallocate memory away from the applet pool and towards the system pool.
|
||||
+ The intent of this is to facilitate running more custom sysmodules/atmosphere binaries.
|
||||
+ However, while memory was always successfully taken away from the applet pool, on 5.0.0+ granting it to the system pool did not work for technical reasons.
|
||||
+ If you are interested in the technical details, talk to SciresM.
|
||||
+ This has now been fixed by adding new kernel patches, and memory is correctly granted to the system pool as intended.
|
||||
+ Atmosphere's library system has been overhauled:
|
||||
+ libstratosphere's repository has been rebranded, more generally, to "Atmosphere-libs".
|
||||
+ In addition to libstratosphere, a new general library for not-stratosphere-specific code has been added.
|
||||
+ This is currently named `libvapours`.
|
||||
+ In the future, kernel functionality will be available as `libmesosphere`.
|
||||
+ The build system for stratosphere system modules has been similarly overhauled.
|
||||
+ A number of other bugs were fixed, including:
|
||||
+ A bug was fixed that could cause memory corruption when redirecting certain Romfs content.
|
||||
+ A bug was fixed that could cause an infinite loop when redirecting certain Romfs content.
|
||||
+ A bug was fixed that could cause certain NROs to fail to load.
|
||||
+ This caused the latest version of Super Smash Bros to display "An error has occurred" on launch.
|
||||
+ A bug was fixed that caused input/output array sizes for certain circumstances to be calculated incorrectly.
|
||||
+ This caused cheats to fail to function properly.
|
||||
+ C++ exception code is now more thoroughly removed from stratosphere executables.
|
||||
+ This saves a minor amount of memory.
|
||||
+ A number of minor logic inversions were fixed in libstratosphere.
|
||||
+ These did not affect any code currently used by released Atmosphere binaries.
|
||||
+ *Please note**: Because this update is releasing so soon after 0.10.0, the removal of the temporary hid-mitm has been postponed to 0.10.2.
|
||||
+ Please ensure your homebrew is updated.
|
||||
+ Random number generation now uses TinyMT instead of XorShift.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.10.0
|
||||
+ Support was added for 9.1.0
|
||||
+ **Please note**: The temporary hid-mitm added in Atmosphere 0.9.0 will be removed in Atmosphere 0.10.1.
|
||||
+ Please ensure your homebrew is updated.
|
||||
+ The Stratosphere rewrite was completed.
|
||||
+ libstratosphere was rewritten as part of Stratosphere's refactor.
|
||||
+ Code responsible for providing and managing IPC services was greatly improved.
|
||||
+ The new code is significantly more accurate (it is bug-for-bug compatible with Nintendo's code), and significantly faster.
|
||||
+ ams.mitm was rewritten as part of Stratosphere's refactor.
|
||||
+ Saves redirected to the SD card are now separated for sysmmc vs emummc.
|
||||
+ **Please note**: If you find any bugs, please report them so they can be fixed.
|
||||
+ Thanks to the rewrite, Atmosphere now uses significantly less memory.
|
||||
+ Roughly 10 additional megabytes are now available for custom system modules to use.
|
||||
+ This means you can potentially run more custom system modules simultaneously.
|
||||
+ If system modules are incompatible, please ask their authors to reduce their memory footprints.
|
||||
+ Atmosphere's configuration layout has had major changes.
|
||||
+ Configuration now lives inside /atmosphere/config/.
|
||||
+ Atmosphere code now knows what default values should be, and includes them in code.
|
||||
+ It is no longer an error if configuration inis are not present.
|
||||
+ Correspondingly, Atmosphere no longer distributes default configuration inis.
|
||||
+ Templates are provided in /atmosphere/config_templates.
|
||||
+ loader.ini was renamed to override_config.ini.
|
||||
+ This fixes the longstanding problem that atmosphere updates overwrote user configuration when extracted.
|
||||
+ Atmosphere's process override layout was changed.
|
||||
+ Atmosphere now uses the /atmosphere/contents directory, instead of /atmosphere/titles.
|
||||
+ This goes along with a refactoring to remove all reference to "title id" from code, as Nintendo does not use the term.
|
||||
+ To make this transition easier, a temporary functionality has been added that migrates folders to the new directory.
|
||||
+ When booting into 0.10.0, Atmosphere will rename /atmosphere/titles/`<program id>` to /atmosphere/contents/`<program id>`.
|
||||
+ This functionality may or may not be removed in some future update.
|
||||
+ This should solve any transition difficulties for the typical user.
|
||||
+ Please make sure that any future mods you install extract to the correct directory.
|
||||
+ Support for configuring override keys for hbl was improved.
|
||||
+ The key used to override applications versus a specific program can now be different.
|
||||
+ The key to override a specific program can be managed via override_key.
|
||||
+ The key to override any app can be managed via override_any_app_key.
|
||||
+ Default override behavior was changed.
|
||||
+ By default, atmosphere will now override the album applet with hbl unless R is held.
|
||||
+ By default, atmosphere will now override any application with hbl only if R is held.
|
||||
+ The default amount of applet memory reserved has been slightly increased.
|
||||
+ This allows the profile selector applet to work by default in applet mode.
|
||||
+ The way process override status is captured was changed.
|
||||
+ Process override keys are now captured exactly once, when the process is created.
|
||||
+ This fixes the longstanding issue where letting go of the override button partway into the process launch could cause problems.
|
||||
+ The Mitm API was changed to pass around override status.
|
||||
+ Mitm services now know what keys were held when the client was created, as well as whether the client is HBL/should override contents.
|
||||
+ An extension was added to pm:info to allow querying a process's override status.
|
||||
+ Thanks to process override capture improvements, hbl html behavior has been greatly improved.
|
||||
+ Web applets launched by hbl will now always see the /atmosphere/hbl_html filesystem
|
||||
+ Support was added to exosphere for enabling usermode access to the PMU registers.
|
||||
+ This can be controlled via exosphere!enable_user_pmu_access in BCT.ini.
|
||||
+ An enormous number of minor bugs were fixed.
|
||||
+ dmnt's cheat VM had a fix for an inversion in opcode behavior.
|
||||
+ An issue was fixed in fs.mitm's management of domain object IDs that could lead to system corruption in rare cases.
|
||||
+ The Mitm API no longer silently fails when attempting to handle commands passing C descriptors.
|
||||
+ On previous atmosphere versions, certain commands to FS would silently fail due to this...
|
||||
+ No users reported any visible errors, but it was definitely a problem behind the scenes.
|
||||
+ These commands are now handled correctly.
|
||||
+ Atmosphere can now display a fatal error screen significantly earlier in the boot process, if things go wrong early on.
|
||||
+ The temporary hid mitm will no longer sometimes cause games to fail to detect input.
|
||||
+ Mitm Domain object ID management no longer desynchronizes from the host process.
|
||||
+ An issue was fixed that could cause service acquisition to hang forever if certain sm commands were called in a precise order.
|
||||
+ An off-by-one was fixed that could cause memory corruption in server memory management.
|
||||
+ ... and too many more bugs fixed to reasonably list them all :)
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.9.4
|
||||
+ Support was added for 9.0.0.
|
||||
+ **Please note**: 9.0.0 made a number of changes that may cause some issues with homebrew. Details:
|
||||
+ 9.0.0 changed HID in a way that causes libnx to be unable to detect button input.
|
||||
+ Homebrew should be recompiled with newest libnx to fix this.
|
||||
+ Atmosphere now provides a temporary hid-mitm that will cause homebrew to continue to work as expected.
|
||||
+ This mitm will be removed in a future Atmosphere revision once homebrew has been updated, to allow users to use a custom hid mitm again if they desire.
|
||||
+ 9.0.0 introduced an dependency in FS on the USB system module in order to launch the SD card.
|
||||
+ This means the USB system module must now be launched before the SD card is initialized.
|
||||
+ Correspondingly, the USB system module can no longer be IPS patched, and its settings cannot be reliably mitm'd.
|
||||
+ We know this is frustrating, so we'll be looking into whether there is some way of addressing this in the future.
|
||||
+ An off-by-one error was fixed in `boot` system module's pinmux initialization.
|
||||
+ This could theoretically have caused issues with HdmiCec communication.
|
||||
+ No users reported issues, so it's unclear if this was a problem in practice.
|
||||
+ A bug was fixed that could cause webapplet launching homebrew to improperly set the accessible url whitelist.
|
||||
+ BIS key generation has been fixed for newer hardware.
|
||||
+ Newer hardware uses new, per-firmware device key to generate BIS keys instead of the first device key, so previously the wrong keys were generated as backup.
|
||||
+ This only affects units manufactured after ~5.0.0.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.9.3
|
||||
+ Thanks to hexkyz, fusee's boot sequence has been greatly optimized.
|
||||
+ Memory training is now managed by a separate binary (`fusee-mtc`, loaded by fusee-primary before fusee-secondary).
|
||||
+ Unnecessarily long splash screen display times were reduced.
|
||||
+ The end result is that Atmosphere now boots *significantly* faster. :)
|
||||
+ **Note:** This means fusee-primary must be updated for Atmosphere to boot successfully.
|
||||
+ The version string was adjusted, and now informs users whether or not they are using emummc.
|
||||
+ Atmosphere now automatically backs up the user's BIS keys on boot.
|
||||
+ This should prevent a user from corrupting nand without access to a copy of the keys needed to fix it.
|
||||
+ This is especially relevant on ipatched units, where the RCM vulnerability is not an option for addressing bricks.
|
||||
+ The `pm` system module was rewritten as part of Stratosphere's ongoing refactor.
|
||||
+ Support was added for forward-declaring a mitm'd service before a custom user sysmodule is launched.
|
||||
+ This should help resolve dependency issues with service registration times.
|
||||
+ SM is now informed of every process's title id, including built-in system modules.
|
||||
+ The `creport` system module was rewritten as part of Stratosphere's ongoing refactor.
|
||||
+ creport now dumps up to 0x100 of stack from each thread in the target process.
|
||||
+ A few bugs were fixed, including one that caused creport to incorrectly dump process dying messages.
|
||||
+ Defaults were added to `system_settings.ini` for controlling hbloader's memory usage in applet mode.
|
||||
+ These defaults reserve enough memory so that homebrew can launch swkbd while in applet mode.
|
||||
+ The `fatal` system module was rewritten as part of Stratosphere's ongoing refactor.
|
||||
+ Incorrect display output ("2000-0000") has been fixed. Fatal will now correctly show 2162-0002 when this occurs.
|
||||
+ A longstanding bug in how fatal manages the displays has been fixed, and official display init behavior is now matched precisely.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.9.2
|
||||
+ A number of emummc bugfixes were added (all thanks to @m4xw's hard work). The following is a summary of emummc changes:
|
||||
+ Support for file-based emummc instances was fixed.
|
||||
+ Please note: file-based emummc is still unoptimized, and so may be much slower than partition-based.
|
||||
+ This speed differential should hopefully be made better in a future emummc update.
|
||||
+ The way emummc handles power management was completely overhauled.
|
||||
+ Emummc now properly handles init/de-init, and now supports low voltage mode.
|
||||
+ Much better support for shutdown was added, which should assuage corruption/synchronization problems.
|
||||
+ This should also improve support for more types of SD cards.
|
||||
+ A bug was fixed that caused emummc to not work on lower system versions due to missing SVC access.
|
||||
+ **Please note**: The configuration entries used for emummc have been changed.
|
||||
+ `emummc_` prefixes have been removed, since they are superfluous given the `emummc` category they are under.
|
||||
+ As an example, `emummc!emummc_enabled` is now `emummc!enabled`.
|
||||
+ INI configurations made by @CTCaer's [tool](https://github.com/ctcaer/hekate/releases/latest) (which is the recommended way to manage emummc) should automatically work as expected/be corrected.
|
||||
+ **If you do not wish to use the above, you will need to manually correct your configuration file**.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
+ Stratosphere is currently in the process of being re-written/refactored.
|
||||
+ Stratosphere was my (SciresM's) first C++ project, ever -- the code written for it a year ago when I was learning C++ is/was of much lower quality than code written more recently.
|
||||
+ Code is thus being re-rwitten for clarity/stlye/to de-duplicate functionality, with much being moved into libstratosphere.
|
||||
+ Stratosphere will, after the rewrite, globally use the `sts::` namespace -- this should greatly enhancing libstratosphere's ability to provide functionality for system modules.
|
||||
+ The rewritten modules consistently have lower memory footprints, and should be easier to maintain going forwards.
|
||||
+ The `sm`, `boot`, `spl`, `ro`, and `loader` modules have been tackled so far.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.9.1
|
||||
+ Support was added for 8.1.0.
|
||||
+ Please note, emummc is still considered **beta/experimental** -- this is not the inevitable bugfix update for it, although some number of bugs have been fixed. :)
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.9.0
|
||||
+ Creport output was improved significantly.
|
||||
+ Thread names are now dumped on crash in addition to 0x100 of TLS from each thread.
|
||||
+ This significantly aids debugging efforts for crashes.
|
||||
+ Support was added for 32-bit stackframes, so reports can now be generated for 32-bit games.
|
||||
+ `dmnt`'s Cheat VM was extended to add a new debug opcode.
|
||||
+ With thanks to/collaboration with @m4xw and @CTCaer, support was added for redirecting NAND to the SD card (emummc).
|
||||
+ Please note, this support is very much **beta/experimental**.
|
||||
+ It is quite likely we have not identified all bugs -- those will be fixed as they are reported over the next few days/weeks.
|
||||
+ In addition, some niceties (e.g. having a separate Atmosphere folder per emummc instance) still need some thought put in before they can be implemented in a way that makes everyone happy.
|
||||
+ If you are not an advanced user, you may wish to think about waiting for the inevitable 0.9.1 bugfix update before using emummc as your default boot option.
|
||||
+ You may especially wish to consider waiting if you are using Atmosphere on a unit with the RCM bug patched.
|
||||
+ Emummc is managed by editing the emummc section of "emummc/emummc.ini".
|
||||
+ To enable emummc, set `emummc!emummc_enabled` = 1.
|
||||
+ Support is included for redirecting NAND to a partition on the SD card.
|
||||
+ This can be done by setting `emummc!emummc_sector` to the start sector of your partition (e.g., `emummc_sector = 0x1A010000`).
|
||||
+ Support is also included for redirecting NAND to a collection of loose files on the SD card.
|
||||
+ This can be done by setting `emummc!emummc_path` to the folder (with archive bit set) containing the NAND boot partitions' files "boot0" and "boot1", and the raw NAND image files "00", "01", "02", etc. (single "00" file with the whole NAND image requires exFAT mode while multipart NAND can be used in both exFAT and FAT32 modes).
|
||||
+ The `Nintendo` contents directory can be redirected arbitrarily.
|
||||
+ By default, it will be redirected to `emummc/Nintendo_XXXX`, where `XXXX` is the hexadecimal representation of the emummc's ID.
|
||||
+ The current emummc ID may be selected by changing `emummc!emummc_id` in emummc.ini.
|
||||
+ This can be set to any arbitrary directory by setting `emummc!emummc_nintendo_path`.
|
||||
+ To create a backup usable for emummc, users may use tools provided by the [hekate](https://github.com/CTCaer/hekate) project.
|
||||
+ If, when using emummc, you encounter a bug, *please be sure to report it* -- that's the only way we can fix it. :)
|
||||
|
||||
## 0.8.10
|
||||
+ A bug was fixed that could cause incorrect system memory allocation on 5.0.0.
|
||||
+ 5.0.0 should now correctly have an additional 12 MiB allocated for sysmodules.
|
||||
+ Atmosphère features which check button presses now consider all controllers, isntead of just P1.
|
||||
+ Support was added for configuring language/region on a per-game basis.
|
||||
+ This is managed by editing `atmosphere/titles/<title id>/config.ini` for the game.
|
||||
+ To edit title language, edit `override_config!override_language`.
|
||||
+ The languages supported are `ja`, `en-US`, `fr`, `de`, `it`, `es`, `zh-CN`, `ko`, `nl`, `pt`, `ru`, `zh-TW`, `en-GB`, `fr-CA`, `es-419`, `zh-Hans`, `zh-Hant`.
|
||||
+ To edit title region, edit `override_config!override_region`.
|
||||
+ The regions supported are `jpn`, `usa`, `eur`, `aus`, `chn`, `kor`, `twn`.
|
||||
+ Atmosphère now provides a reimplementation of the `boot` system module.
|
||||
+ `boot` is responsible for performing hardware initialization, showing the Nintendo logo, and repairing NAND on system update failure.
|
||||
+ Atmosphère's `boot` implementation preserves AutoRCM during NAND repair.
|
||||
+ NAND repair occurs when an unexpected shutdown or error happens during a system update.
|
||||
+ This fixes a final edge case where AutoRCM might be removed by HOS, which could cause a user to burn fuses.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.9
|
||||
+ A number of bugs were fixed, including:
|
||||
+ A data abort was fixed when mounting certain partitions on NAND.
|
||||
+ All Stratosphère system modules now only maintain a connection to `sm` when actively using it.
|
||||
+ This helps mitigate the scenario where sm hits the limit of 64 active connections and crashes.
|
||||
+ This sometimes caused crashes when custom non-Atmosphère sysmodules were active and the user played certain games (ex: Smash's Stage Builder).
|
||||
+ fatal now uses the 8.0.0 clkrst API, instead of silently failing to adjust clock rates on that firmware version.
|
||||
+ A wait loop is now performed when trying to get a session to `sm`, in the case where `sm:` is not yet registered.
|
||||
+ This fixes a race condition that could cause a failure to boot under certain circumstances.
|
||||
+ libstratosphere's handling of domain object closing has been improved.
|
||||
+ Previously, this code could cause crashes/extremely odd behavior (misinterpreting what object a service is) under certain circumstances.
|
||||
+ An optional automatic reboot timer was added to fatal.
|
||||
+ By setting the system setting `atmosphere!fatal_auto_reboot_interval` to a non-zero u64 value, fatal can be made to automatically reboot after a certain number of milliseconds.
|
||||
+ If the setting is zero or not present, fatal will wait for user input as usual.
|
||||
+ Atmosphère now provides a reimplementation of the `ro` system module.
|
||||
+ `ro` is responsible for loading dynamic libraries (NROs) on 3.0.0+.
|
||||
+ On 1.0.0-2.3.0, this is handled by `loader`.
|
||||
+ Atmosphere's `ro` provides this functionality (`ldr:ro`, `ro:dmnt`) on all firmware versions.
|
||||
+ An extension was implemented to provide support for applying IPS patches to NROs.
|
||||
+ All patches at paths like /atmosphere/nro_patches/<user-defined patch name>/<Hex Build-ID for NRO to patch>.ips will be applied, allowing for easy distribution of patches.
|
||||
+ Both the IPS and IPS32 formats are supported.
|
||||
+ Atmosphère now provides a reimplementation of the `spl` system module.
|
||||
+ `spl` (Secure Platform Services) is responsible for cryptographic operations, including all communications with the secure monitor (exosphère).
|
||||
+ In the future, this may be used to provide extensions to the API for interacting with exosphère from userland.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.8
|
||||
+ Support was added for firmware version 8.0.0.
|
||||
+ Custom exception handlers were added to stratosphere modules.
|
||||
+ If a crash happens in a core atmosphere module now, instead of silently failing a reboot will occur to log the information to the SD card.
|
||||
+ A bug was fixed in creport that caused games to hang when crashing under certain circumstances.
|
||||
+ A bug was fixed that prevented maintenance mode from booting on 7.0.0+.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.7
|
||||
+ A few bugs were fixed that could cause fatal to fail to show an error under certain circumstances.
|
||||
+ A bug was fixed that caused an error when launching certain games (e.g. Hellblade: Senua's Sacrifice).
|
||||
+ Loader had support added in ams-0.8.4 for a new (7.0.0+) flag bit in NPDMs during process creation, but forgot to allow this bit to be set when validating the NPDM.
|
||||
+ dmnt's cheat virtual machine received new instructions.
|
||||
+ These allow for saving, restoring, or clearing registers to a secondary bank, effectively doubling the number of values that can be stored.
|
||||
+ SHA256 code has been swapped from linux code to libnx's new hw-accelerated cryptography API.
|
||||
+ Extensions were added to smcGetInfo:
|
||||
+ A ConfigItem was added to detect whether the current unit has the RCM bug patched.
|
||||
+ A ConfigItem was added to retrieve the current Atmosphère build hash.
|
||||
+ Exosphère now tells the kernel to enable user-mode exception handlers, which should allow for better crash reporting/detection from Atmosphère's modules in the future..
|
||||
+ Opt-in support was added for redirecting game save files to directories on the SD card.
|
||||
+ Please note, this feature is **experimental**, and may cause problems. Please use at your own risk (and back up your saves before enabling it), as it still needs testing.
|
||||
+ This can be enabled by setting `atmosphere!fsmitm_redirect_saves_to_sd` to 1 in `system_settings.ini`.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.6
|
||||
+ A number of bugs were fixed, including:
|
||||
+ A case of inverted logic was fixed in fs.mitm which prevented the flags system from working correctly.
|
||||
+ Time service access was corrected in both creport/fatal.
|
||||
+ This fixes the timestamps used in fatal/crash report filenames.
|
||||
+ A coherency issue was fixed in exosphère's Security Engine driver.
|
||||
+ This fixes some instability issues encountered when overclocking the CPU.
|
||||
+ Loader now unmaps NROs correctly, when ldr:ro is used.
|
||||
+ This fixes a crash when repeatedly launching the web applet on < 3.0.0.
|
||||
+ Usage of hidKeysDown was corrected to hidKeysHeld in several modules.
|
||||
+ This fixes a rare issue where keypresses may have been incorrectly detected.
|
||||
+ An issue with code filesystem unmounting was fixed in loader.
|
||||
+ This issue could occasionally cause a fatal error 0x1015 to be thrown on boot.
|
||||
+ Two bugs were fixed in the implementations of dmnt's cheat virtual machine.
|
||||
+ These could cause cheats to work incorrectly under certain circumstances.
|
||||
+ PM now uses a static buffer instead of a dynamically allocated one during process launch.
|
||||
+ This fixes a memory exhaustion problem when building with gcc 8.3.0.
|
||||
+ A workaround for a deadlock bug in Horizon's kernel on >= 6.0.0 was added in dmnt.
|
||||
+ This prevents a system hang when booting certain titles with cheats enabled (ex: Mario Kart 8 Deluxe).
|
||||
+ set.mitm now reads the system firmware version directly from the system version archive, instead of calling into set:sys.
|
||||
+ This fixes compatibility with 1.0.0, which now successfully boots again.
|
||||
+ dmnt's cheat virtual machine had some instruction set changes.
|
||||
+ A new opcode was added for beginning conditional blocks based on register contents.
|
||||
+ More addressing modes were added to the StoreRegisterToAddress opcode.
|
||||
+ These should allow for more complex cheats to be implemented.
|
||||
+ A new system for saving the state of cheat toggles between game boots was added.
|
||||
+ Toggles are now saved to `atmosphere/titles/<title id>/cheats/toggles.txt` when either toggles were successfully loaded from that file or the system setting `atmosphere!dmnt_always_save_cheat_toggles` is non-zero.
|
||||
+ This removes the need for manually setting cheats from all-on or all-off to the desired state on each game boot.
|
||||
+ The default behavior for loader's HBL support was changed.
|
||||
+ Instead of launching HBL when album is launched without R held, loader now launches HBL when album or any game is launched with R held.
|
||||
+ Loader will now override any app in addition to a specific title id when `hbl_config!override_any_app` is true in `loader.ini`.
|
||||
+ Accordingly, the `hbl_config!title_id=app` setting was deprecated. Support will be removed in Atmosphère 0.9.0.
|
||||
+ First-class support was added to loader and fs.mitm for enabling homebrew to launch web applets.
|
||||
+ Loader will now cause the "HtmlDocument" NCA path to resolve for whatever title HBL is taking over, even if it would not normally do so.
|
||||
+ fs.mitm will also now cause requests to mount the HtmlDocument content for HBL's title to open the `sdmc:/atmosphere/hbl_html` folder.
|
||||
+ By default, this just contains a URL whitelist.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.5
|
||||
+ Support was added for overriding content on a per-title basis, separate from HBL override.
|
||||
+ This allows for using mods on the same title that one uses to launch HBL.
|
||||
+ By default, `!L` is used for title content override (this is configurable by editing `default_config!override_key` in `loader.ini`)
|
||||
+ This key combination can be set on a per-title basis by creating a `atmosphere/titles/<title id>/config.ini`, and editing `override_config!override_key`.
|
||||
+ Content headers were added for the embedded files inside of fusee-secondary.
|
||||
+ This will allow non-fusee bootloaders (like `hekate`) to extract the components bundled inside release binaries.
|
||||
+ This should greatly simplify the update process in the future, for users who do not launch Atmosphère using fusee.
|
||||
+ Support for cheat codes was added.
|
||||
+ These are handled by a new `dmnt` sysmodule, which will also reimplement Nintendo's Debug Monitor in the future.
|
||||
+ Cheat codes can be enabled/disabled at application launch via a per-title key combination.
|
||||
+ For details, please see the [cheat loading documentation](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/cheats.md#cheat-loating-process).
|
||||
+ Cheat codes are fully backwards compatible with the pre-existing format, although a number of bugs have been fixed and some new features have been added.
|
||||
+ For details, please see [the compatibility documentation](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/cheats.md#cheat-code-compatibility).
|
||||
+ An HIPC service API was added (`dmnt:cht`), that will allow user homebrew to interface with and control Atmosphère's cheat manager.
|
||||
+ Please see [the relevant documentation](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/modules/dmnt.md).
|
||||
+ Full client code can be found in [libstratosphere](https://github.com/Atmosphere-NX/libstratosphere/blob/master/include/stratosphere/services/dmntcht.h).
|
||||
+ Users interested in interfacing should see [EdiZon](https://github.com/WerWolv/EdiZon), which should have support for interfacing with Atmosphère's API shortly after 0.8.5 releases.
|
||||
+ A bug was fixed that would cause Atmosphère's fatal screen to not show on 1.0.0-2.3.0.
|
||||
+ A bug was fixed that caused Atmosphère's automatic ProdInfo backups to be corrupt.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.4
|
||||
+ Support for 7.0.0/7.0.1 was added.
|
||||
+ This is facilitated through a new payload, `sept`, which can be signed, encrypted, and then loaded by Nintendo's TSEC firmware.
|
||||
+ `sept` will derive the keys needed to boot new firmware, and then load `sept/payload.bin` off the SD card and jump to it.
|
||||
+ Recognition of applications for override/mitm has been improved.
|
||||
+ Nintendo's official Title ID range (`0x0100000000000000`-`0x01FFFFFFFFFFFFFF`) is now enforced.
|
||||
+ A deadlock condition was fixed involving libstratosphere mitm sysmodules.
|
||||
+ Kernel patches for JIT support were added (Thanks, @m4xw!).
|
||||
+ These loosen restrictions on caller process in svcControlCodeMemory.
|
||||
+ `set.mitm` and `fs.mitm` were merged into a single `ams_mitm` sysmodule.
|
||||
+ This saves a process ID, allowing users to run one additional process up to the 0x40 process limit.
|
||||
+ A `bpc.mitm` component was added, performing custom behavior on shutdown/reboot requests from `am` or applications.
|
||||
+ Performing a reboot from the reboot menu now reboots to atmosphere. This can be configured via `system_settings.ini`.
|
||||
+ Performing a shutdown from the reboot menu now works properly with AutoRCM, and does a real shutdown.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.3
|
||||
+ A custom warmboot firmware was implemented, which does not perform anti-downgrade fuse checks.
|
||||
+ This fixes sleep mode when using a downgraded NAND.
|
||||
+ This also removes Atmosphère's final dependency on Nintendo's encrypted PK11 binary; all components are now re-implemented.
|
||||
+ The ExternalContentSource API was changed to not clear on failure.
|
||||
+ Content override now supports an "app" setting, that causes all applications to be overridden with HBL instead of a specific title.
|
||||
+ Note: because override keys are system-wide, using this setting will prevent using mods in games (as every game will be HBL).
|
||||
+ A bug was fixed causing incorrect fatal-error output when svcBreak was called on 5.0.0+.
|
||||
+ An extension was added to set.mitm to support customization of system settings.
|
||||
+ These are controlled by `atmosphere/system_settings.ini`, see [here](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/modules/set_mitm.md) for documentation.
|
||||
+ An extension was added to sm, adding a new `sm:dmnt` service.
|
||||
+ This can be used by a debug monitor in order to debug the registration state of various other services.
|
||||
+ A bug was fixed in the MitM API that could sometimes cause a system hang during boot.
|
||||
+ A change was made to the MitM API: in cases where sm would have returned 0xE15 when installing a mitm service, it now defers the result (following GetService semantics).
|
||||
+ Support for booting into maintenance mode by holding +/- was added to PM.
|
||||
+ An extension was added to exosphere, adding a custom SMC that allows for DMA to IRAM.
|
||||
+ In addition, smcGetConfig was extended to reboot to a payload in IRAM at 0x40010000 when ConfigItem 65001 is set to 2.
|
||||
+ Fatal will now use this to reboot to sdmc:/atmosphere/reboot_payload.bin if present, when a vol button is pressed.
|
||||
+ An example homebrew ("reboot_to_payload") was also written and is now included with Atmosphère.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.2
|
||||
+ A number of bugs were fixed causing users to sometimes see `Key Derivation Failed!`.
|
||||
+ KFUSE clock enable timings have been adjusted to allow time to stabilize before TSEC is granted access.
|
||||
+ A race condition was fixed that could cause wrong key data to be used on 6.2.0
|
||||
+ The TSEC firmware is now retried on failure, fixing a failure affecting ~1/50 boots on 6.2.0.
|
||||
+ A bug was fixed causing some modules to not work on firmware 1.0.0.
|
||||
+ A bug was fixed causing sleep mode to not work with debugmode enabled.
|
||||
+ As a result, debugmode is now enabled in the default BCT.ini.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.1
|
||||
+ A bug was fixed causing users to see `Failed to enable SMMU!` if fusee had previously rebooted.
|
||||
+ This message will still occur sporadically if fusee is not launched from coldboot, but it can never happen twice in a row.
|
||||
+ A race condition was fixed in Atmosphere `bis_protect` functionality that could cause NS to be able to overwrite BCT public keys.
|
||||
+ This sometimes broke AutoRCM protection, the current fix has been tested on hardware and verified to work.
|
||||
+ Support was added for enabling `debugmode` based on the `exosphere` section of `BCT.ini`:
|
||||
+ Setting `debugmode = 1` will cause exosphere to tell the kernel that debugmode is active.
|
||||
+ Setting `debugmode_user = 1` will cause exosphere to tell userland that debugmode is active.
|
||||
+ These are completely independent of one another, allowing fine control of system behavior.
|
||||
+ Support was added for `nogc` functionality; thanks to @rajkosto for the patches.
|
||||
+ By default, `nogc` patches will automatically apply if the user is booting into 4.0.0+ with fuses from <= 3.0.2.
|
||||
+ Users can override this functionality via the `nogc` entry in the `stratosphere` section of `BCT.ini`:
|
||||
+ Setting `nogc = 1` will force enable `nogc` patches.
|
||||
+ Setting `nogc = 0` will force disable `nogc` patches.
|
||||
+ If patches are enabled but not found for the booting system, a fatal error will be thrown.
|
||||
+ This should prevent running FS without `nogc` patches after updating to an unsupported system version.
|
||||
+ An extension was added to `exosphere` allowing userland applications to cause the system to reboot into RCM:
|
||||
+ This is done by calling smcSetConfig(id=65001, value=<nonzero>); user homebrew can use splSetConfig for this.
|
||||
+ On fatal error, the user can now choose to perform a standard reboot via the power button, or a reboot into RCM via either volume button.
|
||||
+ A custom message was added to `fatal` for when an Atmosphère API version mismatch is detected (2495-1623).
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.8.0
|
||||
+ A custom `fatal` system module was added.
|
||||
+ This re-implements and extends Nintendo's fatal module, with the following features:
|
||||
+ Atmosphère's `fatal` does not create error reports.
|
||||
+ Atmosphère's `fatal` draws a custom error screen, showing registers and a backtrace.
|
||||
+ Atmosphère's `fatal` attempts to gather debugging info for all crashes, and not just ones that include info.
|
||||
+ Atmosphère's `fatal` will attempt saving reports to the SD, if a crash report was not generated by `creport`.
|
||||
+ Title flag handling was changed to prevent folder clutter.
|
||||
+ Instead of living in `atmosphere/titles/<tid>/%s.flag`, flags are now located in `atmosphere/titles/<tid>/flags/%s.flag`
|
||||
+ The old format will continue to be supported for some time, but is deprecated.
|
||||
+ Flags can now be applied to HBL by placing them at `atmosphere/flags/hbl_%s.flag`.
|
||||
+ Changes were made to the mitm API, greatly improving caller semantics.
|
||||
+ `sm` now informs mitm services of a new session's process id, enabling custom handling based on title id/process id.
|
||||
+ smhax is no longer enabled, because it is no longer needed and breaks significant functionality.
|
||||
+ Users with updated HBL/homebrew should see no observable differences due to this change.
|
||||
+ Functionality was added implementing basic protections for NAND from userland homebrew:
|
||||
+ BOOT0 now has write protection for the BCT public key and keyblob regions.
|
||||
+ The `ns` sysmodule is no longer allowed to write the BCT public keys; all other processes can.
|
||||
+ This should prevent system updates from removing AutoRCM.
|
||||
+ No processes should be allowed to write to the keyblob region.
|
||||
+ By default, BIS partitions other than BOOT0 are now read-only, and CAL0 is neither readable nor writable.
|
||||
+ Adding a `bis_write` flag for a title will allow it to write to BIS.
|
||||
+ Adding a `cal_read` flag for a title will allow it to read CAL0.
|
||||
+ An automatic backup is now made of CAL0 on boot.
|
||||
+ `fs.mitm` maintains a file handle to this backup, so userland software cannot read it.
|
||||
+ To facilitate this, `fs.mitm` now mitms all sessions for non-system modules; content overriding has been made separate from service interception.
|
||||
+ Please note: these protections are basic, and sufficiently malicious homebrew ++can defeat them++.
|
||||
+ Please be careful to only run homebrew software from sources that you trust.
|
||||
+ A bug involving HDCP titles crashing on newer firmwares was fixed.
|
||||
+ Support was added for system version 6.2.0; our thanks to @motezazer for his invaluable help.
|
||||
+ By default, new keys will automatically be derived without user input.
|
||||
+ Support is also present for loading new keys from `atmosphere/prod.keys` or `atmosphere/dev.keys`
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.7.5
|
||||
+ DRAM training was added to fusee-secondary, courtesy @hexkyz.
|
||||
+ This greatly improves the speed of memory accesses during boot, resulting in a boot time that is ~200-400% faster.
|
||||
+ creport has had its code region detection improved.
|
||||
+ Instead of only checking one of the crashing thread's PC/LR for code region presence, creport now checks both + every address in the stacktrace. This is also now done for every thread.
|
||||
+ This matches the improvement Nintendo added to official creport in 6.1.0.
|
||||
+ The code region detection heuristic was further improved by checking whether an address points to .rodata or .rwdata, instead of just .text.
|
||||
+ This means that a crash appears in a loaded NRO (or otherwise discontiguous) code region, creport will be able to detect all active code regions, and not just that one.
|
||||
|
||||
## 0.7.4
|
||||
+ [libstratosphere](https://github.com/Atmosphere-NX/libstratosphere) has been completely refactored/rewritten, and split into its own, separate submodule.
|
||||
+ While this is mostly "under the hood" for end-users, the refactor is faster (improving both boot-time and runtime performance), more accurate (many of the internal IPC structures are now bug-for-bug compatible with Nintendo's implementations), and significantly more stable (it fixes a large number of bugs present in the old library).
|
||||
+ The refactored API is significantly cleaner and easier to write system module code for, which should improve/speed up development of stratosphere.
|
||||
+ Developers looking to write their own custom system modules for the Switch can now easily include libstratosphere as a submodule in their projects.
|
||||
+ Loader was extended to add a new generic way to redirect content (ExternalContentSources), courtesy @misson20000:
|
||||
+ A new command was added to ldr:shel, taking in a tid to redirect and returning a session handle.
|
||||
+ When the requested TID is loading, Loader will query the handle as though it were an IFileSystem.
|
||||
+ This allows clients to generically define their own filesystems, and override content with them in loader.
|
||||
+ fs.mitm has gotten several optimizations that should improve its performance and stability:
|
||||
+ RomFS redirection now only occurs when there is content to redirect, even if the title is being mitm'd elsewhere.
|
||||
+ A cache is now maintained of the active data storage, if any, for all opened title IDs. This means if two processes both try to open the same archive, fs.mitm won't duplicate any of its work.
|
||||
+ RomFS metadata is now cached to the SD card on build instead of being persisted in memory -- this greatly reduces memory footprint and allows fs.mitm to redirect more titles simultaneously than before.
|
||||
+ A number of bugs were fixed, including:
|
||||
+ A resource leak was fixed in process creation. This fixes crashes that occur when a large number (>32) games have been launched since the last reboot.
|
||||
+ fs.mitm no longer errors when receiving a zero-sized buffer. This fixes crashes in some games, including The Messenger.
|
||||
+ Multi-threaded server semantics should no longer cause deadlocks in certain circumstances. This fixes crashes in some games, including NES Classics.
|
||||
+ PM now only gives full FS permissions to the active KIPs. This fixes a potential crash where new processes might be unable to be registered with FS.
|
||||
+ The `make dist` target now includes the branch in the generated zip name.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.7.3
|
||||
+ Loader and fs.mitm now try to reload loader.ini before reading it. This allows for changing the override button combination/HBL title id at runtime.
|
||||
+ Added a MitM between set:sys and qlaunch, used to override the system version string displayed in system settings.
|
||||
+ The displayed system version will now display `<Actual version> (AMS <x>.<y>.<z>)`.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
|
||||
## 0.7.2
|
||||
+ Fixed a bug in fs.mitm's LayeredFS read implementation that caused some games to crash when trying to read files.
|
||||
+ Fixed a bug affecting 1.0.0 that caused games to crash with fatal error 2001-0106 on boot.
|
||||
|
||||
103
docs/components/detail/exosphere_memory_layout.txt
Normal file
103
docs/components/detail/exosphere_memory_layout.txt
Normal file
@@ -0,0 +1,103 @@
|
||||
exosphere, storage requirements:
|
||||
|
||||
Nonvolatile memory:
|
||||
0xE000
|
||||
|
||||
Volatile memory: 0x2000
|
||||
|
||||
Physical Address Space:
|
||||
-0x7C010000-0x7C012000 - boot code/volatile memory
|
||||
-0x7C012000-0x7C01E000 - program region
|
||||
-0x7C01E000-0x7C01F000 - global data/context
|
||||
-0x7C01F000-0x7C020000 - L2/L3 page table
|
||||
|
||||
-0x7C020000-0x7C040000 - Mariko-only program region
|
||||
-0x7C040000-0x7C048000 - Mariko-only program stack
|
||||
-0x7C048000-0x7C050000 - Reserved Mariko TZRAM (SE context carveouts, etc)
|
||||
|
||||
Virtual Address Space:
|
||||
|
||||
L1: 0x40 bytes.
|
||||
|
||||
L1 Entries:
|
||||
-0 (0x000000000-0x040000000): Empty
|
||||
-1 (0x040000000-0x080000000): Identity Mapping/Empty
|
||||
-2 (0x080000000-0x0C0000000): DRAM Mapping/Empty
|
||||
-3 (0x0C0000000-0x100000000): DRAM Mapping/Empty
|
||||
-4 (0x100000000-0x140000000): Empty
|
||||
-5 (0x140000000-0x180000000): Empty
|
||||
-6 (0x180000000-0x1C0000000): Empty
|
||||
-7 (0x1C0000000-0x200000000): Virtual Region
|
||||
|
||||
L2 Page and L3 page are both0x7C01F000
|
||||
|
||||
L2 Entries:
|
||||
-0x040000000 (Identity IRAM Table)
|
||||
- Entry Used: 0x000
|
||||
-0x07C000000 (Identity TZRAM Table)
|
||||
- Entry Used: 0x1E0
|
||||
-0x1F0000000 (Virtual Region Table)
|
||||
- Entry Used: 0x180
|
||||
|
||||
L3 Entries:
|
||||
- Identity TZRAM mapping (0x7C010000-0x7C020000)
|
||||
- Entry Used: 0x010-0x01F
|
||||
- Identity IRAM mapping (0x40020000-0x40040000)
|
||||
- Entry Used: 0x020-0x03F
|
||||
- Virtual Device region (0x1F0040000-0x1F0080000)
|
||||
- Entry Used: 0x040-0x07F
|
||||
- Read Only TZRAM Alias (0x1F00A0000-0x1F00B0000)
|
||||
- Entry Used: 0x0A0-0x0AF
|
||||
- Program region (0x1F00C0000-0x1F00CC000)
|
||||
- Entry Used: 0x0C0-0x0CB
|
||||
- Mariko Program region (0x1F00D0000-0x1F00F0000)
|
||||
- Entry Used: 0x0D0-0x0EF
|
||||
- Mariko Program stack (0x1F00F4000-0x1F00FC000)
|
||||
- Entry Used: 0x0F4-0x0FB
|
||||
- Secure DRAM Storage (0x1F0100000-0x1F0110000)
|
||||
- Entry Used: 0x100-0x10F
|
||||
- Debug DRAM Storage (0x1F0110000-0x1F0114000)
|
||||
- Entry Used: 0x110-0x113
|
||||
- SC7 IRAM Work Space (0x1F0120000-0x1F0130000)
|
||||
- Entry Used: 0x120-0x12F
|
||||
- SC7 IRAM Firmware (0x1F0140000-0x1F0141000)
|
||||
- Entry Used: 0x140-0x140
|
||||
- Debug Code (0x1F0150000-0x1F0154000)
|
||||
- Entry Used: 0x150-0x153
|
||||
- Reserved For Debug (0x1F0160000-0x1F0170000)
|
||||
- Entry Used: 0x160-0x16F
|
||||
- Boot Code (0x1F01C0000-0x1F01C2000)
|
||||
- Entry Used: 0x1C0-0x1C1
|
||||
- AMS IRAM Page (0x1F01F2000-0x1F01F2000)
|
||||
- Entry Used: 0x1F2-0x1F2
|
||||
- AMS User Page (0x1F01F4000-0x1F01F4000)
|
||||
- Entry Used: 0x1F4-0x1F4
|
||||
- SMC User Page (0x1F01F6000-0x1F01F6000)
|
||||
- Entry Used: 0x1F6-0x1F6
|
||||
- Volatile (Data) (0x1F01F8000-0x1F01F9000)
|
||||
- Entry Used: 0x1F8-0x1F8
|
||||
- Volatile (Stacks) (0x1F01FA000-0x1F01FB000)
|
||||
- Entry Used: 0x1FA-0x1FA
|
||||
- Global Data (0x1F01FC000-0x1F01FD000)
|
||||
|
||||
|
||||
NV Global Data needs:
|
||||
Exosphere + Emummc Config (<=0x200)
|
||||
Boot Config[0x400]
|
||||
RSA Context(0x100)
|
||||
Old Device Keys[0x20][0x10];
|
||||
Old Master Keys[0x20][0x10];
|
||||
Imported Rsa Keys[4][0x200];
|
||||
CPU Ctx[4][0x100];
|
||||
|
||||
Total: 0x1700
|
||||
|
||||
Global Data Page (accessible via X18):
|
||||
0x000-0x200: Exosphere Config
|
||||
0x200-0x400: Emummc Config
|
||||
0x400-0x800: Sealed AES Keys
|
||||
0x800-0xC00: Boot Config
|
||||
0xC00-0xFFF: CPU contexts. Can be replaced, but this fits exactly so minimizes program space waste.
|
||||
|
||||
Volatile Global Data needs:
|
||||
Random Cache 0x400 bytes
|
||||
4
docs/components/emummc.md
Normal file
4
docs/components/emummc.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# emummc
|
||||
emummc is a collaborative project that provides eMMC storage emulation.
|
||||
|
||||
Please refer to the project's repository [here](https://github.com/m4xw/emuMMC) for detailed instructions and documentation.
|
||||
@@ -1,10 +1,76 @@
|
||||
# Exosphère
|
||||
Exosphère is a reimplementation of Arm's TrustZone (TZ), also known as Secure Monitor (Secure_Monitor.bin). It has the highest privilege mode available on the Switch’s processor, and has access to everything on the console.
|
||||
|
||||
Exosphère will potentially play a big role in Jamais Vu and Déja Vu, which are upcoming software exploits for the Switch, allowing one to launch Atmosphère on a Fusée-Gélee patched (ipatched) Switch console, and will also enable one to launch into CFW directly from the Switch itself without the use of any sort of external device, such as a computer or RCM jig, provided they are on a low enough system firmware.
|
||||
|
||||
## TrustZone/Secure Monitor
|
||||
TrustZone is responsible for all the cryptographic operations on the Switch. The idea behind the way it operates is that all the keys stay in the TrustZone, and userspace only gets "handles" to them. This would make sure that keydata never leaks and is kept secure. It also has a few more responsibilities, such as power management, providing a source of random numbers, and providing access to various pieces of information that are stored in the fuses.
|
||||
# exosphère
|
||||
exosphère is a customized reimplementation of the Horizon OS's Secure Monitor.
|
||||
The Secure Monitor follows the same design principle as Arm's TrustZone and both terms can be used interchangeably in this context. It runs at the highest privilege mode (EL3) available to the main processor and is responsible for all the sensitive cryptographic operations needed by the system as well as power management for each CPU.
|
||||
|
||||
## Extensions
|
||||
Exosphère currently only contains one extension, an SMC allowing homebrew to find which version of Atmosphère is currently running, in order to find out what extensions are allowed to be used.
|
||||
exosphère expands the original Secure Monitor design by providing custom SMCs (Secure Monitor Calls) necessary to the homebrew ecosystem. Currently, these are:
|
||||
```
|
||||
uint32_t smc_ams_iram_copy(smc_args_t *args);
|
||||
uint32_t smc_ams_write_address(smc_args_t *args);
|
||||
uint32_t smc_ams_get_emummc_config(smc_args_t *args);
|
||||
```
|
||||
|
||||
Additionally, exosphère expands the functionality of two SMCs provided by the Horizon OS for getting/setting configuration items. The following custom configuration items are provided by exosphère:
|
||||
```
|
||||
CONFIGITEM_EXOSPHERE_VERSION = 65000,
|
||||
CONFIGITEM_NEEDS_REBOOT = 65001,
|
||||
CONFIGITEM_NEEDS_SHUTDOWN = 65002,
|
||||
CONFIGITEM_EXOSPHERE_VERHASH = 65003,
|
||||
CONFIGITEM_HAS_RCM_BUG_PATCH = 65004,
|
||||
CONFIGITEM_SHOULD_BLANK_PRODINFO = 65005,
|
||||
CONFIGITEM_ALLOW_CAL_WRITES = 65006,
|
||||
```
|
||||
|
||||
### smc_ams_iram_copy
|
||||
This function implements a copy of up to one page between DRAM and IRAM. Its arguments are:
|
||||
```
|
||||
args->X[1] = DRAM address (translated by kernel), must be 4-byte aligned.
|
||||
args->X[2] = IRAM address, must be 4-byte aligned.
|
||||
args->X[3] = Size (must be <= 0x1000 and 4-byte aligned).
|
||||
args->X[4] = 0 for read, 1 for write.
|
||||
```
|
||||
|
||||
### smc_ams_write_address
|
||||
This function implements a write to a DRAM page. Its arguments are:
|
||||
```
|
||||
args->X[1] = Virtual address, must be size-bytes aligned and readable by EL0.
|
||||
args->X[2] = Value.
|
||||
args->X[3] = Size (must be 1, 2, 4, or 8).
|
||||
```
|
||||
|
||||
### smc_ams_get_emummc_config
|
||||
This function retrieves configuration for the current [emummc](emummc.md) context. Its arguments are:
|
||||
```
|
||||
args->X[1] = MMC id, must be size-bytes aligned and readable by EL0.
|
||||
args->X[2] = Pointer to output (for paths for filebased + nintendo dir), must be at least 0x100 bytes.
|
||||
```
|
||||
|
||||
### CONFIGITEM_EXOSPHERE_VERSION
|
||||
This custom configuration item gets information about the current exosphere version.
|
||||
|
||||
### CONFIGITEM_NEEDS_REBOOT
|
||||
This custom configuration item is used to issue a system reboot into RCM or into a warmboot payload leveraging a secondary vulnerability to achieve code execution from warm booting.
|
||||
|
||||
### CONFIGITEM_NEEDS_SHUTDOWN
|
||||
This custom configuration item is used to issue a system shutdown with a warmboot payload leveraging a secondary vulnerability to achieve code execution from warm booting.
|
||||
|
||||
### CONFIGITEM_EXOSPHERE_VERHASH
|
||||
This custom configuration item gets information about the current exosphere git commit hash.
|
||||
|
||||
### CONFIGITEM_HAS_RCM_BUG_PATCH
|
||||
This custom configuration item gets whether the unit has the CVE-2018-6242 vulnerability patched.
|
||||
|
||||
### CONFIGITEM_SHOULD_BLANK_PRODINFO
|
||||
This custom configuration item gets whether the unit should simulate a "blanked" PRODINFO. See [here](../features/configurations.md) for more information.
|
||||
|
||||
### CONFIGITEM_ALLOW_CAL_WRITES
|
||||
This custom configuration item gets whether the unit should allow writing to the calibration partition.
|
||||
|
||||
## lp0fw
|
||||
This is a small, built-in payload that is responsible for waking up the system during a warm boot.
|
||||
|
||||
## sc7fw
|
||||
This is a small, built-in payload that is responsible for putting the system to sleep during a warm boot.
|
||||
|
||||
## rebootstub
|
||||
This is a small, built-in payload that provides functionality to reboot the system into any payload of choice.
|
||||
|
||||
22
docs/components/fusee.md
Normal file
22
docs/components/fusee.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# fusée
|
||||
fusée is a custom bootloader used to start the Atmosphère environment.
|
||||
It is divided into three sub-components: fusée-primary, fusée-mtc and fusée-secondary.
|
||||
|
||||
fusée is also capable of chainloading other payloads (e.g.: Android).
|
||||
|
||||
fusée's behavior can be configured via the [BCT.ini](../features/configurations.md) file located on the SD card.
|
||||
|
||||
## fusée-primary
|
||||
fusée-primary is the first piece of Atmosphère's code that runs on the hardware.
|
||||
It is distributed as a standalone payload designed to be launched via RCM by abusing the CVE-2018-6242 vulnerability.
|
||||
|
||||
This payload is responsible for all the low-level hardware initialization required by the Nintendo Switch, plus the extra task of initializing the SD card and reading the next fusée sub-components from it.
|
||||
|
||||
## fusée-mtc
|
||||
fusée-mtc is an optional, but heavily recommended sub-component that performs DRAM memory training.
|
||||
This ensures a proper environment for running the final fusée sub-component.
|
||||
|
||||
## fusée-secondary
|
||||
fusée-secondary is the last fusée sub-component that runs on the system.
|
||||
It is responsible for configuring and bootstrapping the Atmosphère environment by mimicking the Horizon OS's design.
|
||||
This includes setting up the cryptosystem, mounting or emulating the eMMC, injecting or patching system modules and launching the exosphère component.
|
||||
@@ -1,26 +0,0 @@
|
||||
# BCT.ini
|
||||
BCT.ini is the configuration file used by fusée-primary and fusée-secondary. It is read by fusee-primary.bin to setup and boot fusee-secondary.bin and is also read by fusee-secondary.bin to configure Exosphère or to specify the environment it should boot.
|
||||
|
||||
## Configuration
|
||||
This file is located at the root of your SD.
|
||||
```
|
||||
BCT0
|
||||
[stage1]
|
||||
stage2_path = fusee-secondary.bin
|
||||
stage2_addr = 0xF0000000
|
||||
stage2_entrypoint = 0xF0000000
|
||||
```
|
||||
Add the following lines and replace the `X` according to the following list if you have trouble booting past the firmware version detection.
|
||||
`target_firmware` is the OFW major version.
|
||||
```
|
||||
[exosphere]
|
||||
target_firmware = X
|
||||
```
|
||||
```
|
||||
1.0.0 = 1
|
||||
2.X.X = 2
|
||||
3.X.X = 3
|
||||
4.X.X = 4
|
||||
5.X.X = 5
|
||||
6.0.0 = 6
|
||||
```
|
||||
@@ -1,20 +0,0 @@
|
||||
# Fusée
|
||||
Fusée (not to be confused with Fusée Gelée) is a custom bootloader needed to start Atmosphère and replaces Nintendo's Package1loader/bootloader. It currently utilizes the [Tegra X1 RCM Vulnerability](https://nvidia.custhelp.com/app/answers/detail/a_id/4660/~/security-notice%3A-nvidia-tegra-rcm-vulnerability) in order to function.
|
||||
|
||||
Fusée is split into two separate parts: fusée-primary and fusée-secondary. This is due to the RCM Vulnerability only allowing payloads of a limited filesize to be sent to the device.
|
||||
|
||||
As of June 2018, there are new Switch systems being sold that prevent Fusée (or any payload that requires the Fusée Gelée exploit) from working due to having an ipatched bootrom. All ipatched systems share the HAC-S-JXE-C3 product code. While Fusée cannot work on these ipatched units, they still come on firmware 4.1.0, which is vulnerable to the upcoming Déja Vu software exploit. Note that if you update past 4.1.0 on one of these ipatched units, your odds of being able to install Atmosphère or run any homebrew become practically non-existent.
|
||||
|
||||
Additionally, a hardware revision of the Switch known as “Mariko” is believed to be in development. No such units have been seen in stores yet, but it is expected Nintendo will roll them out silently. The Mariko units will most likely patch the bootrom vulnerability Fusée Gelée, which is currently used to access CFW, and will likely have their own proprietary bootloader.
|
||||
|
||||
## Fusée-Primary
|
||||
Fusée-primary is the payload file (fusee-primary.bin) sent to the Switch from an external device. Once sent, fusée-primary makes initial preparations before loading fusée-secondary from the Switch’s SD Card.
|
||||
|
||||
Fusée-primary can be configured via the [BCT.ini](../fusee/BCT.md) file located on the Switch’s SD card.
|
||||
|
||||
## Fusée-Secondary
|
||||
Fusée-secondary is a payload file that stays on the root of the Switch’s SD Card (fusee-secondary.bin). It is automatically launched once fusée-primary has finished, and is responsible for preparing the Switch’s hardware for future running environments, such as the homebrew menu. Fusée-secondary is also responsible for validating and launching Exosphère.
|
||||
|
||||
Fusée-secondary contains various [.kip modules](/docs/main.md#modules). These modules modify existing features in the OS, and can also add new ones.
|
||||
|
||||
Fusée is also capable of chainloading other payloads such as Linux.
|
||||
11
docs/components/libraries.md
Normal file
11
docs/components/libraries.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# libraries
|
||||
This is a collection of libraries for doing operating system development for the Nintendo Switch.
|
||||
|
||||
## libmesosphere
|
||||
libmesosphere is a work-in-progress C++ library implementing functionality for the Horizon Kernel.
|
||||
|
||||
## libstratosphere
|
||||
libstratosphere is a work-in-progress C++ library for development of system modules for the Nintendo Switch.
|
||||
|
||||
## libvapours
|
||||
Common boilerplate code for various purposes.
|
||||
3
docs/components/mesosphere.md
Normal file
3
docs/components/mesosphere.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# mesosphère
|
||||
mesosphère is a work in progress customized kernel reimplementation.
|
||||
The Horizon OS's kernel follows microkernel design principles and runs at the EL1 level. It is currently subdivided into a loader (kernel_ldr) and the main kernel code.
|
||||
40
docs/components/modules/ams_mitm.md
Normal file
40
docs/components/modules/ams_mitm.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# ams_mitm
|
||||
This module provides methods to intercept services provided by other system modules. It is further sub-divided according to the service it targets.
|
||||
|
||||
## bpc_mitm
|
||||
bpc_mitm enables intercepting requests to power control services. It currently intercepts:
|
||||
+ `am` system module (to intercept the Reboot/Power buttons in the overlay menu)
|
||||
+ `fatal` system module (to simplify payload reboot logic significantly)
|
||||
+ [nx-hbloader](https://github.com/switchbrew/nx-hbloader) (to allow homebrew to take advantage of the feature)
|
||||
|
||||
## fs_mitm
|
||||
fs_mitm enables intercepting file system operations. It can deny, delay, replace, or redirect any request made to the file system. It enables LayeredFS to function, which allows for replacement of game assets.
|
||||
|
||||
## hid_mitm
|
||||
hid_mitm enables intercepting requests to controller device services. It is currently disabled by default. If enabled, it intercepts:
|
||||
+ [nx-hbloader](https://github.com/switchbrew/nx-hbloader) (to help homebrew not need to be recompiled due to a breaking change introduced in the past)
|
||||
|
||||
Note that hid_mitm is currently deprecated and might be removed entirely in the future.
|
||||
|
||||
## ns_mitm
|
||||
ns_mitm enables intercepting requests to application control services. It currently intercepts:
|
||||
+ Web Applets (to facilitate nx-hbloader web browser launching)
|
||||
|
||||
## set_mitm
|
||||
set_mitm enables intercepting requests to the system settings service. It currently intercepts:
|
||||
+ `ns` system module and games (to allow for overriding game locales)
|
||||
+ All firmware debug settings requests (to allow modification of system settings not directly exposed to the user)
|
||||
|
||||
### Firmware Version
|
||||
set_mitm intercepts the `GetFirmwareVersion` command, if the requester is `qlaunch` or `maintenance`.
|
||||
It modifies the `display_version` field of the returned system version, causing the version to display
|
||||
in settings as `#.#.#|AMS #.#.#|?` with `? = S` when running under system eMMC or `? = E` when running under emulated eMMC. This allows users to easily verify what version of Atmosphère and what eMMC environment they are running.
|
||||
|
||||
### System Settings
|
||||
set_mitm intercepts the `GetSettingsItemValueSize` and `GetSettingsItemValue` commands for all requesters.
|
||||
It does so in order to enable user configuration of system settings, which are parsed from `/atmosphere/system_settings.ini` on boot. See [here](../../features/configurations.md) for more information on the system settings format.
|
||||
|
||||
## dns_mitm
|
||||
dns_mitm enables intercepting requests to dns resolution services, to enable redirecting requests for specified hostnames.
|
||||
|
||||
For documentation, see [here](../../features/dns_mitm.md).
|
||||
4
docs/components/modules/boot.md
Normal file
4
docs/components/modules/boot.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# boot
|
||||
This module is a reimplementation of the Horizon OS's `boot` system module, which is responsible for initializing and configuring hardware.
|
||||
|
||||
Atmosphère's reimplementation displays its own black and white splash screen and battery icons as replacements for the original assets used during display initialization.
|
||||
4
docs/components/modules/boot2.md
Normal file
4
docs/components/modules/boot2.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# boot2
|
||||
This module is a reimplementation of the Horizon OS's `boot2` system module, which is responsible for launching all the other necessary system modules.
|
||||
|
||||
Atmosphère's reimplementation allows launching user provided system modules from the SD card. See [here](../../features/configurations.md) for more information.
|
||||
4
docs/components/modules/creport.md
Normal file
4
docs/components/modules/creport.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# creport
|
||||
This module is a reimplementation of the Horizon OS's `creport` system module, which is responsible for managing crash reports.
|
||||
|
||||
Atmosphère's reimplementation redirects writing of generated crash reports to the SD card under the folder `/atmosphere/crash_reports/`. It also prevents the automatic uploading of said crash reports.
|
||||
42
docs/components/modules/dmnt.md
Normal file
42
docs/components/modules/dmnt.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# dmnt
|
||||
This module is a reimplementation of the Horizon OS's `dmnt` system module, which provides a debug monitor.
|
||||
|
||||
## Extensions
|
||||
Atmosphère implements an extension to provide cheat code functionality.
|
||||
|
||||
### Cheat Service
|
||||
A HIPC service API is provided for interacting with the cheat code manager through the service `dmnt:cht`. See [here](../../features/cheats.md) for more information on the cheat code format.
|
||||
|
||||
The SwIPC definition for `dmnt:cht` follows:
|
||||
```
|
||||
interface ams::dmnt::cheat::CheatService is dmnt:cht {
|
||||
[65000] HasCheatProcess() -> sf::Out<bool> out;
|
||||
[65001] GetCheatProcessEvent() -> sf::OutCopyHandle out_event;
|
||||
[65002] GetCheatProcessMetadata() -> sf::Out<CheatProcessMetadata> out_metadata;
|
||||
[65003] ForceOpenCheatProcess();
|
||||
[65004] PauseCheatProcess();
|
||||
[65005] ResumeCheatProcess();
|
||||
|
||||
[65100] GetCheatProcessMappingCount() -> sf::Out<u64> out_count;
|
||||
[65101] GetCheatProcessMappings(u64 offset) -> sf::OutArray<MemoryInfo> &mappings, sf::Out<u64> out_count;
|
||||
[65102] ReadCheatProcessMemory(u64 address, u64 out_size) -> sf::OutBuffer &buffer;
|
||||
[65103] WriteCheatProcessMemory(sf::InBuffer &buffer, u64 address, u64 in_size);
|
||||
[65104] QueryCheatProcessMemory(u64 address) -> sf::Out<MemoryInfo> mapping;
|
||||
|
||||
[65200] GetCheatCount() -> sf::Out<u64> out_count;
|
||||
[65201] GetCheats(u64 offset) -> sf::OutArray<CheatEntry> &cheats, sf::Out<u64> out_count;
|
||||
[65202] GetCheatById(u32 cheat_id) -> sf::Out<CheatEntry> cheat;
|
||||
[65203] ToggleCheat(u32 cheat_id);
|
||||
[65204] AddCheat(CheatDefinition &cheat, bool enabled) -> sf::Out<u32> out_cheat_id;
|
||||
[65205] RemoveCheat(u32 cheat_id);
|
||||
[65206] ReadStaticRegister(u8 which) -> sf::Out<u64> out;
|
||||
[65207] WriteStaticRegister(u8 which, u64 value);
|
||||
[65208] ResetStaticRegisters();
|
||||
|
||||
[65300] GetFrozenAddressCount() -> sf::Out<u64> out_count;
|
||||
[65301] GetFrozenAddresses(u64 offset) ->sf::OutArray<FrozenAddressEntry> &addresses, sf::Out<u64> out_count;
|
||||
[65302] GetFrozenAddress(u64 address) -> sf::Out<FrozenAddressEntry> entry;
|
||||
[65303] EnableFrozenAddress(u64 address, u64 width) -> sf::Out<u64> out_value;
|
||||
[65304] DisableFrozenAddress(u64 address);
|
||||
}
|
||||
```
|
||||
4
docs/components/modules/eclct.stub.md
Normal file
4
docs/components/modules/eclct.stub.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# eclct.stub
|
||||
This module is a reimplementation of the Horizon OS's `eclct` system module, which collects error reports.
|
||||
|
||||
Atmosphère's reimplementation is a stub to remove any and all functionality pertaining to error report collection.
|
||||
4
docs/components/modules/erpt.md
Normal file
4
docs/components/modules/erpt.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# erpt
|
||||
This module is a reimplementation of the Horizon OS's `erpt` system module, which is responsible for managing error reports.
|
||||
|
||||
Atmosphère's reimplementation redirects writing of generated error reports to the SD card under the folder `/atmosphere/erpt_reports/`.
|
||||
4
docs/components/modules/fatal.md
Normal file
4
docs/components/modules/fatal.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# fatal
|
||||
This module is a reimplementation of the Horizon OS's `fatal` system module, which is responsible for managing fatal reports.
|
||||
|
||||
Atmosphère's reimplementation prevents error report creation and draws a custom error screen, showing registers and a backtrace. It also attempts to gather debugging info for any and all crashes and tries to save reports to the SD card under the folder `/atmosphere/fatal_reports/`.
|
||||
4
docs/components/modules/jpegdec.md
Normal file
4
docs/components/modules/jpegdec.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# jpegdec
|
||||
This module is a reimplementation of the Horizon OS's `jpegdec` system module, which is responsible for JPEG format decoding.
|
||||
|
||||
Atmosphère's reimplementation allows two sessions instead of 1, so homebrew can use it for software JPEG decoding in addition to the OS itself.
|
||||
106
docs/components/modules/loader.md
Normal file
106
docs/components/modules/loader.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# loader
|
||||
This module is a reimplementation of the Horizon OS's `ldr` system module, which is responsible for creating processes from executable NSO images and registering their access control.
|
||||
|
||||
## Extensions
|
||||
Atmosphère extends this module to allow executables to be replaced or patched by files stored on the SD card. Note that a few services are required for SD card access and therefore cannot be replaced or patched in this manner.
|
||||
|
||||
### Exefs Replacement
|
||||
Atmosphère's reimplementation allows replacing executable files in the file system.
|
||||
|
||||
#### Partition Replacement
|
||||
It is possible to replace the full exefs partition at once with a PFS0 file. In that case, Atmosphère will load the following file:
|
||||
```
|
||||
/atmosphere/contents/<program id>/exefs.nsp
|
||||
```
|
||||
|
||||
#### File Replacement
|
||||
When a process is created, loader will search for several NSO filenames in the program's exefs directory.
|
||||
These filenames are, in this order:
|
||||
- rtld
|
||||
- main
|
||||
- subsdk0
|
||||
- subsdk1
|
||||
- ...
|
||||
- subsdk9
|
||||
- sdk
|
||||
|
||||
Each NSO that is found will be loaded into the process contiguously. The process's entrypoint is at the first NSO to be loaded, usually `rtld` or `main`.
|
||||
|
||||
Additionally, when a process is loaded, loader will search for a `main.npdm` file in the exefs directory specifying the program's permissions.
|
||||
|
||||
Atmosphère extends this functionality by also searching for these files on the SD card. When searching for a file, loader will first check if it exists on the SD card. If it does, that file will be used instead. Otherwise, it will use the copy located in the exefs, if that is present. The following directory will be searched:
|
||||
```
|
||||
/atmosphere/contents/<program id>/exefs/
|
||||
```
|
||||
|
||||
This allows the replacement of applets, system modules, or even games with homebrew versions.
|
||||
|
||||
##### File Stubbing
|
||||
In order to prevent an NSO from being loaded even if it exists in the exefs, loader will also check if a stub file exists. If such a file exists, the NSO will not be loaded. The files should be named like `rtld.stub`, `main.stub`, etc. and may be empty.
|
||||
|
||||
##### Technical Semantics
|
||||
|
||||
loader's semantics for content override can (as you may observe from reading the above) be complicated to understand. The following is an abbreviated description of the very technical semantics by which loader decides what content to read when trying to read a file for a program id.
|
||||
|
||||
* If an external content filesystem exists for the program id, the external content filesystem is used directly with no further redirection.
|
||||
* Otherwise, if the program ID is being overridden with [nx-hbloader](https://github.com/switchbrew/nx-hbloader/releases) (see Homebrew Support below), the nsp filesystem for hbl is used directly with no further redirection.
|
||||
* Otherwise, if content redirection is enabled for the program ID (controlled by a configurable button combination) and a loose file exists on the SD card, the loose file is used.
|
||||
* Otherwise, if a stub file exists, a "Not Found" error is returned.
|
||||
* Otherwise, if an SD card executable filesystem ("exefs.nsp") exists, it is used without further redirection.
|
||||
* Finally, the "real"/base code file system is used without further redirection.
|
||||
|
||||
In addition, there are a few other technical details relevant to Atmosphere's redirection:
|
||||
* When overriding with nx-hbloader, the real code filesystem must exist. When "main.npdm" (a program capabilities descriptor file) is read, the content from the real code filesystem is read in order to determine whether an applet or an application is being overridden. This allows nx-hbloader to automatically support both applet and application environments.
|
||||
* When overriding applications, the real code filesystem must exist and contain valid content. This is required to perform accurate-to-Nintendo content verification procedures.
|
||||
* When programs are launched, both a program id and a "storage id" are specified by the launch requester. When the storage id specified is "none" (normally always invalid), Atmosphere assumes that a custom system module is attempting to be launched. This removes the aforementioned requirement on base content validity; the above procedure is still used to determine how to redirect content, however reads to the "real"/base code file system may return "Not Found" errors if the real/base code file system does not exist.
|
||||
|
||||
### NSO Patching
|
||||
When an NSO is loaded, Atmosphère's reimplementation will search for IPS patch files on the SD card in the following locations.
|
||||
```
|
||||
/atmosphere/exefs_patches/<patchset name>/<nso build id>.ips
|
||||
```
|
||||
|
||||
This organization allows patch sets affecting multiple NSOs to be distributed as a single directory and also allows patches from multiple patch sets to be stacked. Patches will be searched for in each patch set directory. The name of each patch file should match the hexadecimal build ID of the NSO to affect, except that trailing zero bytes may be left off. Because the NSO build ID is unique for every NSO, this means patches will only apply to the files they are meant to apply to.
|
||||
|
||||
Patch files are accepted in either IPS format or IPS32 format.
|
||||
|
||||
Because NSO files are compressed, patch files are not made between the original version of a compressed NSO and the modified version of such an NSO. Instead, they are made between the uncompressed version of an NSO and the modified (and still uncompressed) version of that NSO. This also means that a patch file cannot be manually applied to the compressed version of an NSO; it must be applied to the uncompressed version. Atmosphère's reimplementation will correctly apply these patches while loading the process regardless of whether the NSO it finds is compressed or not.
|
||||
|
||||
When authoring patches, [hactool](https://github.com/SciresM/hactool) can be used to find an NSO's build ID and to uncompress NSOs. Recent versions of the [ReSwitched IDA loaders](https://github.com/reswitched/loaders) can be used to load uncompressed NSOs into IDA in such a way that you can [apply patches to the input file](https://www.hex-rays.com/products/ida/support/idadoc/1618.shtml). From there, any IPS tool can be used to create the patch between the original NSO and the patched NSO. Note that if the NSO you are patching is larger than 16 MiB, you will have to use a tool that supports IPS32.
|
||||
|
||||
### Homebrew Support
|
||||
Atmosphère provides first class support for [nx-hbloader](https://github.com/switchbrew/nx-hbloader/releases) and [nx-hbmenu](https://github.com/switchbrew/nx-hbmenu/releases).
|
||||
|
||||
Launching of the nx-hbloader process is controlled by configurable button inputs. See [here](../../features/configurations.md) for more detailed information.
|
||||
|
||||
In addition, loader has extensions to enable homebrew to launch web applets. This normally requires the application launching the applet to have HTML Manual content inside an installed NCA. Atmosphère's reimplementation will automatically ensure that the commands used to check this succeed, and will redirect the relevant file system to the `/atmosphere/hbl_html/` subdirectory.
|
||||
|
||||
### IPC Commands
|
||||
Atmosphère's reimplementation extends the HIPC loader services' API with several custom commands.
|
||||
|
||||
The SwIPC definition for the `ldr:pm` extension commands follows:
|
||||
```
|
||||
interface ams::ldr::pm::ProcessManagerInterface is ldr:pm {
|
||||
...
|
||||
[65000] AtmosphereHasLaunchedProgram(ncm::ProgramId program_id) -> sf::Out<bool> out;
|
||||
[65001] AtmosphereGetProgramInfo(ncm::ProgramLocation &loc) -> sf::Out<ProgramInfo> out_program_info, sf::Out<cfg::OverrideStatus> out_status;
|
||||
[65002] AtmospherePinProgram(ncm::ProgramLocation &loc, cfg::OverrideStatus &override_status) -> sf::Out<PinId> out_id;
|
||||
}
|
||||
```
|
||||
|
||||
The SwIPC definition for the `ldr:dmnt` extension commands follows:
|
||||
```
|
||||
interface ams::ldr::dmnt::DebugMonitorInterface is ldr:dmnt {
|
||||
...
|
||||
[65000] AtmosphereHasLaunchedProgram(ncm::ProgramId program_id) -> sf::Out<bool> out;
|
||||
}
|
||||
```
|
||||
|
||||
The SwIPC definition for the `ldr:shel` extension commands follows:
|
||||
```
|
||||
interface ams::ldr::shell::ShellInterface is ldr:shel {
|
||||
...
|
||||
[65000] AtmosphereRegisterExternalCode(ncm::ProgramId program_id) -> sf::OutMoveHandle out;
|
||||
[65001] AtmosphereUnregisterExternalCode(ncm::ProgramId program_id);
|
||||
}
|
||||
```
|
||||
4
docs/components/modules/ncm.md
Normal file
4
docs/components/modules/ncm.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# ncm
|
||||
This module is a reimplementation of the Horizon OS's `ncm` system module, which is responsible for content management.
|
||||
|
||||
Atmosphère's reimplementation is currently opt-in only. See [here](../../features/configurations.md) for more information.
|
||||
4
docs/components/modules/pgl.md
Normal file
4
docs/components/modules/pgl.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# pgl
|
||||
This module is a reimplementation of the Horizon OS's `pgl` system module, which is responsible for launching programs and was introduced by firmware version `10.0.0`.
|
||||
|
||||
Currently, Atmosphère's reimplementation doesn't backport this module's functionalities to firmware versions lower than `10.0.0`.
|
||||
30
docs/components/modules/pm.md
Normal file
30
docs/components/modules/pm.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# pm
|
||||
This module is a reimplementation of the Horizon OS's `pm` system module, which is responsible for tracking running processes on the system, and managing resource limits.
|
||||
|
||||
## Extensions
|
||||
Atmosphère extends this module with extra IPC commands and memory restriction changes.
|
||||
|
||||
### IPC Commands
|
||||
Atmosphère's reimplementation extends the HIPC loader services' API with several custom commands.
|
||||
|
||||
The SwIPC definition for the `pm:dmnt` extension commands follows:
|
||||
```
|
||||
interface ams::pm::dmnt::DebugMonitorServiceBase is pm:dmnt {
|
||||
...
|
||||
[65000] AtmosphereGetProcessInfo(os::ProcessId process_id) -> sf::OutCopyHandle out_process_handle, sf::Out<ncm::ProgramLocation> out_loc, sf::Out<cfg::OverrideStatus> out_status;
|
||||
[65001] AtmosphereGetCurrentLimitInfo(u32 group, u32 resource) -> sf::Out<s64> out_cur_val, sf::Out<s64> out_lim_val;
|
||||
}
|
||||
```
|
||||
|
||||
The SwIPC definition for the `pm:info` extension commands follows:
|
||||
```
|
||||
interface ams::pm::info::InformationService is pm:info {
|
||||
...
|
||||
[65000] AtmosphereGetProcessId(ncm::ProgramId program_id) -> sf::Out<os::ProcessId> out;
|
||||
[65001] AtmosphereHasLaunchedProgram(ncm::ProgramId program_id) -> sf::Out<bool> out;
|
||||
[65002] AtmosphereGetProcessInfo(os::ProcessId process_id) -> sf::Out<ncm::ProgramLocation> out_loc, sf::Out<cfg::OverrideStatus> out_status;
|
||||
}
|
||||
```
|
||||
|
||||
### Extra System Memory
|
||||
Atmosphère's reimplementation shrinks the APPLET memory pool by 24 MiB by default, giving this memory to the SYSTEM pool. This allows custom system modules to use more memory without hitting the SYSTEM memory limit.
|
||||
16
docs/components/modules/ro.md
Normal file
16
docs/components/modules/ro.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# ro
|
||||
This module is a reimplementation of the Horizon OS's `ro` system module, which is responsible for loading dynamic libraries and was introduced by firmware version `3.0.0`.
|
||||
|
||||
Atmosphère's reimplementation backports this module's functionalities to firmware versions lower than `3.0.0` where said functionalities were provided by the `ldr` system module instead.
|
||||
|
||||
## Extensions
|
||||
Atmosphère extends this module to allow libraries to be patched by files stored on the SD card.
|
||||
|
||||
### NRO Patching
|
||||
When an NRO is loaded, Atmosphère's reimplementation will search for IPS patch files on the SD card in the following locations.
|
||||
```
|
||||
/atmosphere/nro_patches/<patchset name>/<nro build id>.ips
|
||||
```
|
||||
This organization allows patch sets affecting multiple NROs to be distributed as a single directory. Patches will be searched for in each patch set directory. The name of each patch file should match the hexadecimal build ID of the NRO to affect, except that trailing zero bytes may be left off. Because the NRO build ID is unique for every NRO, this means patches will only apply to the files they are meant to apply to.
|
||||
|
||||
Patch files are accepted in either IPS format or IPS32 format.
|
||||
47
docs/components/modules/sm.md
Normal file
47
docs/components/modules/sm.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# sm
|
||||
This module is a reimplementation of the Horizon OS's `sm` system module, which is responsible for service management.
|
||||
|
||||
## Extensions
|
||||
Atmosphère extends this module with extra IPC commands and new services.
|
||||
|
||||
### Debug Monitor
|
||||
Atmosphère's reimplementation provides an interface `sm:dmnt` to allow a debug monitor to query the service manager's state.
|
||||
|
||||
The SwIPC definition for `sm:dmnt` follows:
|
||||
```
|
||||
interface ams::sm::DmntService is sm:dmnt {
|
||||
[65000] AtmosphereGetRecord(ServiceName service) -> sf::Out<ServiceRecord> record;
|
||||
[65001] AtmosphereListRecords(u64 offset) -> sf::OutArray<ServiceRecord> &records, sf::Out<u64> out_count;
|
||||
[65002] AtmosphereGetRecordSize() -> sf::Out<u64> record_size;
|
||||
}
|
||||
```
|
||||
|
||||
### IPC Commands
|
||||
Atmosphère's reimplementation extends the HIPC loader services' API with several custom commands.
|
||||
|
||||
The SwIPC definition for the `sm:` extension commands follows:
|
||||
```
|
||||
interface ams::sm::UserService is sm: {
|
||||
...
|
||||
[65000] AtmosphereInstallMitm(ServiceName service) -> sf::OutMoveHandle srv_h, sf::OutMoveHandle qry_h;
|
||||
[65001] AtmosphereUninstallMitm(ServiceName service);
|
||||
[65002] Deprecated_AtmosphereAssociatePidTidForMitm();
|
||||
[65003] AtmosphereAcknowledgeMitmSession(ServiceName service) -> sf::Out<MitmProcessInfo> client_info, sf::OutMoveHandle fwd_h;
|
||||
[65004] AtmosphereHasMitm(ServiceName service) -> sf::Out<bool> out;
|
||||
[65005] AtmosphereWaitMitm(ServiceName service);
|
||||
[65006] AtmosphereDeclareFutureMitm(ServiceName service);
|
||||
|
||||
[65100] AtmosphereHasService(ServiceName service) -> sf::Out<bool> out;
|
||||
[65101] AtmosphereWaitService(ServiceName service);
|
||||
}
|
||||
```
|
||||
|
||||
The SwIPC definition for the `sm:m` extension commands follows:
|
||||
```
|
||||
interface ams::sm::ManagerService is sm:m {
|
||||
...
|
||||
[65000] AtmosphereEndInitDefers(os::ProcessId process_id, sf::InBuffer &acid_sac, sf::InBuffer &aci_sac);
|
||||
[65001] AtmosphereHasMitm(ServiceName service) -> sf::Out<bool> out;
|
||||
[65002] AtmosphereRegisterProcess(os::ProcessId process_id, ncm::ProgramId program_id, cfg::OverrideStatus override_status, sf::InBuffer &acid_sac, sf::InBuffer &aci_sac);
|
||||
}
|
||||
```
|
||||
2
docs/components/modules/spl.md
Normal file
2
docs/components/modules/spl.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# spl
|
||||
This module is a reimplementation of the Horizon OS's `spl` system module, which is responsible for providing secure platform services such as cryptographic operations.
|
||||
14
docs/components/sept.md
Normal file
14
docs/components/sept.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# sept
|
||||
Sept is a payload that facilitates booting Atmosphère when targeting firmware version 7.0.0+.
|
||||
|
||||
It consists of a primary and a secondary payload.
|
||||
|
||||
## sept-primary
|
||||
sept-primary is essentially a stand-in for Nintendo's package1ldr, on 7.0.0+. To use it, the caller (normally fusée-secondary) loads the sept-primary binary to `0x4003F000`, loads the 7.0.0+ TSEC firmware to `0x40010F00`, and loads a signed, encrypted payload to `0x40016FE0`.
|
||||
|
||||
This signed, encrypted payload is normally sept-secondary.
|
||||
|
||||
## sept-secondary
|
||||
sept-secondary is a payload that performs 7.0.0+ key derivation, and then chainloads to `sept/payload.bin`.
|
||||
|
||||
It is normally stored encrypted/signed. Therefore, if one wishes to build sept-secondary instead of using release builds, one must bring their own keys.
|
||||
@@ -1,10 +1,21 @@
|
||||
# Stratosphère
|
||||
Stratosphère allows customization of the Horizon OS and Switch kernel. It includes custom sysmodules that extend the kernel and provide new features. It also includes a reimplementation of the loader sysmodules to hook important system actions.
|
||||
# stratosphère
|
||||
stratosphère provides customization of the Horizon OS at the system level. This includes a reimplementation of several system modules and additional, custom system modules that extend or add a variety of features.
|
||||
|
||||
The sysmodules that Stratosphère includes are:
|
||||
+ [boot](../modules/boot.md): This module boots the system and initalizes hardware.
|
||||
+ [creport](../modules/creport.md): Reimplementation of Nintendo’s crash report system. Dumps all error logs to the SD card instead of saving them to the NAND and sending them to Nintendo.
|
||||
+ [fs_mitm](../modules/fs_mitm.md): This module can log, deny, delay, replace, and redirect any request made to the File System.
|
||||
+ [loader](../modules/loader.md): Enables modifying the code of binaries that are not stored inside the kernel.
|
||||
+ [pm](../modules/pm.md): Reimplementation of Nintendo’s Process Manager.
|
||||
+ [sm](../modules/sm.md): Reimplementation of Nintendo’s Service Manager.
|
||||
## Modules
|
||||
The modules currently provided by stratosphère are:
|
||||
+ [ams_mitm](modules/ams_mitm.md)
|
||||
+ [boot](modules/boot.md)
|
||||
+ [boot2](modules/boot2.md)
|
||||
+ [creport](modules/creport.md)
|
||||
+ [dmnt](modules/dmnt.md)
|
||||
+ [eclct.stub](modules/eclct.stub.md)
|
||||
+ [erpt](modules/erpt.md)
|
||||
+ [fatal](modules/fatal.md)
|
||||
+ [jpegdec](modules/jpegdec.md)
|
||||
+ [loader](modules/loader.md)
|
||||
+ [ncm](modules/ncm.md)
|
||||
+ [pgl](modules/pgl.md)
|
||||
+ [pm](modules/pm.md)
|
||||
+ [ro](modules/ro.md)
|
||||
+ [sm](modules/sm.md)
|
||||
+ [spl](modules/spl.md)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
# Thermosphère
|
||||
Thermosphère is a hypervisor based implementation of emuNAND. An emuNAND is a copy of the firmware on the Switch’s internal memory (sysNAND), and is typically installed on an external SD Card.
|
||||
|
||||
An emuNAND operates completely independently of the sysNAND. This allows one to make or test various modifications and homebrew safely without needing to restore their NAND backup afterwards by testing things on the emuNAND, and switching back to the sysNAND when finished. In the case of past Nintendo systems such as the 3DS, an emuNAND could also be used to update your system to the latest firmware while keeping your sysNAND on a lower version, however this may be more difficult to do on the Switch due to Nintendo using efuse technology for major system updates.
|
||||
|
||||
Thermosphère is currently planned to be included in the 1.0 release of Atmosphère.
|
||||
# thermosphère
|
||||
thermosphère is a work in progress hypervisor implementation.
|
||||
This aims to provide functionality at the EL2 level which remains unused by the Horizon OS.
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
# Troposphère
|
||||
Troposphère contains various application-level modifications to the OS, such as launching homebrew directly from the homemenu or executing cheat/gameshark codes, similar to Luma3DS. Troposphère is not yet implemented in Atmosphère.
|
||||
# troposphère
|
||||
troposphère provides customization of the Horizon OS at the application level.
|
||||
|
||||
## reboot_to_payload
|
||||
Sample application to perform a system reboot into a payload of choice.
|
||||
|
||||
428
docs/features/cheats.md
Normal file
428
docs/features/cheats.md
Normal file
@@ -0,0 +1,428 @@
|
||||
# Cheats
|
||||
Atmosphère supports Action-Replay style cheat codes, with cheats loaded off of the SD card.
|
||||
|
||||
## Cheat Loading Process
|
||||
By default, Atmosphère will do the following when deciding whether to attach to a new application process:
|
||||
|
||||
+ Retrieve information about the new application process from `pm` and `loader`.
|
||||
+ Check whether a user-defined key combination is held, and stop if not.
|
||||
+ This defaults to "L is not held", but can be configured with override keys.
|
||||
+ The ini key to configure this is `cheat_enable_key`.
|
||||
+ Check whether the process is a real application, and stop if not.
|
||||
+ This guards against applying cheat codes to the Homebrew Loader.
|
||||
+ Attempt to load cheats from `/atmosphere/contents/<program_id>/cheats/<build_id>.txt`, where `build_id` is the hexadecimal representation of the first 8 bytes of the application's main executable's build id.
|
||||
+ If no cheats are found, then the cheat manager will stop.
|
||||
+ Open a kernel debug session for the new application process.
|
||||
+ Signal to a system event that a new cheat process has been attached to.
|
||||
|
||||
This behavior ensures that cheat codes are only loaded when the user would want them to.
|
||||
|
||||
In cases where `dmnt` has not activated the cheat manager, but the user wants to make it do so anyway, the cheat manager's service API provides a `ForceOpenCheatProcess` command that homebrew can use. This command will cause the cheat manager to try to force itself to attach to the process.
|
||||
|
||||
By default, all cheat codes listed in the loaded .txt file will be toggled on. This is configurable by the user by editing the `atmosphere!dmnt_cheats_enabled_by_default` [system setting](configurations.md).
|
||||
|
||||
Users may use homebrew programs to toggle cheats on and off at runtime via the cheat manager's service API.
|
||||
|
||||
## Cheat Code Compatibility
|
||||
Atmosphère manages cheat code through the execution of a small, custom virtual machine. Care has been taken to ensure that Atmosphère's cheat code format is fully backwards compatible with the pre-existing cheat code format, though new features have been added and bugs in the pre-existing cheat code applier have been fixed. Here is a short summary of the changes from the pre-existing format:
|
||||
|
||||
+ A number of bugs were fixed in the processing of conditional instructions.
|
||||
+ The pre-existing implementation was fundamentally broken, and checked for the wrong value when detecting the end of a conditional block.
|
||||
+ The pre-existing implementation also did not properly decode instructions, and instead linearly scanned for the terminator value. This caused problems if an instruction happened to encode a terminator inside its immediate values.
|
||||
+ The pre-existing implementation did not bounds check, and thus certain conditional cheat codes could cause it to read out-of-bounds memory, and potentially crash due to a data abort.
|
||||
+ Support was added for nesting conditional blocks.
|
||||
+ An instruction was added to perform much more complex arbitrary arithmetic on two registers.
|
||||
+ An instruction was added to allow writing the contents of register to a memory address specified by another register.
|
||||
+ The pre-existing implementation did not correctly synchronize with the application process, and thus would cause heavy lag under certain circumstances (especially around loading screens). This has been fixed in Atmosphère's implementation.
|
||||
|
||||
## Cheat Code Format
|
||||
The following provides documentation of the instruction format for the virtual machine used to manage cheat codes.
|
||||
|
||||
Typically, instruction type is encoded in the upper nybble of the first instruction u32.
|
||||
|
||||
### Code Type 0: Store Static Value to Memory
|
||||
Code type 0 allows writing a static value to a memory address.
|
||||
|
||||
#### Encoding
|
||||
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||
+ R: Register to use as an offset from memory region base.
|
||||
+ A: Immediate offset to use from memory region base.
|
||||
+ V: Value to write.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 1: Begin Conditional Block
|
||||
Code type 1 performs a comparison of the contents of memory to a static value.
|
||||
|
||||
If the condition is not met, all instructions until the appropriate conditional block terminator are skipped.
|
||||
|
||||
#### Encoding
|
||||
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||
+ C: Condition to use, see below.
|
||||
+ A: Immediate offset to use from memory region base.
|
||||
+ V: Value to compare to.
|
||||
|
||||
#### Conditions
|
||||
+ 1: >
|
||||
+ 2: >=
|
||||
+ 3: <
|
||||
+ 4: <=
|
||||
+ 5: ==
|
||||
+ 6: !=
|
||||
|
||||
---
|
||||
|
||||
### Code Type 2: End Conditional Block
|
||||
Code type 2 marks the end of a conditional block (started by Code Type 1 or Code Type 8).
|
||||
|
||||
#### Encoding
|
||||
`20000000`
|
||||
|
||||
---
|
||||
|
||||
### Code Type 3: Start/End Loop
|
||||
Code type 3 allows for iterating in a loop a fixed number of times.
|
||||
|
||||
#### Start Loop Encoding
|
||||
`300R0000 VVVVVVVV`
|
||||
|
||||
+ R: Register to use as loop counter.
|
||||
+ V: Number of iterations to loop.
|
||||
|
||||
#### End Loop Encoding
|
||||
`310R0000`
|
||||
|
||||
+ R: Register to use as loop counter.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 4: Load Register with Static Value
|
||||
Code type 4 allows setting a register to a constant value.
|
||||
|
||||
#### Encoding
|
||||
`400R0000 VVVVVVVV VVVVVVVV`
|
||||
|
||||
+ R: Register to use.
|
||||
+ V: Value to load.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 5: Load Register with Memory Value
|
||||
Code type 5 allows loading a value from memory into a register, either using a fixed address or by dereferencing the destination register.
|
||||
|
||||
#### Load From Fixed Address Encoding
|
||||
`5TMR00AA AAAAAAAA`
|
||||
|
||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||
+ R: Register to load value into.
|
||||
+ A: Immediate offset to use from memory region base.
|
||||
|
||||
#### Load from Register Address Encoding
|
||||
`5TMR10AA AAAAAAAA`
|
||||
|
||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||
+ R: Register to load value into.
|
||||
+ A: Immediate offset to use from register R.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 6: Store Static Value to Register Memory Address
|
||||
Code type 6 allows writing a fixed value to a memory address specified by a register.
|
||||
|
||||
#### Encoding
|
||||
`6T0RIor0 VVVVVVVV VVVVVVVV`
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ R: Register used as base memory address.
|
||||
+ I: Increment register flag (0 = do not increment R, 1 = increment R by T).
|
||||
+ o: Offset register enable flag (0 = do not add r to address, 1 = add r to address).
|
||||
+ r: Register used as offset when o is 1.
|
||||
+ V: Value to write to memory.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 7: Legacy Arithmetic
|
||||
Code type 7 allows performing arithmetic on registers.
|
||||
|
||||
However, it has been deprecated by Code type 9, and is only kept for backwards compatibility.
|
||||
|
||||
#### Encoding
|
||||
`7T0RC000 VVVVVVVV`
|
||||
|
||||
+ T: Width of arithmetic operation (1, 2, 4, or 8 bytes).
|
||||
+ R: Register to apply arithmetic to.
|
||||
+ C: Arithmetic operation to apply, see below.
|
||||
+ V: Value to use for arithmetic operation.
|
||||
|
||||
#### Arithmetic Types
|
||||
+ 0: Addition
|
||||
+ 1: Subtraction
|
||||
+ 2: Multiplication
|
||||
+ 3: Left Shift
|
||||
+ 4: Right Shift
|
||||
|
||||
---
|
||||
|
||||
### Code Type 8: Begin Keypress Conditional Block
|
||||
Code type 8 enters or skips a conditional block based on whether a key combination is pressed.
|
||||
|
||||
#### Encoding
|
||||
`8kkkkkkk`
|
||||
|
||||
+ k: Keypad mask to check against, see below.
|
||||
|
||||
Note that for multiple button combinations, the bitmasks should be ORd together.
|
||||
|
||||
#### Keypad Values
|
||||
Note: This is the direct output of `hidKeysDown()`.
|
||||
|
||||
+ 0000001: A
|
||||
+ 0000002: B
|
||||
+ 0000004: X
|
||||
+ 0000008: Y
|
||||
+ 0000010: Left Stick Pressed
|
||||
+ 0000020: Right Stick Pressed
|
||||
+ 0000040: L
|
||||
+ 0000080: R
|
||||
+ 0000100: ZL
|
||||
+ 0000200: ZR
|
||||
+ 0000400: Plus
|
||||
+ 0000800: Minus
|
||||
+ 0001000: Left
|
||||
+ 0002000: Up
|
||||
+ 0004000: Right
|
||||
+ 0008000: Down
|
||||
+ 0010000: Left Stick Left
|
||||
+ 0020000: Left Stick Up
|
||||
+ 0040000: Left Stick Right
|
||||
+ 0080000: Left Stick Down
|
||||
+ 0100000: Right Stick Left
|
||||
+ 0200000: Right Stick Up
|
||||
+ 0400000: Right Stick Right
|
||||
+ 0800000: Right Stick Down
|
||||
+ 1000000: SL
|
||||
+ 2000000: SR
|
||||
|
||||
---
|
||||
|
||||
### Code Type 9: Perform Arithmetic
|
||||
Code type 9 allows performing arithmetic on registers.
|
||||
|
||||
#### Register Arithmetic Encoding
|
||||
`9TCRS0s0`
|
||||
|
||||
+ T: Width of arithmetic operation (1, 2, 4, or 8 bytes).
|
||||
+ C: Arithmetic operation to apply, see below.
|
||||
+ R: Register to store result in.
|
||||
+ S: Register to use as left-hand operand.
|
||||
+ s: Register to use as right-hand operand.
|
||||
|
||||
#### Immediate Value Arithmetic Encoding
|
||||
`9TCRS100 VVVVVVVV (VVVVVVVV)`
|
||||
|
||||
+ T: Width of arithmetic operation (1, 2, 4, or 8 bytes).
|
||||
+ C: Arithmetic operation to apply, see below.
|
||||
+ R: Register to store result in.
|
||||
+ S: Register to use as left-hand operand.
|
||||
+ V: Value to use as right-hand operand.
|
||||
|
||||
#### Arithmetic Types
|
||||
+ 0: Addition
|
||||
+ 1: Subtraction
|
||||
+ 2: Multiplication
|
||||
+ 3: Left Shift
|
||||
+ 4: Right Shift
|
||||
+ 5: Logical And
|
||||
+ 6: Logical Or
|
||||
+ 7: Logical Not (discards right-hand operand)
|
||||
+ 8: Logical Xor
|
||||
+ 9: None/Move (discards right-hand operand)
|
||||
|
||||
---
|
||||
|
||||
### Code Type 10: Store Register to Memory Address
|
||||
Code type 10 allows writing a register to memory.
|
||||
|
||||
#### Encoding
|
||||
`ATSRIOxa (aaaaaaaa)`
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ S: Register to write to memory.
|
||||
+ R: Register to use as base address.
|
||||
+ I: Increment register flag (0 = do not increment R, 1 = increment R by T).
|
||||
+ O: Offset type, see below.
|
||||
+ x: Register used as offset when O is 1, Memory type when O is 3, 4 or 5.
|
||||
+ a: Value used as offset when O is 2, 4 or 5.
|
||||
|
||||
#### Offset Types
|
||||
+ 0: No Offset
|
||||
+ 1: Use Offset Register
|
||||
+ 2: Use Fixed Offset
|
||||
+ 3: Memory Region + Base Register
|
||||
+ 4: Memory Region + Relative Address (ignore address register)
|
||||
+ 5: Memory Region + Relative Address + Offset Register
|
||||
|
||||
---
|
||||
|
||||
### Code Type 11: Reserved
|
||||
Code Type 11 is currently reserved for future use.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 12-15: Extended-Width Instruction
|
||||
Code Types 12-15 signal to the VM to treat the upper two nybbles of the first dword as instruction type, instead of just the upper nybble.
|
||||
|
||||
This reserves an additional 64 opcodes for future use.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xC0: Begin Register Conditional Block
|
||||
Code type 0xC0 performs a comparison of the contents of a register and another value. This code support multiple operand types, see below.
|
||||
|
||||
If the condition is not met, all instructions until the appropriate conditional block terminator are skipped.
|
||||
|
||||
#### Encoding
|
||||
```
|
||||
C0TcSX##
|
||||
C0TcS0Ma aaaaaaaa
|
||||
C0TcS1Mr
|
||||
C0TcS2Ra aaaaaaaa
|
||||
C0TcS3Rr
|
||||
C0TcS400 VVVVVVVV (VVVVVVVV)
|
||||
C0TcS5X0
|
||||
```
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ c: Condition to use, see below.
|
||||
+ S: Source Register.
|
||||
+ X: Operand Type, see below.
|
||||
+ M: Memory Type (operand types 0 and 1).
|
||||
+ R: Address Register (operand types 2 and 3).
|
||||
+ a: Relative Address (operand types 0 and 2).
|
||||
+ r: Offset Register (operand types 1 and 3).
|
||||
+ X: Other Register (operand type 5).
|
||||
+ V: Value to compare to (operand type 4).
|
||||
|
||||
#### Operand Type
|
||||
+ 0: Memory Base + Relative Offset
|
||||
+ 1: Memory Base + Offset Register
|
||||
+ 2: Register + Relative Offset
|
||||
+ 3: Register + Offset Register
|
||||
+ 4: Static Value
|
||||
+ 5: Other Register
|
||||
|
||||
#### Conditions
|
||||
+ 1: >
|
||||
+ 2: >=
|
||||
+ 3: <
|
||||
+ 4: <=
|
||||
+ 5: ==
|
||||
+ 6: !=
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xC1: Save or Restore Register
|
||||
Code type 0xC1 performs saving or restoring of registers.
|
||||
|
||||
#### Encoding
|
||||
`C10D0Sx0`
|
||||
|
||||
+ D: Destination index.
|
||||
+ S: Source index.
|
||||
+ x: Operand Type, see below.
|
||||
|
||||
#### Operand Type
|
||||
+ 0: Restore register
|
||||
+ 1: Save register
|
||||
+ 2: Clear saved value
|
||||
+ 3: Clear register
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xC2: Save or Restore Register with Mask
|
||||
Code type 0xC2 performs saving or restoring of multiple registers using a bitmask.
|
||||
|
||||
#### Encoding
|
||||
`C2x0XXXX`
|
||||
|
||||
+ x: Operand Type, see below.
|
||||
+ X: 16-bit bitmask, bit i == save or restore register i.
|
||||
|
||||
#### Operand Type
|
||||
+ 0: Restore register
|
||||
+ 1: Save register
|
||||
+ 2: Clear saved value
|
||||
+ 3: Clear register
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xC3: Read or Write Static Register
|
||||
Code type 0xC3 reads or writes a static register with a given register.
|
||||
|
||||
#### Encoding
|
||||
`C3000XXx`
|
||||
|
||||
+ XX: Static register index, 0x00 to 0x7F for reading or 0x80 to 0xFF for writing.
|
||||
+ x: Register index.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xF0: Double Extended-Width Instruction
|
||||
Code Type 0xF0 signals to the VM to treat the upper three nybbles of the first dword as instruction type, instead of just the upper nybble.
|
||||
|
||||
This reserves an additional 16 opcodes for future use.
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xFF0: Pause Process
|
||||
Code type 0xFF0 pauses the current process.
|
||||
|
||||
#### Encoding
|
||||
`FF0?????`
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xFF1: Resume Process
|
||||
Code type 0xFF1 resumes the current process.
|
||||
|
||||
#### Encoding
|
||||
`FF1?????`
|
||||
|
||||
---
|
||||
|
||||
### Code Type 0xFFF: Debug Log
|
||||
Code type 0xFFF writes a debug log to the SD card under the folder `/atmosphere/cheat_vm_logs/`.
|
||||
|
||||
#### Encoding
|
||||
```
|
||||
FFFTIX##
|
||||
FFFTI0Ma aaaaaaaa
|
||||
FFFTI1Mr
|
||||
FFFTI2Ra aaaaaaaa
|
||||
FFFTI3Rr
|
||||
FFFTI4X0
|
||||
```
|
||||
|
||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||
+ I: Log id.
|
||||
+ X: Operand Type, see below.
|
||||
+ M: Memory Type (operand types 0 and 1).
|
||||
+ R: Address Register (operand types 2 and 3).
|
||||
+ a: Relative Address (operand types 0 and 2).
|
||||
+ r: Offset Register (operand types 1 and 3).
|
||||
+ X: Value Register (operand type 4).
|
||||
|
||||
#### Operand Type
|
||||
+ 0: Memory Base + Relative Offset
|
||||
+ 1: Memory Base + Offset Register
|
||||
+ 2: Register + Relative Offset
|
||||
+ 3: Register + Offset Register
|
||||
+ 4: Register Value
|
||||
153
docs/features/configurations.md
Normal file
153
docs/features/configurations.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Configurations
|
||||
Atmosphère provides a variety of customizable configurations to better adjust to users' needs.
|
||||
|
||||
## BCT.ini
|
||||
This is the configuration file used by fusée.
|
||||
This file is located under the `/atmosphere/config/` folder on your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
||||
|
||||
### Adding a Custom Boot Splashscreen
|
||||
Atmosphère provides its own default splashscreen which is displayed at boot time. However, this can be replaced at will.
|
||||
|
||||
The boot splashscreen must be a BMP file, it must be 720x1280 (1280x720 rotated 90 degrees left/counterclockwise/anti-clockwise) resolution, and be in 32-bit ARGB format. You can use image editing software such as GIMP or Photoshop to export the image in this format.
|
||||
|
||||
Add the following lines to BCT.ini and change the value of `custom_splash` to the actual path and filename of your boot splashscreen:
|
||||
```
|
||||
[stage2]
|
||||
custom_splash = /path/to/your/bootlogo.bmp
|
||||
```
|
||||
|
||||
### Configuring "nogc" Protection
|
||||
"nogc" is a feature provided by fusée-secondary which disables the Nintendo Switch's Game Card reader. Its purpose is to prevent the reader from being updated when the console has been updated, without burning fuses, from a lower firmware version. More specifically, from firmware versions 4.0.0 or 9.0.0 which introduced updates to the Game Card reader's firmware. By default, Atmosphère will protect the Game Card reader automatically, but you are free to change it.
|
||||
|
||||
To change its functionality, add the following line to the `stratosphere` section and change the value of `X` according to the following list:
|
||||
```
|
||||
[stratosphere]
|
||||
nogc = X
|
||||
```
|
||||
```
|
||||
1 = force-enable nogc, so Atmosphère will always disable the Game Card reader.
|
||||
0 = force-disable nogc, so Atmosphère will always enable the Game Card reader.
|
||||
```
|
||||
|
||||
### NCM opt-out
|
||||
Atmosphère provides a reimplementation of the [ncm](../components/modules/ncm.md) system module. If you wish to disable this reimplementation add the following line to the `stratosphere` section:
|
||||
```
|
||||
[stratosphere]
|
||||
disable_ncm = 1
|
||||
```
|
||||
|
||||
### Logging
|
||||
This is an advanced feature aimed at developers trying to debug boot time issues. It enables logging of the fusée stages to be displayed on screen.
|
||||
|
||||
Add the following lines to BCT.ini and change the value of `X` according to the following list:
|
||||
```
|
||||
[config]
|
||||
log_level = X
|
||||
```
|
||||
```
|
||||
0 = NONE
|
||||
1 = ERROR
|
||||
2 = WARNING
|
||||
3 = MANDATORY
|
||||
4 = INFO
|
||||
5 = DEBUG
|
||||
```
|
||||
|
||||
A special level is also provided to prevent prefix creation. To use it, do a bitwise OR with this mask:
|
||||
`0x100 = NO_PREFIX`
|
||||
|
||||
## emummc.ini
|
||||
This is the configuration file used for the [emummc](../components/emummc.md) component.
|
||||
This file is located under the `/emuMMC/` folder on your SD card.
|
||||
|
||||
Please refer to the project's repository [here](https://github.com/m4xw/emuMMC) for detailed instructions and documentation.
|
||||
|
||||
## exosphere.ini
|
||||
This is the configuration file used by exosphère.
|
||||
This file is located in the root of your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
||||
|
||||
### Configuring Debugging Modes
|
||||
By default, Atmosphère signals to the Horizon kernel that debugging is enabled while leaving usermode debugging disabled, but this can cause undesirable side-effects. If you wish to change this behavior, go to the `exosphere` section and change the value of `X` according to the following list.
|
||||
```
|
||||
[exosphere]
|
||||
debugmode = X
|
||||
debugmode_user = X
|
||||
```
|
||||
```
|
||||
1 = enable
|
||||
0 = disable
|
||||
```
|
||||
|
||||
### Blanking PRODINFO
|
||||
Atmosphère provides a way for users to blank their factory installed calibration data (known as PRODINFO) in either emulated or system eMMC environments. You can find more detailed information on this inside the respective template file. Usage of this configuration is not encouraged.
|
||||
|
||||
## override_config.ini
|
||||
This file is located under the `/atmosphere/config/` folder on your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
||||
|
||||
### Overrides Format
|
||||
Overrides are parsed from the `/atmosphere/config/override_config.ini` file during the boot process.
|
||||
|
||||
By default `override_config.ini` is not configured. It can be used to select the behavior of certain buttons and bind them to functionalities such as launching the Homebrew Menu or enabling the cheat code manager.
|
||||
|
||||
You can modify the override_key entries in `override_config.ini` with this list of valid buttons:
|
||||
| Formal Name | .ini Name |
|
||||
| ----------- | --------- |
|
||||
| A Button | A |
|
||||
| B Button | B |
|
||||
| X Button | X |
|
||||
| Y Button | Y |
|
||||
| Left Stick | LS |
|
||||
| Right Stick | RS |
|
||||
| L Button | L |
|
||||
| R Button | R |
|
||||
| ZL Button | ZL |
|
||||
| ZR Button | ZR |
|
||||
| + Button | PLUS |
|
||||
| - Button | MINUS |
|
||||
| Left Dpad | DLEFT |
|
||||
| Up Dpad | DUP |
|
||||
| Right Dpad | DRIGHT |
|
||||
| Down Dpad | DDOWN |
|
||||
| SL Button | SL |
|
||||
| SR Button | SR |
|
||||
|
||||
To invert the behavior of the override key, place an exclamation point in front of whatever button you wish to use. It will launch the actual game while holding down that button, instead of going into the Homebrew Menu. For example, `override_key=!R` will run the game only while holding down R when launching it, otherwise it will boot into the Homebrew Menu. Afterwards you may reinsert your SD card into your Switch and boot into Atmosphère as you normally would. You should now be able to boot into the Homebrew Menu by launching your designated program of choice.
|
||||
|
||||
## system_settings.ini
|
||||
This file is located under the `/atmosphere/config/` folder on your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
||||
|
||||
### Settings Format
|
||||
Atmosphère provides a way to override the firmware debug settings used by the system. These can be parsed from the `/atmosphere/config/system_settings.ini` file during the boot process. This file is a normal ini file, with some specific interpretations.
|
||||
|
||||
The standard representation of a setting's identifier takes the form `name!key`. This is represented within `system_settings.ini` as a section `name`, with an entry `key`. For example:
|
||||
```
|
||||
[name]
|
||||
key = ...
|
||||
```
|
||||
|
||||
Settings can have variable types (strings, integral values, byte arrays, etc). To accommodate this, `system_settings.ini` must store values as a `type_identifier!value_store` pair. A number of different types are supported, with identifiers detailed below.
|
||||
Please note that a malformed value string will cause a fatal error to occur on boot. A full example of a custom setting is given below (setting `eupld!upload_enabled = 0`), for posterity:
|
||||
```
|
||||
[eupld]
|
||||
upload_enabled = u8!0x0
|
||||
```
|
||||
|
||||
#### Supported Types
|
||||
* Strings
|
||||
* Type identifiers: `str`, `string`
|
||||
* The value string is used directly as the setting, with null terminator appended.
|
||||
* Integral types
|
||||
* Type identifiers: `u8`, `u16`, `u32`, `u64`
|
||||
* The value string is parsed via a call to `strtoul(value, NULL, 0)`.
|
||||
* Setting bitwidth is determined by the identifier (8 for 1 byte, 16 for 2 bytes, and so on).
|
||||
* Raw bytes
|
||||
* Type identifiers: `hex`, `bytes`
|
||||
* The value string is parsed as a hexadecimal string.
|
||||
* The value string must be of even length, or a fatal error will be thrown on parse.
|
||||
|
||||
## Content Specific Flags
|
||||
Atmosphère supports customizing CFW behavior based on the presence of `flags` on the SD card.
|
||||
|
||||
The following flags are supported on a per-program basis, by placing `<flag_name>.flag` inside `/atmosphere/contents/<program_id>/flags/`:
|
||||
+ `boot2`, which indicates that the program should be launched during the `boot2` process.
|
||||
+ `redirect_save`, which indicates that the program wants its savedata to be redirected to the SD card.
|
||||
53
docs/features/dns_mitm.md
Normal file
53
docs/features/dns_mitm.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# DNS.mitm
|
||||
As of 0.18.0, atmosphère provides a mechanism for redirecting DNS resolution requests.
|
||||
|
||||
By default, atmosphère redirects resolution requests for official telemetry servers, redirecting them to a loopback address.
|
||||
|
||||
## Hosts files
|
||||
|
||||
DNS.mitm can be configured through the usage of a slightly-extended `hosts` file format, which is parsed only once on system startup.
|
||||
|
||||
In particular, hosts files parsed by DNS.mitm have the following extensions to the usual format:
|
||||
+ `*` is treated as a wildcard character, matching any collection of 0 or more characters wherever it occurs in a hostname.
|
||||
+ `%` is treated as a stand-in for the value of `nsd!environment_identifier`. This is always `lp1`, on production devices.
|
||||
|
||||
If multiple entries in a host file match a domain, the last-defined match is used.
|
||||
|
||||
Please note that homebrew may trigger a hosts file re-parse by sending the extension IPC command 65000 ("AtmosphereReloadHostsFile") to a connected `sfdnsres` session.
|
||||
|
||||
### Hosts file selection
|
||||
|
||||
Atmosphère will try to read hosts from the following file paths, in order, stopping once it successfully performs a file read:
|
||||
|
||||
+ (emummc only) `/atmosphere/hosts/emummc_%04lx.txt`, formatted with the emummc's id number (see `emummc.ini`).
|
||||
+ (emummc only) `/atmosphere/hosts/emummc.txt`.
|
||||
+ (sysmmc only) `/atmosphere/hosts/sysmmc.txt`.
|
||||
+ `/atmosphere/hosts/default.txt`
|
||||
|
||||
If `/atmosphere/hosts/default.txt` does not exist, atmosphère will create it to contain the defaults.
|
||||
|
||||
### Atmosphère defaults
|
||||
|
||||
By default, atmosphère's default redirections are parsed **in addition to** the contents of the loaded hosts file.
|
||||
|
||||
This is equivalent to thinking of the loaded hosts file as having the atmosphère defaults prepended to it.
|
||||
|
||||
This setting is considered desirable, because it minimizes the telemetry risks if a user forgets to update a custom hosts file on a system update which changes the telemetry servers.
|
||||
|
||||
This behavior can be opted-out from by setting `atmosphere!add_defaults_to_dns_hosts = u8!0x0` in `system_settings.ini`.
|
||||
|
||||
The current default redirections are:
|
||||
|
||||
```
|
||||
# Nintendo telemetry servers
|
||||
127.0.0.1 receive-%.dg.srv.nintendo.net receive-%.er.srv.nintendo.net
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
||||
On startup (or on hosts file re-parse), DNS.mitm will log both what hosts file it selected and the contents of all redirections it parses to `/atmosphere/logs/dns_mitm_startup.log`.
|
||||
|
||||
In addition, if the user sets `atmosphere!enable_dns_mitm_debug_log = u8!0x1` in `system_settings.ini`, DNS.mitm will log all requests to GetHostByName/GetAddrInfo to `/atmosphere/logs/dns_mitm_debug.log`. All redirections will be noted when they occur.
|
||||
|
||||
## Opting-out of DNS.mitm entirely
|
||||
If you wish to disable DNS.mitm entirely, `system_settings.ini` can be edited to set `atmosphere!enable_dns_mitm = u8!0x0`.
|
||||
21
docs/licensing_exemptions/MIT_LICENSE
Normal file
21
docs/licensing_exemptions/MIT_LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018-2020 Atmosphère-NX
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
45
docs/main.md
45
docs/main.md
@@ -1,29 +1,30 @@
|
||||
# Atmosphère
|
||||
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch. Atmosphère consists of several different components, each in charge of performing different system functions of the Nintendo Switch.
|
||||
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch. Its design principle consists of a multi-layered approach where each layer replaces/modifies a different component of the Nintendo Switch's system.
|
||||
|
||||
The components of Atmosphère are:
|
||||
+ [Fusée](../docs/components/fusee/fusee.md), a custom bootloader.
|
||||
+ [Exosphère](../docs/components/exosphere.md), a fully-featured custom secure monitor.
|
||||
+ [Stratosphère](../docs/components/stratosphere.md), a set of custom system modules.
|
||||
+ [Thermosphère](../docs/components/thermosphere.md), a hypervisor-based emuNAND implementation. This component has not been implemented yet.
|
||||
+ [Troposphère](../docs/components/troposphere.md), Application-level patches to the Horizon OS. This component has also not been implemented yet.
|
||||
## Components
|
||||
Atmosphère provides six core components, mimicking to some degree the various layers of the Earth's atmosphere:
|
||||
+ [fusée](components/fusee.md)
|
||||
+ [exosphère](components/exosphere.md)
|
||||
+ [thermosphère](components/thermosphere.md)
|
||||
+ [mesosphère](components/mesosphere.md)
|
||||
+ [stratosphère](components/stratosphere.md)
|
||||
+ [troposphère](components/troposphere.md)
|
||||
|
||||
### Modules
|
||||
The Stratosphère component of Atmosphère contains various modules. These have a `.kip` extension. They provide custom features, extend existing features, or replace Nintendo sysmodules.
|
||||
Additionally, Atmosphère also provides the following secondary components:
|
||||
+ [emummc](components/emummc.md)
|
||||
+ [sept](components/sept.md)
|
||||
+ [libraries](components/libraries.md)
|
||||
|
||||
Stratosphère's modules include:
|
||||
+ [boot](../docs/modules/boot.md)
|
||||
+ [creport](../docs/modules/creport.md)
|
||||
+ [fs_mitm](../docs/modules/fs_mitm.md)
|
||||
+ [loader](../docs/modules/loader.md)
|
||||
+ [pm](../docs/modules/pm.md)
|
||||
+ [sm](../docs/modules/sm.md)
|
||||
## Features
|
||||
Atmosphère provides several original features which add or expand functionalities for the customized firmware environment:
|
||||
+ [Cheats](features/cheats.md)
|
||||
+ [Configurations](features/configurations.md)
|
||||
|
||||
### Building Atmosphère
|
||||
A guide to building Atmosphère can be found [here](../docs/building.md).
|
||||
## Building Atmosphère
|
||||
A guide to building Atmosphère can be found [here](building.md).
|
||||
|
||||
### Upcoming Features
|
||||
A list of planned features for Atmosphère can be found [here](../docs/roadmap.md).
|
||||
## Upcoming Features
|
||||
A list of planned features for Atmosphère can be found [here](roadmap.md).
|
||||
|
||||
### Release History
|
||||
A changelog of previous versions of Atmosphère can be found [here](../docs/changelog.md).
|
||||
## Release History
|
||||
A changelog of previous versions of Atmosphère can be found [here](changelog.md).
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
# boot
|
||||
The boot module is responsible for booting the system and initalizing hardware. A second boot module known as boot2 is integrated with the [pm (process manager)](../modules/pm.md) sysmodule in Atmosphère, and launches other processes.
|
||||
@@ -1,2 +0,0 @@
|
||||
# creport
|
||||
creport is a reimplementation of Nintendo's crash reporter. Atmosphère's creport catches all error logs that would have been saved to the NAND and instead saves them to the SD card for debugging purposes. This is helpful because the errors no longer go to Nintendo and developers of homebrew can still see the errors to help with the debugging process. creport catches system errors, game crashes, and homebrew crashes.
|
||||
@@ -1,2 +0,0 @@
|
||||
# fs_mitm
|
||||
fs_mitm is a sysmodule that enables intercepting file system operations. This module can log, deny, delay, replace, or redirect any request made to the filesystem. It enables LayeredFS to function, which allows for game mods.
|
||||
@@ -1,68 +0,0 @@
|
||||
# loader
|
||||
|
||||
loader is a reimplementation of the loader sysmodule. This module is responsible for creating processes from executable NSO images and registering their access control with the kernel, sm, and fs.
|
||||
|
||||
## Atmosphère Extensions
|
||||
|
||||
Atmosphère extends this module to allow executables to be replaced or patched by files stored on the SD card. Note that a few services are required for SD card access and therefore cannot be replaced or patched in this manner. This includes psc, bus, and pcv.
|
||||
|
||||
### Exefs Replacement
|
||||
|
||||
TODO: details on buttons affecting this.
|
||||
|
||||
When a process is created, loader will search for several NSO filenames in the title's exefs directory.
|
||||
These filenames are, in this order:
|
||||
|
||||
- rtld
|
||||
- main
|
||||
- subsdk0
|
||||
- subsdk1
|
||||
- ...
|
||||
- subsdk9
|
||||
- sdk
|
||||
|
||||
Each NSO that is found will be loaded into the process contiguously. The process's entrypoint is at the first NSO to be loaded, usually `rtld` or `main`.
|
||||
|
||||
Additionally, when a process is loaded, loader will search for a `main.npdm` file in the exefs directory specifying the title's permissions.
|
||||
|
||||
Atmosphère extends this functionality by also searching for these files on the SD card. When searching for a file, loader will first check if it exists on the SD card. If it does, that file will be used instead. Otherwise, it will use the copy located in the exefs, if that is present. The following directory will be searched.
|
||||
|
||||
```
|
||||
sdmc:/atmosphere/titles/<title id>/exefs/
|
||||
```
|
||||
|
||||
This allows the replacement of applets, sysmodules, or even games with homebrew versions.
|
||||
|
||||
In order to prevent an NSO from being loaded even if it exists in the exefs, loader will also check if a stub file exists. If such a file exists, the NSO will not be loaded. The files should be named like `rtld.stub`, `main.stub`, etc. and may be empty.
|
||||
|
||||
### NSO Patching
|
||||
|
||||
TODO: details on buttons affecting this.
|
||||
|
||||
When an NSO is loaded, the stratosphere implementatin of loader will search for IPS patch files on the SD card in the following locations.
|
||||
```
|
||||
sdmc:/atmosphere/exefs_patches/<patchset name>/<nso build id>.ips
|
||||
```
|
||||
This organization allows patchsets affecting multiple NSOs to be distributed as a single directory. Patches will be searched for in each patchset directory. The name of each patch file should match the hexadecimal build ID of the NSO to affect, except that trailing zero bytes may be left off. Because the NSO build ID is unique for every NSO, this means patches will only apply to the files they are meant to apply to.
|
||||
|
||||
Patch files are accepted in either IPS format or IPS32 format.
|
||||
|
||||
Because NSO files are compressed, patch files are not made between the original version of a compressed NSO and the modified version of such an NSO. Instead, they are made between the uncompressed version of an NSO and the modified (and still uncompressed) version of that NSO. This also means that a patch file cannot be manually applied to the compressed version of an NSO; it must be applied to the uncompressed version. The Stratosphere implementation of loader will correctly apply these patches while loading the process regardless of whether the NSO it finds is compressed or not.
|
||||
|
||||
When authoring patches, [hactool](https://github.com/SciresM/hactool) can be used to find an NSO's build ID and to uncompress NSOs. Recent versions of the [ReSwitched IDA loaders](https://github.com/reswitched/loaders) can be used to load uncompressed NSOs into IDA in such a way that you can [apply patches to the input file](https://www.hex-rays.com/products/ida/support/idadoc/1618.shtml). From there, any IPS tool can be used to create the patch between the original NSO and the patched NSO. Note that if the NSO you are patching is larger than 16 MiB, you will have to use a tool that supports IPS32.
|
||||
|
||||
### HBL Support
|
||||
|
||||
Atmosphère can use the loader module in order to turn any game on your Switch's home menu into a launchpoint for the Homebrew Menu, rather than launching it through the album applet. This allows one to launch the Homebrew Menu with access to the ~3.2GB of RAM that the Switch reserves for games and applications, as opposed to the 442MB of RAM we are limited to when launching the Homebrew Menu from the album. This also means that it is no longer necessary to install homebrew as `.nsp` files on your Switch so long as you are using this method, as the only reason to do so is to allow the homebrew to access all of the Switch's available memory.
|
||||
|
||||
In order to setup this method you will need the latest release of [hbmenu](https://github.com/switchbrew/nx-hbmenu/releases), and the latest release of [hbloader](https://github.com/switchbrew/nx-hbloader/releases). Place `hbmenu.nro` on the root of your Switch's SD Card, and place `hbl.nsp` in the atmosphere folder. From there, simply configure `loader.ini` in the atmosphere folder by replacing the Title ID in the ini (hbl_tid) (it is the Title ID for the album by default) with the Title ID of whatever game you wish to use to launch the Homebrew Menu. A list of Title IDs for Switch Games can be found [here](https://switchbrew.org/wiki/Title_list/Games). Afterwards you may reinsert your SD Card into your Switch and boot into Atmosphère as you normally would. You should now be able to boot into the Homebrew Menu by launching your designated game of choice.
|
||||
|
||||
### Button Overrides
|
||||
|
||||
By default `loader.ini` is configured to launch the Homebrew Menu when launching the game normally, and launching the game when selecting the game while holding down R. If you wish to change this, you can modify the override_key section of `loader.ini`. Placing an exclamation point in front of whatever button you wish to use will make it so that you will only launch the actual game while holding down that button, otherwise you will go into the Homebrew Menu. Removing the exclamation point will reverse this, meaning that you will boot into the Homebrew Menu only while holding down the assigned button when launching the game.
|
||||
|
||||
For example, `override_key=!R` will run the game only while holding down R when launching it, otherwise it will boot into the Homebrew Menu. `override_key=R` will only boot into the Homebrew Menu while holding down R when launching the game, otherwise it will launch the game as normal.
|
||||
|
||||
### SM MITM Integration
|
||||
|
||||
When the Stratosphere implementation of loader creates a new process, it notifies [sm](sm.md) through the `AtmosphereAssociatePidTidForMitm` command to notify any MITM services of new processes' identities.
|
||||
@@ -1,23 +0,0 @@
|
||||
# pm
|
||||
|
||||
pm is a reimplementation of Nintendo's process manager. This module is responsible for tracking running processes on the system, and managing resource limits. pm is also required to create and manage processes for homebrew applications.
|
||||
|
||||
## Atmosphère Extensions
|
||||
|
||||
There are a few ways in which the Stratosphere implementation of pm differs intentionally from the stock pm.
|
||||
|
||||
### IPC: AtmosphereGetProcessHandle
|
||||
|
||||
The Stratosphere implementation of pm adds an additional command to the [`pm:dmnt`](https://reswitched.github.io/SwIPC/ifaces.html#nn::pm::detail::IDebugMonitorInterface) interface, called `AtmosphereGetProcessHandle`. Its command ID is `65000` on all system firmware versions. It takes a `u64 process_id` and returns a process handle for the specified process, if that process is known. Notable exceptions include KIPs, which are not known to pm. If the specified process cannot be found, error code 0x20F is returned.
|
||||
|
||||
The SwIPC definition for this command follows.
|
||||
```
|
||||
interface nn::pm::detail::IDebugMonitorInterface is pm:dmnt {
|
||||
...
|
||||
[65000] AtmosphereGetProcessHandle(u64 pid) -> handle<copy, process> process_handle;
|
||||
}
|
||||
```
|
||||
|
||||
### Extra System Memory for Sysmodules
|
||||
|
||||
The Stratosphere implementation of pm shrinks the APPLET memory pool by 24 MiB by default, giving this memory to the SYSTEM pool. This allows custom sysmodules to use more memory without hitting the SYSTEM memory limit.
|
||||
@@ -1,69 +0,0 @@
|
||||
# sm
|
||||
|
||||
sm is a reimplementation of Nintendo's service manager. It allows Atmosphère to add or remove process handle limits, add new services, or intercept service calls. This allows high-level intercepting of Horizon OS functionality.
|
||||
|
||||
## Atmosphère Extensions
|
||||
|
||||
There are a few ways in which the Stratosphere implementation of sm differs intentionally from the stock sm.
|
||||
|
||||
### IPC: MITM Commands
|
||||
|
||||
The Stratosphere implementation of sm adds a few additional commands to the [`sm:`](https://reswitched.github.io/SwIPC/ifaces.html#nn::sm::detail::IUserInterface) port session.
|
||||
|
||||
Their SwIPC definitions follow.
|
||||
```
|
||||
interface nn::sm::detail::IUserInterface is sm: {
|
||||
...
|
||||
[65000] AtmosphereInstallMitm(ServiceName service) -> handle<port, move> service, handle<server_session, move> query;
|
||||
[65001] AtmosphereUninstallMitm(ServiceName service);
|
||||
[65002] AtmosphereAssociatePidTidForMitm(u64 pid, u64 tid);
|
||||
}
|
||||
```
|
||||
|
||||
#### AtmosphereInstallMitm
|
||||
|
||||
This command alters the registration for the named service, in order to allow services to intercept communication between client processes and their intended services. It is used by [fs_mitm](fs_mitm.md).
|
||||
|
||||
It takes the name of the service to install an MITM for, and returns two handles. The first is a port handle, similar to those returned from the [RegisterService](https://reswitched.github.io/SwIPC/ifaces.html#nn::sm::detail::IUserInterface(2)) command. The second is the server side of a session, called the query session. This session will used by sm to determine whether or not a new session should be intercepted, and to inform the MITM service of the identity of new processes.
|
||||
|
||||
The query session is expected to implement the following interface.
|
||||
```
|
||||
interface MitmQueryService {
|
||||
[65000] ShouldMitm(u64 pid) -> u64 should_mitm;
|
||||
[65001] AssociatePidTid(u64 pid, u64 tid);
|
||||
}
|
||||
```
|
||||
|
||||
The `ShouldMitm` command is invoked whenever a process attempts to make a new connection to the MITM'd service. It should return `0` if the process's connection should not be intercepted. Any other value will cause the process's connection to be intercepted. If the command returns an error code, the process's connection will not be intercepted.
|
||||
|
||||
The `AssociatePidTid` command is invoked on all MITM query sessions whenever a new process is created, in order to inform those services of the identity of a newly created process before it attempts to connect to any services.
|
||||
|
||||
If the process that installed the MITM attempts to connect to the service, it will always connect to the original service.
|
||||
|
||||
This command requires that the session be initialized, returning error code 0x415 if it is not.
|
||||
If the given service name is invalid, error code 0xC15 is returned.
|
||||
If the user does not have service registration permission for the named service, error code 0x1015 is returned.
|
||||
If the service has not yet been registered, error code 0xE15 is returned.
|
||||
If the service already has an MITM installed, error code 0x815 is returned.
|
||||
|
||||
#### AtmosphereUninstallMitm
|
||||
|
||||
Removes any installed MITM for the named service.
|
||||
|
||||
This command requires that the session be initialized, returning error code 0x415 if it is not.
|
||||
|
||||
#### AtmosphereAssociatePidTidForMitm
|
||||
|
||||
This command is used internally by the Stratosphere implementation of the [loader](loader.md) sysmodule, when a new process is created. It will call the `AssociatePidTid` command on every registered MITM query session.
|
||||
|
||||
If the given process ID refers to a kernel internal process, error code 0x1015 is returned. This command requires that the session be initialized, returning error code 0x415 if it is not.
|
||||
|
||||
### Minimum Session Limit
|
||||
|
||||
When a service is registered, the sysmodule registering it must specify a limit on the number of sessions that are allowed to be active for that service at a time. This is used to ensure that services like `fs-pr`, `fs-ldr`, and `ldr:pm` can only be connected to once, adding an additional layer of safety over the regular service verification to ensure that those services are only connected to by the highly priveleged process they are intended to be used by.
|
||||
|
||||
By default, the Stratosphere implementation of PM will raise any session limits to at least 8, meaning that for services like `fs-pr` and those mentioned above, up to 8 processes will be able to connect to those sessions, leaving 7 sessions for homebrew to use.
|
||||
|
||||
### Weak Service Verification
|
||||
|
||||
In system firmware versions before 3.0.1, if a process did not call the [Initialize](https://reswitched.github.io/SwIPC/ifaces.html#nn::sm::detail::IUserInterface(0)) command on its `sm:` session, normally used to inform sm of the process's identity, sm would assume that the process was a kernel internal process and skip any service registration or access checks. The Stratosphere implementation of sm reimplements this vulnerability, allowing homebrew processes to skip service registration and access checks.
|
||||
@@ -1,16 +1,60 @@
|
||||
# Planned Features
|
||||
The following features are planned to be added in future versions of Atmosphère:
|
||||
+ Thermosphère, a hypervisor-based emunand implementation.
|
||||
+ A feature-rich debugging toolset (a component of Stratosphère).
|
||||
+ A custom debug monitor system module, providing an API for debugging Switch's processes. This may not be a reimplementation of Nintendo's own debug monitor.
|
||||
+ This should include a gdbstub implementation, possibly borrowing from Luma3DS's.
|
||||
+ This API should be additionally usable for RAM Editing/"Cheat Engine" purposes.
|
||||
+ A custom shell system module, providing an means for users to perform various RPC (with support for common/interesting functionality) on their Switch remotely. This may not be a reimplementation of Nintendo's own shell.
|
||||
+ This should support client connections over both Wi-Fi and USB.
|
||||
+ A custom logging system module, providing a means for other Atmosphère components (and possibly Nintendo's own system modules) to log debug output.
|
||||
+ This should support logging to the SD card, over Wi-Fi, and over USB.
|
||||
+ An application-level plugin system.
|
||||
+ This will, ideally, work somewhat like NTR-CFW's plugin system on the 3DS, allowing users to run their own code in a game's process in their own thread.
|
||||
+ An AR Code/Gameshark analog implementation, allowing for easy sharing/development of cheat codes to run on device.
|
||||
+ Further extensions to existing Atmosphère components.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
atmosphère has a number of features that are either works-in-progress or planned. Please note that while time-estimates are given, they are loose, and things may be completed sooner or later than advertised.
|
||||
|
||||
The following descriptions were last updated on January 14th, 2021
|
||||
|
||||
## tma reimplementation
|
||||
* **Description** tma ("target manager agent") is a system module that manages communication between the Switch and a client PC. Atmosphere's implementation will allow homebrew on the switch to communicate with a connected PC to do various operations such as exchanging data or interacting with files. It will also serve as the communicator for Atmosphère's planned debugger. This will also include PC-side software for interacting with the Switch.
|
||||
* **Development Status**: Planned. Switch-side code is fully implemented but needs heavy refactoring/rebasing, as the code was originally authored in 2018.
|
||||
* **Estimated Time**: 2021-2022.
|
||||
|
||||
## dmnt.gen2 reimplementation
|
||||
* **Description**: A reimplementation of the Switch's debug monitor, dmnt will provide an interface for debugging applications or system modules running on the Switch. This will include a gdbstub for debugging actively-running system components or applications.
|
||||
* **Development Status**: Planned
|
||||
* **Estimated Time**: 2021-2022
|
||||
|
||||
## fs reimplementation
|
||||
* **Description**: Following mesosphère's completion, atmosphère will have reimplemented all components of the BootImagePackage firmware except for the filesystem services system module. Reimplementing fs will allow for fixing Nintendo bugs (such as corruption when using exFAT filesystems and encoding inconsistencies with UTF-8 and Shift-JIS).
|
||||
* **Development Status**: Planned.
|
||||
* **Estimated Time**: 2021-2022.
|
||||
|
||||
## settings reimplementation
|
||||
* **Description**: A planned reimplementation of the settings system module, and with it a removal of the settings mitm. This will greatly simplify atmosphère's boot process, and will allow much more flexible control over the various system settings.
|
||||
* **Development Status**: Pending development by Adubbz.
|
||||
* **Estimated Time**: Unclear, pending developer availability.
|
||||
|
||||
## thermosphère
|
||||
* **Description**: A general-purpose hypervisor, thermosphère will enable the virtualization of the Switch's operating system; this is planned to enable debugging of the Switch's kernel.
|
||||
* **Development Status**: Pending development by TuxSH.
|
||||
* **Estimated Time**: Unclear, pending developer availability.
|
||||
|
||||
## other planned features
|
||||
* **Description**: General system stability improvements to enhance the user's experience.
|
||||
* **Development Status**: Undergoing active development by all members of the atmosphère team.
|
||||
* **Estimated Time**: June 15th.
|
||||
|
||||
# Completed features
|
||||
|
||||
The following features were previously included under the planned features section and are now complete.
|
||||
|
||||
Please note that this is not an exhaustive list of features present in atmosphère, and only serves to indicate what from the above has been completed.
|
||||
|
||||
## system updater homebrew
|
||||
* **Description**: A user homebrew making use of the new system updater api, so that users can actually use the new api in practice.
|
||||
* **Completion Time**: July 2020
|
||||
|
||||
## system updater api
|
||||
* **Description**: A planned extension api for stratosphere (tenatively `ams:su`), this will provide an interface for homebrew to safely install system upgrades or downgrades. This will allow for much more easily transitioning safely between different versions of the operating system.
|
||||
* **Completion Time**: June 2020
|
||||
|
||||
## exosphere re-write
|
||||
* **Description**: exosphère, atmosphère's reimplementation of Horizon's Secure Monitor, was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code. In addition, exosphère was written to conform to constraints that no longer apply in an environment where it is not launched from the web browser, and where using a custom firmware image to orchestrate wake-from-sleep is possible. exosphère currently uses all but 1 KB of the space available to it, putting it at risk of breaking as future firmware updates are supported. A re-write will solve these issues.
|
||||
* **Completion Time**: June 2020
|
||||
|
||||
## mesosphere
|
||||
* **Description**: mesosphère is a reimplementation of the Horizon operating system's Kernel. It aims to provide an open-source reference for Nintendo's code.
|
||||
* **Estimated Time**: September 2020
|
||||
|
||||
## ams-on-mariko
|
||||
* **Description**: Atmosphere cannot run as-is on Mariko hardware. A large number of changes are needed in many components. Although secure monitor support is complete in exosphere, additional work is needed on the bootloader and stratosphere sides as well. Mariko support will also require further design thought; atmosphere's debugging design heavily relies on reboot-to-payload and (more generally) the ability to perform warmboot bootrom hax at will. This is not possible on Mariko, and will require a new design/software support for whatever solution is chosen.
|
||||
* **Completion Time**: January 2021
|
||||
9
emummc/.gitignore
vendored
Normal file
9
emummc/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
*.kip
|
||||
*.data
|
||||
*.elf
|
||||
build
|
||||
.vscode/ipch
|
||||
.vscode/settings.json
|
||||
*.exe
|
||||
*.kip*
|
||||
emummc.caps
|
||||
12
emummc/.gitrepo
Normal file
12
emummc/.gitrepo
Normal file
@@ -0,0 +1,12 @@
|
||||
; DO NOT EDIT (unless you know what you are doing)
|
||||
;
|
||||
; This subdirectory is a git "subrepo", and this file is maintained by the
|
||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
||||
;
|
||||
[subrepo]
|
||||
remote = https://github.com/m4xw/emuMMC
|
||||
branch = develop
|
||||
commit = c6717b9320247d3ec81b372adae5e5623be7d16b
|
||||
parent = bf8de39e694dc64431180bc513ce110f07fc3531
|
||||
method = rebase
|
||||
cmdver = 0.4.1
|
||||
35
emummc/.vscode/c_cpp_properties.json
vendored
Normal file
35
emummc/.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Switch",
|
||||
"includePath": [
|
||||
"/opt/devkitpro/devkitA64/aarch64-none-elf/include",
|
||||
"/opt/devkitpro/devkitA64/lib/gcc/aarch64-none-elf/8.3.0/include",
|
||||
"${workspaceFolder}/libnx-patched/nx/include",
|
||||
"/opt/devkitpro/portlibs/switch/include",
|
||||
"/opt/devkitpro/portlibs/switch/include/freetype2",
|
||||
"${workspaceFolder}/source",
|
||||
"${workspaceFolder}/source/emmc",
|
||||
"${workspaceFolder}/source/libs/fatfs",
|
||||
"${workspaceFolder}/source/power",
|
||||
"${workspaceFolder}/source/soc",
|
||||
"${workspaceFolder}/source/utils",
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE",
|
||||
"__aarch64__",
|
||||
"__SWITCH__",
|
||||
"INNER_HEAP_SIZE=0x80000"
|
||||
],
|
||||
"windowsSdkVersion": "10.0.17763.0",
|
||||
"compilerPath": "/opt/devkitpro/devkitA64/bin/aarch64-none-elf-gcc",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++11",
|
||||
"intelliSenseMode": "gcc-x64"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
339
emummc/LICENSE
Normal file
339
emummc/LICENSE
Normal file
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
115
emummc/Makefile
Normal file
115
emummc/Makefile
Normal file
@@ -0,0 +1,115 @@
|
||||
.SUFFIXES:
|
||||
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
|
||||
endif
|
||||
|
||||
TARGET := emummc
|
||||
BUILD := build
|
||||
SOURCES := source/nx source source/utils source/emmc source/soc source/power source/emuMMC source/FS source/libs/fatfs
|
||||
DATA := data
|
||||
INCLUDES := include
|
||||
EXEFS_SRC := exefs_src
|
||||
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
EMUMMCDIR ?= $(CURDIR)
|
||||
else
|
||||
EMUMMCDIR ?= $(CURDIR)/../
|
||||
endif
|
||||
|
||||
include $(DEVKITPRO)/libnx/switch_rules
|
||||
|
||||
ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE
|
||||
|
||||
# Current max usage is 0x4600. (512 * 34 FatFS file objects + 1 fsync buffer).
|
||||
DEFINES := -DINNER_HEAP_SIZE=0x8000
|
||||
|
||||
CFLAGS := -Wall -O2 -ffunction-sections -fdata-sections -Wno-unused-function \
|
||||
$(ARCH) $(DEFINES)
|
||||
|
||||
CFLAGS += $(INCLUDE) -D__SWITCH__
|
||||
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
export TOPDIR := $(EMUMMCDIR)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
export LD := $(CC)
|
||||
else
|
||||
export LD := $(CXX)
|
||||
endif
|
||||
|
||||
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
|
||||
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
||||
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC)
|
||||
|
||||
ifeq ($(strip $(CONFIG_JSON)),)
|
||||
jsons := $(wildcard *.json)
|
||||
ifneq (,$(findstring $(TARGET).json,$(jsons)))
|
||||
export APP_JSON := $(TOPDIR)/$(TARGET).json
|
||||
else
|
||||
ifneq (,$(findstring config.json,$(jsons)))
|
||||
export APP_JSON := $(TOPDIR)/config.json
|
||||
endif
|
||||
endif
|
||||
else
|
||||
export APP_JSON := $(TOPDIR)/$(CONFIG_JSON)
|
||||
endif
|
||||
|
||||
.PHONY: $(BUILD) clean all
|
||||
|
||||
all: $(BUILD)
|
||||
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).kip
|
||||
|
||||
else
|
||||
.PHONY: all
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
all : $(OUTPUT).kip
|
||||
|
||||
$(OUTPUT).kip : $(OUTPUT).elf
|
||||
|
||||
$(OUTPUT).elf : $(OFILES)
|
||||
|
||||
$(OFILES_SRC) : $(HFILES_BIN)
|
||||
|
||||
%.bin.o %_bin.h : %.bin
|
||||
@echo $(notdir $<)
|
||||
@$(bin2o)
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
endif
|
||||
36
emummc/README.md
Normal file
36
emummc/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# emuMMC
|
||||
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
||||
|
||||
### Supported Horizon Versions
|
||||
**1.0.0 - 11.0.0**
|
||||
|
||||
## Features
|
||||
* Arbitrary SDMMC backend selection
|
||||
**This allows loading eMMC from SD or even SD from eMMC**
|
||||
* On the fly hooking / patching, fully self-infesting
|
||||
**Only one payload required for all versions!**
|
||||
* File-based SDMMC backend support (from SD)
|
||||
**This allows loading eMMC images from hekate-backups (split or not)**
|
||||
* SDMMC device based sector offset (*currently eMMC only*)
|
||||
**Raw partition support for eMMC from SD with less performance overhead**
|
||||
* Full support for `/Nintendo` folder redirection to a arbitrary path
|
||||
**No 8 char length restriction!**
|
||||
* exosphere based context configuration
|
||||
**This includes full support for multiple emuMMC images**
|
||||
|
||||
## Compiling
|
||||
### hekate
|
||||
Run `./build.sh` and copy the produced kipm (Kernel Initial Process Modification) file to `/bootloader/sys/`
|
||||
|
||||
### Atmosphere
|
||||
Run `make`, the resulting kip can be used for code injection via fusee (place at `/atmosphere/emummc.kip`)
|
||||
|
||||
## License
|
||||
**emuMMC is released as GPLv2**
|
||||
|
||||
## Credits
|
||||
* **CTCaer** - The CTCaer hekate fork, file-based emuMMC support, SDMMC driver fixes among other things
|
||||
* **SciresM, hexkyz** - The Atmosphere project, FS offsets, additional research related to newer FS versions
|
||||
* **naehrwert** - The hekate project, its SDMMC driver and being very helpful in the early research phase
|
||||
* **jakibaki** - KIP Inject PoC, used in the early dev phase
|
||||
* **switchbrew/devkitPro** - devkitA64 and libnx sources
|
||||
9
emummc/build.sh
Normal file
9
emummc/build.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
make clean
|
||||
make -j
|
||||
./hactool.exe -t kip emummc.kip --uncompressed emummc_unpacked.kip
|
||||
python2.7 tools/kip1converter.py emummc_unpacked.kip emummc.data
|
||||
cat emummc.caps emummc.data > emummc.kipm
|
||||
@@ -1,107 +1,14 @@
|
||||
{
|
||||
"name": "boot",
|
||||
"title_id": "0x0100000000000005",
|
||||
"main_thread_stack_size": "0x1000",
|
||||
"main_thread_priority": 27,
|
||||
"name": "FS",
|
||||
"title_id": "0x0100000000000000",
|
||||
"main_thread_stack_size": "0x00008000",
|
||||
"main_thread_priority": 45,
|
||||
"default_cpu_id": 3,
|
||||
"process_category": 1,
|
||||
"kernel_capabilities": [
|
||||
{
|
||||
"type": "handle_table_size",
|
||||
"value": 128
|
||||
},
|
||||
{
|
||||
"type": "syscalls",
|
||||
"value": {
|
||||
"svcSetHeapSize": "0x01",
|
||||
"svcSetMemoryPermission": "0x02",
|
||||
"svcSetMemoryAttribute": "0x03",
|
||||
"svcMapMemory": "0x04",
|
||||
"svcUnmapMemory": "0x05",
|
||||
"svcQueryMemory": "0x06",
|
||||
"svcExitProcess": "0x07",
|
||||
"svcCreateThread": "0x08",
|
||||
"svcStartThread": "0x09",
|
||||
"svcExitThread": "0x0A",
|
||||
"svcSleepThread": "0x0B",
|
||||
"svcGetThreadPriority": "0x0C",
|
||||
"svcSetThreadPriority": "0x0D",
|
||||
"svcGetThreadCoreMask": "0x0E",
|
||||
"svcSetThreadCoreMask": "0x0F",
|
||||
"svcGetCurrentProcessorNumber": "0x10",
|
||||
"svcSignalEvent": "0x11",
|
||||
"svcClearEvent": "0x12",
|
||||
"svcMapSharedMemory": "0x13",
|
||||
"svcUnmapSharedMemory": "0x14",
|
||||
"svcCreateTransferMemory": "0x15",
|
||||
"svcCloseHandle": "0x16",
|
||||
"svcResetSignal": "0x17",
|
||||
"svcWaitSynchronization": "0x18",
|
||||
"svcCancelSynchronization": "0x19",
|
||||
"svcArbitrateLock": "0x1A",
|
||||
"svcArbitrateUnlock": "0x1B",
|
||||
"svcWaitProcessWideKeyAtomic": "0x1C",
|
||||
"svcSignalProcessWideKey": "0x1D",
|
||||
"svcGetSystemTick": "0x1E",
|
||||
"svcConnectToNamedPort": "0x1F",
|
||||
"svcSendSyncRequestLight": "0x20",
|
||||
"svcSendSyncRequest": "0x21",
|
||||
"svcSendSyncRequestWithUserBuffer": "0x22",
|
||||
"svcSendAsyncRequestWithUserBuffer": "0x23",
|
||||
"svcGetProcessId": "0x24",
|
||||
"svcGetThreadId": "0x25",
|
||||
"svcBreak": "0x26",
|
||||
"svcOutputDebugString": "0x27",
|
||||
"svcReturnFromException": "0x28",
|
||||
"svcGetInfo": "0x29",
|
||||
"svcWaitForAddress": "0x34",
|
||||
"svcSignalToAddress": "0x35",
|
||||
"svcReadWriteRegister": "0x4E",
|
||||
"svcCreateInterruptEvent": "0x53",
|
||||
"svcQueryIoMapping": "0x55",
|
||||
"svcCreateDeviceAddressSpace": "0x56",
|
||||
"svcAttachDeviceAddressSpace": "0x57",
|
||||
"svcDetachDeviceAddressSpace": "0x58",
|
||||
"svcMapDeviceAddressSpaceAligned": "0x5A",
|
||||
"svcUnmapDeviceAddressSpace": "0x5C",
|
||||
"svcFlushProcessDataCache": "0x5F"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x50003000",
|
||||
"size": "0x1000",
|
||||
"is_ro": false,
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x54200000",
|
||||
"size": "0x3000",
|
||||
"is_ro": false,
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x54300000",
|
||||
"size": "0x1000",
|
||||
"is_ro": false,
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x60006000",
|
||||
"size": "0x1000",
|
||||
"is_ro": false,
|
||||
"is_io": true
|
||||
}
|
||||
"type": "map_page",
|
||||
"value": "0x60006000"
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
@@ -115,9 +22,9 @@
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x70000000",
|
||||
"size": "0x4000",
|
||||
"address": "0x700b0000",
|
||||
"is_ro": false,
|
||||
"size": "0x00005000",
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
@@ -125,40 +32,106 @@
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x7000C000",
|
||||
"size": "0x2000",
|
||||
"is_ro": false,
|
||||
"size": "0x00002000",
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "map",
|
||||
"value": {
|
||||
"address": "0x700E3000",
|
||||
"size": "0x1000",
|
||||
"address": "0x70000000",
|
||||
"is_ro": false,
|
||||
"size": "0x00004000",
|
||||
"is_io": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "handle_table_size",
|
||||
"value": 256
|
||||
},
|
||||
{
|
||||
"type": "irq_pair",
|
||||
"value": [
|
||||
70,
|
||||
116
|
||||
46,
|
||||
47
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "irq_pair",
|
||||
"value": [
|
||||
124,
|
||||
152
|
||||
51,
|
||||
63
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "irq_pair",
|
||||
"value": [
|
||||
85,
|
||||
95
|
||||
]
|
||||
"type": "syscalls",
|
||||
"value": {
|
||||
"svcSetHeapSize": "0x01",
|
||||
"svcSetMemoryPermission": "0x02",
|
||||
"svcSetMemoryAttribute": "0x03",
|
||||
"svcMapMemory": "0x04",
|
||||
"svcUnmapMemory": "0x05",
|
||||
"svcQueryMemory": "0x06",
|
||||
"svcExitProcess": "0x07",
|
||||
"svcCreateThread": "0x08",
|
||||
"svcStartThread": "0x09",
|
||||
"svcExitThread": "0x0a",
|
||||
"svcSleepThread": "0x0b",
|
||||
"svcGetThreadPriority": "0x0c",
|
||||
"svcSetThreadPriority": "0x0d",
|
||||
"svcGetThreadCoreMask": "0x0e",
|
||||
"svcSetThreadCoreMask": "0x0f",
|
||||
"svcGetCurrentProcessorNumber": "0x10",
|
||||
"svcSignalEvent": "0x11",
|
||||
"svcClearEvent": "0x12",
|
||||
"svcMapSharedMemory": "0x13",
|
||||
"svcUnmapSharedMemory": "0x14",
|
||||
"svcCreateTransferMemory": "0x15",
|
||||
"svcCloseHandle": "0x16",
|
||||
"svcResetSignal": "0x17",
|
||||
"svcWaitSynchronization": "0x18",
|
||||
"svcCancelSynchronization": "0x19",
|
||||
"svcArbitrateLock": "0x1a",
|
||||
"svcArbitrateUnlock": "0x1b",
|
||||
"svcWaitProcessWideKeyAtomic": "0x1c",
|
||||
"svcSignalProcessWideKey": "0x1d",
|
||||
"svcGetSystemTick": "0x1e",
|
||||
"svcConnectToNamedPort": "0x1f",
|
||||
"svcSendSyncRequestLight": "0x20",
|
||||
"svcSendSyncRequest": "0x21",
|
||||
"svcSendSyncRequestWithUserBuffer": "0x22",
|
||||
"svcSendAsyncRequestWithUserBuffer": "0x23",
|
||||
"svcGetProcessId": "0x24",
|
||||
"svcGetThreadId": "0x25",
|
||||
"svcBreak": "0x26",
|
||||
"svcOutputDebugString": "0x27",
|
||||
"svcReturnFromException": "0x28",
|
||||
"svcGetInfo": "0x29",
|
||||
"svcWaitForAddress": "0x34",
|
||||
"svcSignalToAddress": "0x35",
|
||||
"svcCreateSession": "0x40",
|
||||
"svcAcceptSession": "0x41",
|
||||
"svcReplyAndReceiveLight": "0x42",
|
||||
"svcReplyAndReceive": "0x43",
|
||||
"svcReplyAndReceiveWithUserBuffer": "0x44",
|
||||
"svcCreateEvent": "0x45",
|
||||
"svcReadWriteRegister": "0x4E",
|
||||
"svcMapTransferMemory": "0x51",
|
||||
"svcUnmapTransferMemory": "0x52",
|
||||
"svcCreateInterruptEvent": "0x53",
|
||||
"svcQueryIoMapping": "0x55",
|
||||
"svcCreateDeviceAddressSpace": "0x56",
|
||||
"svcAttachDeviceAddressSpace": "0x57",
|
||||
"svcDetachDeviceAddressSpace": "0x58",
|
||||
"svcMapDeviceAddressSpaceAligned": "0x5a",
|
||||
"svcUnmapDeviceAddressSpace": "0x5c",
|
||||
"svcGetSystemInfo": "0x6f",
|
||||
"svcSetProcessMemoryPermission": "0x73",
|
||||
"svcMapProcessMemory": "0x74",
|
||||
"svcUnmapProcessMemory": "0x75",
|
||||
"svcCallSecureMonitor": "0x7f"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
40
emummc/source/FS/FS.h
Normal file
40
emummc/source/FS/FS.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FS_H__
|
||||
#define __FS_H__
|
||||
|
||||
// TODO
|
||||
#include "../emmc/sdmmc_t210.h"
|
||||
|
||||
#include "FS_versions.h"
|
||||
#include "FS_offsets.h"
|
||||
#include "FS_structs.h"
|
||||
|
||||
#define FS_SDMMC_EMMC 0
|
||||
#define FS_SDMMC_SD 1
|
||||
#define FS_SDMMC_GC 2
|
||||
|
||||
#define FS_EMMC_PARTITION_GPP 0
|
||||
#define FS_EMMC_PARTITION_BOOT0 1
|
||||
#define FS_EMMC_PARTITION_BOOT1 2
|
||||
#define FS_EMMC_PARTITION_INVALID 3
|
||||
|
||||
#define BOOT_PARTITION_SIZE 0x2000
|
||||
#define FS_READ_WRITE_ERROR 1048
|
||||
|
||||
#endif /* __FS_H__ */
|
||||
200
emummc/source/FS/FS_offsets.c
Normal file
200
emummc/source/FS/FS_offsets.c
Normal file
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "FS_offsets.h"
|
||||
#include "offsets/100.h"
|
||||
#include "offsets/200.h"
|
||||
#include "offsets/200_exfat.h"
|
||||
#include "offsets/210.h"
|
||||
#include "offsets/210_exfat.h"
|
||||
#include "offsets/300.h"
|
||||
#include "offsets/300_exfat.h"
|
||||
#include "offsets/301.h"
|
||||
#include "offsets/301_exfat.h"
|
||||
#include "offsets/400.h"
|
||||
#include "offsets/400_exfat.h"
|
||||
#include "offsets/410.h"
|
||||
#include "offsets/410_exfat.h"
|
||||
#include "offsets/500.h"
|
||||
#include "offsets/500_exfat.h"
|
||||
#include "offsets/510.h"
|
||||
#include "offsets/510_exfat.h"
|
||||
#include "offsets/600.h"
|
||||
#include "offsets/600_exfat.h"
|
||||
#include "offsets/700.h"
|
||||
#include "offsets/700_exfat.h"
|
||||
#include "offsets/800.h"
|
||||
#include "offsets/800_exfat.h"
|
||||
#include "offsets/810.h"
|
||||
#include "offsets/810_exfat.h"
|
||||
#include "offsets/900.h"
|
||||
#include "offsets/900_exfat.h"
|
||||
#include "offsets/910.h"
|
||||
#include "offsets/910_exfat.h"
|
||||
#include "offsets/1000.h"
|
||||
#include "offsets/1000_exfat.h"
|
||||
#include "offsets/1020.h"
|
||||
#include "offsets/1020_exfat.h"
|
||||
#include "offsets/1100.h"
|
||||
#include "offsets/1100_exfat.h"
|
||||
#include "offsets/1200.h"
|
||||
#include "offsets/1200_exfat.h"
|
||||
#include "../utils/fatal.h"
|
||||
|
||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||
|
||||
#define DEFINE_OFFSET_STRUCT(vers) \
|
||||
static const fs_offsets_t GET_OFFSET_STRUCT_NAME(vers) = { \
|
||||
.sdmmc_accessor_gc = FS_OFFSET##vers##_SDMMC_ACCESSOR_GC, \
|
||||
.sdmmc_accessor_sd = FS_OFFSET##vers##_SDMMC_ACCESSOR_SD, \
|
||||
.sdmmc_accessor_nand = FS_OFFSET##vers##_SDMMC_ACCESSOR_NAND, \
|
||||
.sdmmc_wrapper_read = FS_OFFSET##vers##_SDMMC_WRAPPER_READ, \
|
||||
.sdmmc_wrapper_write = FS_OFFSET##vers##_SDMMC_WRAPPER_WRITE, \
|
||||
.clkrst_set_min_v_clock_rate = FS_OFFSET##vers##_CLKRST_SET_MIN_V_CLK_RATE, \
|
||||
.rtld = FS_OFFSET##vers##_RTLD, \
|
||||
.rtld_destination = FS_OFFSET##vers##_RTLD_DESTINATION, \
|
||||
.lock_mutex = FS_OFFSET##vers##_LOCK_MUTEX, \
|
||||
.unlock_mutex = FS_OFFSET##vers##_UNLOCK_MUTEX, \
|
||||
.sd_mutex = FS_OFFSET##vers##_SD_MUTEX, \
|
||||
.nand_mutex = FS_OFFSET##vers##_NAND_MUTEX, \
|
||||
.active_partition = FS_OFFSET##vers##_ACTIVE_PARTITION, \
|
||||
.sdmmc_das_handle = FS_OFFSET##vers##_SDMMC_DAS_HANDLE, \
|
||||
.sdmmc_accessor_controller_open = FS_OFFSET##vers##_SDMMC_WRAPPER_CONTROLLER_OPEN, \
|
||||
.sdmmc_accessor_controller_close = FS_OFFSET##vers##_SDMMC_WRAPPER_CONTROLLER_CLOSE, \
|
||||
.sd_das_init = FS_OFFSET##vers##_SD_DAS_INIT, \
|
||||
.nintendo_paths = FS_OFFSET##vers##_NINTENDO_PATHS, \
|
||||
}
|
||||
|
||||
// Actually define offset structs
|
||||
DEFINE_OFFSET_STRUCT(_100);
|
||||
DEFINE_OFFSET_STRUCT(_200);
|
||||
DEFINE_OFFSET_STRUCT(_200_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_210);
|
||||
DEFINE_OFFSET_STRUCT(_210_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_300);
|
||||
DEFINE_OFFSET_STRUCT(_300_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_301);
|
||||
DEFINE_OFFSET_STRUCT(_301_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_400);
|
||||
DEFINE_OFFSET_STRUCT(_400_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_410);
|
||||
DEFINE_OFFSET_STRUCT(_410_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_500);
|
||||
DEFINE_OFFSET_STRUCT(_500_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_510);
|
||||
DEFINE_OFFSET_STRUCT(_510_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_600);
|
||||
DEFINE_OFFSET_STRUCT(_600_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_700);
|
||||
DEFINE_OFFSET_STRUCT(_700_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_800);
|
||||
DEFINE_OFFSET_STRUCT(_800_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_810);
|
||||
DEFINE_OFFSET_STRUCT(_810_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_900);
|
||||
DEFINE_OFFSET_STRUCT(_900_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_910);
|
||||
DEFINE_OFFSET_STRUCT(_910_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_1000);
|
||||
DEFINE_OFFSET_STRUCT(_1000_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_1020);
|
||||
DEFINE_OFFSET_STRUCT(_1020_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_1100);
|
||||
DEFINE_OFFSET_STRUCT(_1100_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_1200);
|
||||
DEFINE_OFFSET_STRUCT(_1200_EXFAT);
|
||||
|
||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||
switch (version) {
|
||||
case FS_VER_1_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_100));
|
||||
case FS_VER_2_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_200));
|
||||
case FS_VER_2_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_200_EXFAT));
|
||||
case FS_VER_2_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_210));
|
||||
case FS_VER_2_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_210_EXFAT));
|
||||
case FS_VER_3_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_300));
|
||||
case FS_VER_3_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_300_EXFAT));
|
||||
case FS_VER_3_0_1:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_301));
|
||||
case FS_VER_3_0_1_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_301_EXFAT));
|
||||
case FS_VER_4_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_400));
|
||||
case FS_VER_4_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_400_EXFAT));
|
||||
case FS_VER_4_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_410));
|
||||
case FS_VER_4_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_410_EXFAT));
|
||||
case FS_VER_5_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_500));
|
||||
case FS_VER_5_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_500_EXFAT));
|
||||
case FS_VER_5_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_510));
|
||||
case FS_VER_5_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_510_EXFAT));
|
||||
case FS_VER_6_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_600));
|
||||
case FS_VER_6_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_600_EXFAT));
|
||||
case FS_VER_7_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_700));
|
||||
case FS_VER_7_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_700_EXFAT));
|
||||
case FS_VER_8_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_800));
|
||||
case FS_VER_8_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_800_EXFAT));
|
||||
case FS_VER_8_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_810));
|
||||
case FS_VER_8_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_810_EXFAT));
|
||||
case FS_VER_9_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_900));
|
||||
case FS_VER_9_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_900_EXFAT));
|
||||
case FS_VER_9_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_910));
|
||||
case FS_VER_9_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_910_EXFAT));
|
||||
case FS_VER_10_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1000));
|
||||
case FS_VER_10_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1000_EXFAT));
|
||||
case FS_VER_10_2_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1020));
|
||||
case FS_VER_10_2_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1020_EXFAT));
|
||||
case FS_VER_11_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1100));
|
||||
case FS_VER_11_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1100_EXFAT));
|
||||
case FS_VER_12_0_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1200));
|
||||
case FS_VER_12_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_1200_EXFAT));
|
||||
default:
|
||||
fatal_abort(Fatal_UnknownVersion);
|
||||
}
|
||||
}
|
||||
59
emummc/source/FS/FS_offsets.h
Normal file
59
emummc/source/FS/FS_offsets.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FS_OFFSETS_H__
|
||||
#define __FS_OFFSETS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "FS_versions.h"
|
||||
|
||||
typedef struct {
|
||||
int opcode_reg;
|
||||
uint32_t adrp_offset;
|
||||
uint32_t add_rel_offset;
|
||||
} fs_offsets_nintendo_path_t;
|
||||
|
||||
typedef struct {
|
||||
// Accessor vtable getters
|
||||
uintptr_t sdmmc_accessor_gc;
|
||||
uintptr_t sdmmc_accessor_sd;
|
||||
uintptr_t sdmmc_accessor_nand;
|
||||
// Hooks
|
||||
uintptr_t sdmmc_wrapper_read;
|
||||
uintptr_t sdmmc_wrapper_write;
|
||||
uintptr_t rtld;
|
||||
uintptr_t rtld_destination;
|
||||
uintptr_t clkrst_set_min_v_clock_rate;
|
||||
// Misc funcs
|
||||
uintptr_t lock_mutex;
|
||||
uintptr_t unlock_mutex;
|
||||
uintptr_t sdmmc_accessor_controller_open;
|
||||
uintptr_t sdmmc_accessor_controller_close;
|
||||
// Misc data
|
||||
uintptr_t sd_mutex;
|
||||
uintptr_t nand_mutex;
|
||||
uintptr_t active_partition;
|
||||
uintptr_t sdmmc_das_handle;
|
||||
// NOPs
|
||||
uintptr_t sd_das_init;
|
||||
// Nintendo Paths
|
||||
fs_offsets_nintendo_path_t nintendo_paths[];
|
||||
} fs_offsets_t;
|
||||
|
||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version);
|
||||
|
||||
#endif // __FS_OFFSETS_H__
|
||||
61
emummc/source/FS/FS_structs.h
Normal file
61
emummc/source/FS/FS_structs.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FS_STRUCTS_H__
|
||||
#define __FS_STRUCTS_H__
|
||||
|
||||
#include "../utils/types.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *device_addr_buffer;
|
||||
uint64_t device_addr_buffer_size;
|
||||
char *device_addr_buffer_masked;
|
||||
} sdmmc_dma_buffer_t;
|
||||
|
||||
_Static_assert(__alignof(sdmmc_dma_buffer_t) == 8, "sdmmc_dma_buffer_t definition");
|
||||
|
||||
typedef struct sdmmc_accessor_vt
|
||||
{
|
||||
void *ctor;
|
||||
void *dtor;
|
||||
void *map_device_addr_space;
|
||||
void *unmap_device_addr_space;
|
||||
uint64_t (*sdmmc_accessor_controller_open)(void *);
|
||||
uint64_t (*sdmmc_accessor_controller_close)(void *);
|
||||
uint64_t (*read_write)(void *, uint64_t, uint64_t, void *, uint64_t, uint64_t);
|
||||
// More not included because we don't use it.
|
||||
} sdmmc_accessor_vt_t;
|
||||
|
||||
_Static_assert(__alignof(sdmmc_accessor_vt_t) == 8, "sdmmc_accessor_vt_t definition");
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void *vtab;
|
||||
t210_sdmmc_t *io_map;
|
||||
sdmmc_dma_buffer_t dmaBuffers[3];
|
||||
// More not included because we don't use it.
|
||||
} mmc_obj_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sdmmc_accessor_vt_t *vtab;
|
||||
mmc_obj_t *parent;
|
||||
// More not included because we don't use it.
|
||||
} sdmmc_accessor_t;
|
||||
|
||||
#endif // __FS_STRUCTS_H__
|
||||
83
emummc/source/FS/FS_versions.h
Normal file
83
emummc/source/FS/FS_versions.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FS_VERSIONS_H__
|
||||
#define __FS_VERSIONS_H__
|
||||
|
||||
// FS Version enum
|
||||
enum FS_VER
|
||||
{
|
||||
FS_VER_1_0_0 = 0,
|
||||
|
||||
FS_VER_2_0_0,
|
||||
FS_VER_2_0_0_EXFAT,
|
||||
|
||||
FS_VER_2_1_0,
|
||||
FS_VER_2_1_0_EXFAT,
|
||||
|
||||
FS_VER_3_0_0,
|
||||
FS_VER_3_0_0_EXFAT,
|
||||
|
||||
FS_VER_3_0_1,
|
||||
FS_VER_3_0_1_EXFAT,
|
||||
|
||||
FS_VER_4_0_0,
|
||||
FS_VER_4_0_0_EXFAT,
|
||||
|
||||
FS_VER_4_1_0,
|
||||
FS_VER_4_1_0_EXFAT,
|
||||
|
||||
FS_VER_5_0_0,
|
||||
FS_VER_5_0_0_EXFAT,
|
||||
|
||||
FS_VER_5_1_0,
|
||||
FS_VER_5_1_0_EXFAT,
|
||||
|
||||
FS_VER_6_0_0,
|
||||
FS_VER_6_0_0_EXFAT,
|
||||
|
||||
FS_VER_7_0_0,
|
||||
FS_VER_7_0_0_EXFAT,
|
||||
|
||||
FS_VER_8_0_0,
|
||||
FS_VER_8_0_0_EXFAT,
|
||||
|
||||
FS_VER_8_1_0,
|
||||
FS_VER_8_1_0_EXFAT,
|
||||
|
||||
FS_VER_9_0_0,
|
||||
FS_VER_9_0_0_EXFAT,
|
||||
|
||||
FS_VER_9_1_0,
|
||||
FS_VER_9_1_0_EXFAT,
|
||||
|
||||
FS_VER_10_0_0,
|
||||
FS_VER_10_0_0_EXFAT,
|
||||
|
||||
FS_VER_10_2_0,
|
||||
FS_VER_10_2_0_EXFAT,
|
||||
|
||||
FS_VER_11_0_0,
|
||||
FS_VER_11_0_0_EXFAT,
|
||||
|
||||
FS_VER_12_0_0,
|
||||
FS_VER_12_0_0_EXFAT,
|
||||
|
||||
FS_VER_MAX,
|
||||
};
|
||||
|
||||
#endif // __FS_VERSIONS_H__
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user