mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-21 19:02:38 +02:00
Compare commits
441 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d8a37b4b71 | ||
|
b11850b3a3 | ||
|
77603bf7e5 | ||
|
6b01ebca9e | ||
|
17be65b4b9 | ||
|
409c3cf9e1 | ||
|
f4e1d0bf9f | ||
|
ae65b5df0c | ||
|
0a299a3d40 | ||
|
801438953d | ||
|
3fbc59cce1 | ||
|
f646d9c8f9 | ||
|
69cc653e7f | ||
|
6da88f8f3e | ||
|
1d3f3c6e56 | ||
|
4d4f0ba968 | ||
|
cc4531e3bf | ||
|
0e2ef545f9 | ||
|
f1ca7db562 | ||
|
d5567b5363 | ||
|
f9165c472e | ||
|
b2dd3b7dce | ||
|
66acab02db | ||
|
2c50ef717a | ||
|
d305d48a7e | ||
|
cb032006d5 | ||
|
8da6bc59a7 | ||
|
b7ec64ea16 | ||
|
bc44ffe70d | ||
|
a6847ca70e | ||
|
3af8757c3b | ||
|
f55cf42433 | ||
|
07df13e2a0 | ||
|
791edf87a0 | ||
|
b1ca5b4049 | ||
|
4580a352c0 | ||
|
28296e2aac | ||
|
b80f0944ab | ||
|
96d4546498 | ||
|
86e4bed056 | ||
|
2e204ccbaf | ||
|
b27999a116 | ||
|
98e5bd4411 | ||
|
4c5c5c85e3 | ||
|
3e19e4d004 | ||
|
66fcf33a2c | ||
|
d147f6f93b | ||
|
3dd5c98f52 | ||
|
b9b01bbbd1 | ||
|
6352397203 | ||
|
ef5334c3ca | ||
|
6125f40bdb | ||
|
85fd13f724 | ||
|
4e99a5e08d | ||
|
9f8d17b9e6 | ||
|
3a5f70dceb | ||
|
e51e11a71c | ||
|
57e15f3622 | ||
|
c6014b533f | ||
|
0c3608d1f4 | ||
|
be19749841 | ||
|
7c31b21d4b | ||
|
9112461620 | ||
|
3522ac18c1 | ||
|
e63cae5c77 | ||
|
c911420d6a | ||
|
570989384b | ||
|
4c81432e94 | ||
|
e1e84d4450 | ||
|
d2656e3948 | ||
|
62abb31122 | ||
|
cb970049db | ||
|
9610f42dc0 | ||
|
02e837d82e | ||
|
7aa0bed869 | ||
|
a80d5b5c86 | ||
|
77d239265d | ||
|
624f8d0d8d | ||
|
9cfd535568 | ||
|
23ba31da1f | ||
|
3b03b9603c | ||
|
912b84c4e3 | ||
|
ff38a32a9b | ||
|
2855b8ee35 | ||
|
00716576cd | ||
|
743634c3fd | ||
|
3394a88a1a | ||
|
a72e39d657 | ||
|
c3fa42d958 | ||
|
126cb8bbdf | ||
|
753cf74bf2 | ||
|
70bf833070 | ||
|
a0ad3ef949 | ||
|
5de551db29 | ||
|
77d17dc4ff | ||
|
4acfac539c | ||
|
c4a5d4db09 | ||
|
10c7a39528 | ||
|
009f581721 | ||
|
027e209073 | ||
|
423a05a1e9 | ||
|
4617fec672 | ||
|
e85bc4db0b | ||
|
39c201e37f | ||
|
ab5cc75684 | ||
|
1e3349e99a | ||
|
76628e273a | ||
|
257ac2bd33 | ||
|
9eb92f37db | ||
|
5b135d12ca | ||
|
c41a6b80d7 | ||
|
05fde7b764 | ||
|
1609f804f2 | ||
|
f35c94810c | ||
|
548b48b2a6 | ||
|
35d93a7c41 | ||
|
410f23035e | ||
|
29cc13543a | ||
|
31ad4eec1d | ||
|
3ccb0ae02b | ||
|
4f7db6e60e | ||
|
a325e18cb5 | ||
|
af41272591 | ||
|
551821e7e2 | ||
|
b081762657 | ||
|
d2c2a94c5e | ||
|
4ff9278d11 | ||
|
21c85c6a4f | ||
|
05090005b7 | ||
|
c0487ad384 | ||
|
ecbe5cd406 | ||
|
4fe139ea52 | ||
|
6922eae3e7 | ||
|
952188fc73 | ||
|
c0a4fc30a8 | ||
|
0b04c89a84 | ||
|
217dd1260a | ||
|
8aa62a54d8 | ||
|
25bae14064 | ||
|
900913fe3b | ||
|
7562f807fd | ||
|
cf5895e04f | ||
|
1f37fbed1d | ||
|
9701d5b2ab | ||
|
c8c76bf8f8 | ||
|
0220f67085 | ||
|
615f8a3ef3 | ||
|
000e382c42 | ||
|
3627356d4b | ||
|
72b0fe6c1c | ||
|
e919b80fa2 | ||
|
fc16f28d0c | ||
|
e09ba765a1 | ||
|
3217df147e | ||
|
1fa41c3e2a | ||
|
db3dc4ebd2 | ||
|
742fd16080 | ||
|
812b2aeb4c | ||
|
46a4357882 | ||
|
872c18c501 | ||
|
afc0e14556 | ||
|
f7bf379cfe | ||
|
9f26419b1a | ||
|
1b057d48c6 | ||
|
0c3afff4d3 | ||
|
274f6b63f2 | ||
|
2ed8450446 | ||
|
60974a5f4e | ||
|
fa384fd920 | ||
|
3f19db0d96 | ||
|
a84f725e21 | ||
|
7f61dfdb8d | ||
|
c44da84869 | ||
|
7f4450f930 | ||
|
edb4e2ea56 | ||
|
183f3e0d7e | ||
|
7650c5eb96 | ||
|
0ff197b300 | ||
|
d9fff85bc4 | ||
|
c866c15856 | ||
|
e8ac23e2ee | ||
|
3a8cffef57 | ||
|
13411902c9 | ||
|
693fb423cb | ||
|
8a9eb85e05 | ||
|
d389ef639e | ||
|
719858ad18 | ||
|
e4d08ae0c5 | ||
|
0c063db926 | ||
|
02e987819b | ||
|
2ec3e141c7 | ||
|
71d0274884 | ||
|
05259b7519 | ||
|
59a24fa646 | ||
|
f5b2eab4a8 | ||
|
e96e1063e2 | ||
|
aa170a72a9 | ||
|
9d4cb685a7 | ||
|
c95741142e | ||
|
ef9b111bbf | ||
|
114b82284d | ||
|
c5d7ca5159 | ||
|
6d0bf70783 | ||
|
aba6ca7329 | ||
|
06a840e550 | ||
|
11c02e22e0 | ||
|
f93aea4c06 | ||
|
4ddfb6183c | ||
|
3737151a2f | ||
|
2a4d68f916 | ||
|
7b523cfc8d | ||
|
39a95d4023 | ||
|
2c5002ce50 | ||
|
b7384a8667 | ||
|
85b5f20395 | ||
|
ad5bd81d3f | ||
|
777b6d285c | ||
|
ae2c25e9c8 | ||
|
3b8f65d502 | ||
|
cfd2d5b012 | ||
|
c72ba35684 | ||
|
ec96203cb7 | ||
|
1491a7b159 | ||
|
0daef4a6e8 | ||
|
4ca3c44e5f | ||
|
add4b3fdc3 | ||
|
159f8d384b | ||
|
92a8c8eb88 | ||
|
9e0daff46e | ||
|
6b72dbd22d | ||
|
ba91f070e8 | ||
|
4fe9a89ab8 | ||
|
de73f6c5bb | ||
|
e488b6ee47 | ||
|
99810dc091 | ||
|
e54957285f | ||
|
fca213460b | ||
|
4e6bd19fcd | ||
|
8b88351cb4 | ||
|
63ea152349 | ||
|
3cb54e2b4b | ||
|
e9de11a746 | ||
|
b979b5aa36 | ||
|
f2ee44da74 | ||
|
85c23b5781 | ||
|
8e042f2262 | ||
|
81e9154a52 | ||
|
e9b9dbc2aa | ||
|
7e6c849ca4 | ||
|
8ec7c096d0 | ||
|
6e5b901a9b | ||
|
b800953d66 | ||
|
f0240db75a | ||
|
1f5ec68a5c | ||
|
ed9e60acb9 | ||
|
a7300b0fa4 | ||
|
8e2eca2004 | ||
|
9f83b3c838 | ||
|
434c8cefc4 | ||
|
d8aed7de6d | ||
|
a346014dc7 | ||
|
4b3c801e9f | ||
|
90db1223f6 | ||
|
fa64a6ff4d | ||
|
0c6a06a0cf | ||
|
5efb4a2a98 | ||
|
3b662122f9 | ||
|
e9b28ab4b1 | ||
|
1afb184c14 | ||
|
5e070600a9 | ||
|
8274081e39 | ||
|
f1ad26ce84 | ||
|
e4c314146e | ||
|
52f00731d9 | ||
|
476d658a79 | ||
|
7263022bac | ||
|
e0e7aa1e2f | ||
|
bd9d8fff46 | ||
|
61e3f0b391 | ||
|
cd9b173318 | ||
|
a8df400825 | ||
|
68040e2922 | ||
|
8da4d14e15 | ||
|
e2ebf9c0ff | ||
|
5fb6f52b9e | ||
|
982389dceb | ||
|
f636596ee2 | ||
|
0a2440522f | ||
|
3292ea5970 | ||
|
33d42f4831 | ||
|
46094cfb3e | ||
|
618691a500 | ||
|
356d89244f | ||
|
1ce3611695 | ||
|
1ab8b23444 | ||
|
06b4738d54 | ||
|
b92c614347 | ||
|
99175c1149 | ||
|
8876eedfb0 | ||
|
bbcee8c77c | ||
|
f7915c2c05 | ||
|
668cabd4a2 | ||
|
d64ab354ad | ||
|
59b518783d | ||
|
6462101b6f | ||
|
0ea5dbcfbb | ||
|
bb6446aada | ||
|
e46e7e0eb1 | ||
|
cb89c66bd8 | ||
|
e85a512cf4 | ||
|
7d9fea01c3 | ||
|
406320f6ec | ||
|
aad2be0a01 | ||
|
25383db524 | ||
|
48f4c526f3 | ||
|
1279d236f3 | ||
|
008eb974d4 | ||
|
035cebef9d | ||
|
8db22967bf | ||
|
db510f96c3 | ||
|
6e2dd791b2 | ||
|
bff61c68ab | ||
|
ca7734ffaf | ||
|
ed22f802ee | ||
|
8ffc177b44 | ||
|
c058376b3b | ||
|
d5ebf13094 | ||
|
695c125721 | ||
|
e7e3e7b374 | ||
|
3a5f406c5f | ||
|
8176f085f1 | ||
|
7a69f2f062 | ||
|
32b590e7ab | ||
|
590f22933d | ||
|
0dd071b279 | ||
|
f1132fbf5a | ||
|
9cd57b6c61 | ||
|
bf66e40a7b | ||
|
77cc53227a | ||
|
59a295db79 | ||
|
e4b9930bf3 | ||
|
04c9004e05 | ||
|
1f8798ace7 | ||
|
ff7a80e592 | ||
|
e3ace4be15 | ||
|
36a33617a4 | ||
|
8ce4f19615 | ||
|
05fee5d53c | ||
|
f88606fbc1 | ||
|
e580c3970c | ||
|
2603136e8b | ||
|
3d3f8629af | ||
|
d178ea368a | ||
|
b444385762 | ||
|
0c3f1bed33 | ||
|
bf4fdf6188 | ||
|
13238fc4fd | ||
|
e7a1e0fee2 | ||
|
5a918f3bc9 | ||
|
ea82889e6c | ||
|
7f2cbba543 | ||
|
5ee7d8a5ed | ||
|
947fdcf6f6 | ||
|
2e73f33eb0 | ||
|
752704a798 | ||
|
d00406e089 | ||
|
dddb5bfdea | ||
|
ed0572bd53 | ||
|
b3bbc99cfb | ||
|
0ebbbc839f | ||
|
275c0234cb | ||
|
427130a122 | ||
|
ef07964ea0 | ||
|
e1aff401ba | ||
|
05de5538d6 | ||
|
9929517a83 | ||
|
545765d167 | ||
|
8d9e3f2a31 | ||
|
28f0940c58 | ||
|
d954e85826 | ||
|
7e6b369605 | ||
|
e702eab21c | ||
|
592b9c66d1 | ||
|
8e17feff94 | ||
|
6514e365ad | ||
|
efa4a346af | ||
|
d75f9bbedf | ||
|
ea7f51a279 | ||
|
a65b6df8d2 | ||
|
4e112de223 | ||
|
20d200471d | ||
|
5f2d713fe4 | ||
|
114d2598da | ||
|
36bdb83cfc | ||
|
a975689c59 | ||
|
a809e23320 | ||
|
4db485083b | ||
|
e96972c939 | ||
|
3545c0aac2 | ||
|
d85875b910 | ||
|
b1367942a2 | ||
|
c2c0a2e169 | ||
|
f5052b4bca | ||
|
70d67bb115 | ||
|
9056e0b05f | ||
|
895b6d0470 | ||
|
dfba595cdc | ||
|
175a34da43 | ||
|
02b126c2be | ||
|
b45671fd35 | ||
|
106599895d | ||
|
80154b0a54 | ||
|
62eb4d6989 | ||
|
b52e44e798 | ||
|
72baa4ff18 | ||
|
442656899f | ||
|
d7f89a0c31 | ||
|
2e6223d9d0 | ||
|
28f11a86fd | ||
|
a8b52dc123 | ||
|
9b47ddf01f | ||
|
0fbf007bcf | ||
|
4ad8dad416 | ||
|
8e258bde9d | ||
|
c0d5140ef0 | ||
|
1bef1b58d4 | ||
|
07cd682460 | ||
|
e5c3d264ec | ||
|
bbf22b4c60 | ||
|
dd78ede99f | ||
|
e5b1739f65 | ||
|
a4a2cc2218 | ||
|
5ffbed1bee | ||
|
ec44eaa263 | ||
|
20e53fcd82 | ||
|
64c6ef2de7 | ||
|
817ad8f98d | ||
|
dfa475a769 | ||
|
141ae5c7ab | ||
|
4646581e93 | ||
|
b69fa13576 |
@ -3,7 +3,8 @@
|
|||||||
=====
|
=====
|
||||||
|
|
||||||

|

|
||||||
[](https://discordapp.com/invite/ZdqEhed)
|
[](https://discordapp.com/invite/ZdqEhed)
|
||||||
|

|
||||||
|
|
||||||
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.
|
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.
|
||||||
|
|
||||||
@ -13,7 +14,6 @@ Components
|
|||||||
Atmosphère consists of multiple components, each of which replaces/modifies a different component of the system:
|
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.
|
* 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
|
* 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
|
* 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
|
* 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
|
||||||
@ -27,7 +27,6 @@ This software is licensed under the terms of the GPLv2, with exemptions for spec
|
|||||||
You can find a copy of the license in the [LICENSE file](LICENSE).
|
You can find a copy of the license in the [LICENSE file](LICENSE).
|
||||||
|
|
||||||
Exemptions:
|
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.
|
* [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
|
Credits
|
||||||
@ -38,7 +37,7 @@ In no particular order, we credit the following for their invaluable contributio
|
|||||||
|
|
||||||
* __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.
|
* __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.
|
* __devkitPro__ for the [devkitA64](https://devkitpro.org/) toolchain and libnx support.
|
||||||
* __ReSwitched Team__ for additional [documentation, research and tool development](https://reswitched.team/) pertaining to the Nintendo Switch.
|
* __ReSwitched Team__ for additional [documentation, research and tool development](https://reswitched.github.io/) pertaining to the Nintendo Switch.
|
||||||
* __ChaN__ for the [FatFs](http://elm-chan.org/fsw/ff/00index_e.html) module.
|
* __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.
|
* __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.
|
* __naehrwert__ and __st4rk__ for the original [hekate](https://github.com/nwert/hekate) project and its hwinit code base.
|
||||||
|
@ -50,7 +50,10 @@ dist: dist-no-debug
|
|||||||
cp $(CURRENT_DIRECTORY)/stratosphere/sm/$(ATMOSPHERE_OUT_DIR)/sm.elf $(DIST_DIR)/sm.elf
|
cp $(CURRENT_DIRECTORY)/stratosphere/sm/$(ATMOSPHERE_OUT_DIR)/sm.elf $(DIST_DIR)/sm.elf
|
||||||
cp $(CURRENT_DIRECTORY)/stratosphere/spl/$(ATMOSPHERE_OUT_DIR)/spl.elf $(DIST_DIR)/spl.elf
|
cp $(CURRENT_DIRECTORY)/stratosphere/spl/$(ATMOSPHERE_OUT_DIR)/spl.elf $(DIST_DIR)/spl.elf
|
||||||
cp $(CURRENT_DIRECTORY)/stratosphere/TioServer/$(ATMOSPHERE_OUT_DIR)/TioServer.elf $(DIST_DIR)/TioServer.elf
|
cp $(CURRENT_DIRECTORY)/stratosphere/TioServer/$(ATMOSPHERE_OUT_DIR)/TioServer.elf $(DIST_DIR)/TioServer.elf
|
||||||
|
cp $(CURRENT_DIRECTORY)/stratosphere/memlet/$(ATMOSPHERE_OUT_DIR)/memlet.elf $(DIST_DIR)/memlet.elf
|
||||||
cp $(CURRENT_DIRECTORY)/troposphere/daybreak/daybreak.elf $(DIST_DIR)/daybreak.elf
|
cp $(CURRENT_DIRECTORY)/troposphere/daybreak/daybreak.elf $(DIST_DIR)/daybreak.elf
|
||||||
|
cp $(CURRENT_DIRECTORY)/troposphere/haze/haze.elf $(DIST_DIR)/haze.elf
|
||||||
|
cp $(CURRENT_DIRECTORY)/troposphere/reboot_to_payload/reboot_to_payload.elf $(DIST_DIR)/reboot_to_payload.elf
|
||||||
cd $(DIST_DIR); zip -r ../atmosphere-$(ATMOSPHERE_VERSION)-debug.zip ./*; cd ../;
|
cd $(DIST_DIR); zip -r ../atmosphere-$(ATMOSPHERE_VERSION)-debug.zip ./*; cd ../;
|
||||||
rm -rf $(DIST_DIR)
|
rm -rf $(DIST_DIR)
|
||||||
|
|
||||||
@ -82,9 +85,10 @@ dist-no-debug: package3 $(CURRENT_DIRECTORY)/$(ATMOSPHERE_OUT_DIR)
|
|||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000034
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000034
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000036
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000036
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000037
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000037
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000003c
|
#mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000003c
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000042
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000042
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000420
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000420
|
||||||
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000421
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000b240
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000b240
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d609
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d609
|
||||||
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d623
|
mkdir -p $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d623
|
||||||
@ -96,16 +100,18 @@ dist-no-debug: package3 $(CURRENT_DIRECTORY)/$(ATMOSPHERE_OUT_DIR)
|
|||||||
cp stratosphere/fatal/$(ATMOSPHERE_OUT_DIR)/fatal.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000034/exefs.nsp
|
cp stratosphere/fatal/$(ATMOSPHERE_OUT_DIR)/fatal.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000034/exefs.nsp
|
||||||
cp stratosphere/creport/$(ATMOSPHERE_OUT_DIR)/creport.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000036/exefs.nsp
|
cp stratosphere/creport/$(ATMOSPHERE_OUT_DIR)/creport.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000036/exefs.nsp
|
||||||
cp stratosphere/ro/$(ATMOSPHERE_OUT_DIR)/ro.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000037/exefs.nsp
|
cp stratosphere/ro/$(ATMOSPHERE_OUT_DIR)/ro.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000037/exefs.nsp
|
||||||
cp stratosphere/jpegdec/$(ATMOSPHERE_OUT_DIR)/jpegdec.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000003c/exefs.nsp
|
#cp stratosphere/jpegdec/$(ATMOSPHERE_OUT_DIR)/jpegdec.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000003c/exefs.nsp
|
||||||
cp stratosphere/pgl/$(ATMOSPHERE_OUT_DIR)/pgl.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000042/exefs.nsp
|
cp stratosphere/pgl/$(ATMOSPHERE_OUT_DIR)/pgl.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000042/exefs.nsp
|
||||||
cp stratosphere/LogManager/$(ATMOSPHERE_OUT_DIR)/LogManager.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000420/exefs.nsp
|
cp stratosphere/LogManager/$(ATMOSPHERE_OUT_DIR)/LogManager.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000420/exefs.nsp
|
||||||
cp stratosphere/htc/$(ATMOSPHERE_OUT_DIR)/htc.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000b240/exefs.nsp
|
cp stratosphere/htc/$(ATMOSPHERE_OUT_DIR)/htc.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000b240/exefs.nsp
|
||||||
cp stratosphere/dmnt.gen2/$(ATMOSPHERE_OUT_DIR)/dmnt.gen2.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d609/exefs.nsp
|
cp stratosphere/dmnt.gen2/$(ATMOSPHERE_OUT_DIR)/dmnt.gen2.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d609/exefs.nsp
|
||||||
cp stratosphere/TioServer/$(ATMOSPHERE_OUT_DIR)/TioServer.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d623/exefs.nsp
|
cp stratosphere/TioServer/$(ATMOSPHERE_OUT_DIR)/TioServer.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/010000000000d623/exefs.nsp
|
||||||
|
cp stratosphere/memlet/$(ATMOSPHERE_OUT_DIR)/memlet.nsp $(DIST_DIR)/stratosphere_romfs/atmosphere/contents/0100000000000421/exefs.nsp
|
||||||
@build_romfs $(DIST_DIR)/stratosphere_romfs $(DIST_DIR)/atmosphere/stratosphere.romfs
|
@build_romfs $(DIST_DIR)/stratosphere_romfs $(DIST_DIR)/atmosphere/stratosphere.romfs
|
||||||
rm -r $(DIST_DIR)/stratosphere_romfs
|
rm -r $(DIST_DIR)/stratosphere_romfs
|
||||||
cp troposphere/reboot_to_payload/reboot_to_payload.nro $(DIST_DIR)/switch/reboot_to_payload.nro
|
cp troposphere/reboot_to_payload/reboot_to_payload.nro $(DIST_DIR)/switch/reboot_to_payload.nro
|
||||||
cp troposphere/daybreak/daybreak.nro $(DIST_DIR)/switch/daybreak.nro
|
cp troposphere/daybreak/daybreak.nro $(DIST_DIR)/switch/daybreak.nro
|
||||||
|
cp troposphere/haze/haze.nro $(DIST_DIR)/switch/haze.nro
|
||||||
cd $(DIST_DIR); zip -r ../atmosphere-$(ATMOSPHERE_VERSION).zip ./*; cd ../;
|
cd $(DIST_DIR); zip -r ../atmosphere-$(ATMOSPHERE_VERSION).zip ./*; cd ../;
|
||||||
rm -rf $(DIST_DIR)
|
rm -rf $(DIST_DIR)
|
||||||
cp fusee/$(ATMOSPHERE_BOOT_OUT_DIR)/fusee.bin $(CURRENT_DIRECTORY)/$(ATMOSPHERE_OUT_DIR)/fusee.bin
|
cp fusee/$(ATMOSPHERE_BOOT_OUT_DIR)/fusee.bin $(CURRENT_DIRECTORY)/$(ATMOSPHERE_OUT_DIR)/fusee.bin
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Key: debugmode, default: 1.
|
# Key: debugmode, default: 1.
|
||||||
# Desc: Controls whether kernel is debug mode.
|
# Desc: Controls whether kernel is debug mode.
|
||||||
# Disabling this may break Atmosphere's debugger in a future release.
|
# Disabling this will break Atmosphere.
|
||||||
|
|
||||||
# Key: debugmode_user, default: 0.
|
# Key: debugmode_user, default: 0.
|
||||||
# Desc: Controls whether userland is debug mode.
|
# Desc: Controls whether userland is debug mode.
|
||||||
|
@ -67,6 +67,10 @@
|
|||||||
; Note that this setting is ignored (and treated as 1) when htc is enabled.
|
; Note that this setting is ignored (and treated as 1) when htc is enabled.
|
||||||
; 0 = Disabled, 1 = Enabled
|
; 0 = Disabled, 1 = Enabled
|
||||||
; enable_log_manager = u8!0x0
|
; enable_log_manager = u8!0x0
|
||||||
|
; Controls whether the bluetooth pairing database is redirected to the SD card (shared across sysmmc/all emummcs)
|
||||||
|
; NOTE: On <13.0.0, the database size was 10 instead of 20; booting pre-13.0.0 will truncate the database.
|
||||||
|
; 0 = Disabled, 1 = Enabled
|
||||||
|
; enable_external_bluetooth_db = u8!0x0
|
||||||
[hbloader]
|
[hbloader]
|
||||||
; Controls the size of the homebrew heap when running as applet.
|
; Controls the size of the homebrew heap when running as applet.
|
||||||
; If set to zero, all available applet memory is used as heap.
|
; If set to zero, all available applet memory is used as heap.
|
||||||
|
@ -1,4 +1,203 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
## 1.9.1
|
||||||
|
+ Basic support was added for 20.1.0.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.9.0
|
||||||
|
+ Basic support was added for 20.0.0.
|
||||||
|
+ The console should boot and atmosphère should be fully functional. However, not all modules have been fully updated to reflect the latest changes.
|
||||||
|
+ There shouldn't be anything user visible resulting from this, but it will be addressed in a future atmosphère update.
|
||||||
|
+ The same action item from 18.0.0 remains, and I believe in my heart of hearts that it will be addressed eventually. Someone has told me they're working on it.
|
||||||
|
+ There aren't (to my knowledge) outstanding 19.0.0 items any more.
|
||||||
|
+ **Please note**: As a result of changes made to nintendo's software in 20.0.0, there is roughly 10MB less memory available for custom system modules.
|
||||||
|
+ We can only steal a maximum of 14MB from the applet pool, down from 40MB.
|
||||||
|
+ To compensate for this, `ams.mitm`'s heap usage has been reduced by 20MB.
|
||||||
|
+ To facilitate this, a new helper module (`memlet`) was added, so that memory may be temporarily stolen during the romfs building process.
|
||||||
|
+ Hopefully, this results in relatively little breakage, however it is possible that user mods which replace extremely large numbers of files in The Legend of Zelda: Tears of the Kingdom may no longer function.
|
||||||
|
+ If you are affected by this, you will see "Data abort (0x101)" when trying to launch the game with mods.
|
||||||
|
+ Please reach out to `sciresm` on discord if this occurs to share your error report binary. However, some issues may be impossible to fix.
|
||||||
|
+ I apologize sincerely if the issue is impossible to resolve, but I have been forced unavoidably to make compromises here, and I think this is the best balance to be struck.
|
||||||
|
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `loader` was updated to reflect the latest official behavior.
|
||||||
|
+ `pm` was updated to reflect the latest official behavior.
|
||||||
|
+ `ncm` was partially updated to reflect the latest official behavior.
|
||||||
|
+ `erpt` was updated to reflect the latest official behavior.
|
||||||
|
+ Atmosphère was updated to use GCC 15/newlib (latest devkitA64/devkitARM releases).
|
||||||
|
+ A number of improvements were made to the dmnt cheat engine.
|
||||||
|
+ New instructions were added, and instructions were updated for improved/new functionality.
|
||||||
|
+ Please see the documents for details -- thanks @tomvita!
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.8.0
|
||||||
|
+ Basic support was added for 19.0.0.
|
||||||
|
+ The console should boot and atmosphère should be fully functional. However, not all modules have been fully updated to reflect the latest changes.
|
||||||
|
+ There shouldn't be anything user visible resulting from this, but it will be addressed in a future atmosphère update. There is still one action item from 18.0.0 to be addressed, as well.
|
||||||
|
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `loader` was updated to reflect the latest official behavior.
|
||||||
|
+ `pm` was updated to reflect the latest official behavior.
|
||||||
|
+ `ro` was updated to reflect the latest official behavior.
|
||||||
|
+ `creport`'s file acces patterns were optimized, greatly improving performance when generating a crash report.
|
||||||
|
+ Atmosphère now uses `relr` relocations where possible.
|
||||||
|
+ This reduces the filesize of a number of atmosphère's modules.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ Support was fixed for running Atmosphère on newer units with specific Hynix/Micron DRAM chips.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.7.1
|
||||||
|
+ Support was added for 18.1.0.
|
||||||
|
+ Atmosphère was updated to use GCC 14/newlib (latest devkitA64/devkitARM releases).
|
||||||
|
+ Further changes were for 18.0.0:
|
||||||
|
+ `loader` was updated to reflect the latest official behavior.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.7.0
|
||||||
|
+ Basic support was added for 18.0.0.
|
||||||
|
+ The console should boot and atmosphère should be fully functional. However, not all modules have been fully updated to reflect the latest changes.
|
||||||
|
+ There shouldn't be anything user visible resulting from this, but it will be addressed in a future atmosphère update, once I am not traveling so much.
|
||||||
|
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `spl` was updated to reflect the latest official behavior.
|
||||||
|
+ `fusee`'s no longer supports applying IPS patches to KIPs.
|
||||||
|
+ The only KIPs that are ever present are a) atmosphère modules, b) custom system modules, or c) FS.
|
||||||
|
+ The IPS subsystem was originally designed to make nogc patches work for FS, but these are now internal, and it appears the literal only kip patches that exist are for piracy.
|
||||||
|
+ I could not find any kip patches posted anywhere made for any other purpose.
|
||||||
|
+ It fundamentally does not make sense to slow down boot for every normal user for a feature that has no actual use-case, especially when `fusee` seeks to be a minimal bootloader.
|
||||||
|
+ Minor improvements were made to atmosphere's gdbstub, including:
|
||||||
|
+ Support was added for QStartNoAckMode.
|
||||||
|
+ An issue was fixed that could cause a fatal error when creating too many breakpoints.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ `pt-BR` (`PortugueseBr`) is now accepted as a valid language when overriding game locales.
|
||||||
|
+ A bug was fixed that could cause atmosphere to incorrectly serialize output object IDs over IPC when using domain objects.
|
||||||
|
+ A bug was fixed in `pm`'s resource limit boost logic that could potentially cause legitimate boosts to fail in certain circumstances.
|
||||||
|
+ `loader`/`ro` will now throw a fatal error when using invalid IPS patches that go out of bounds, instead of corrupting memory.
|
||||||
|
+ Support was fixed for booting using a memory configuration of half of the true available memory (e.g. forcing a 4GB configuration on an 8GB board).
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.6.2
|
||||||
|
+ Support was finished for 17.0.0.
|
||||||
|
+ `erpt` was updated to support the latest official behavior.
|
||||||
|
+ `jpegdec` was updated to support the latest official behavior.
|
||||||
|
+ `pm` was updated to support the latest official behavior.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.6.1
|
||||||
|
+ An improved solution to [the problem that would cause consoles which had previously re-built their SYSTEM partition to brick on update-to-17.0.0](https://gist.github.com/SciresM/2ddb708c812ed585c4d99f54e25205ff) was added.
|
||||||
|
+ In particular, booting atmosphère will now automatically detect the problem and unbrick any consoles which have fallen into this state.
|
||||||
|
+ Some improvements were made to `haze`, including:
|
||||||
|
+ Performance was greatly improved:
|
||||||
|
+ Support was added for GetObjectPropList, which decreases the amount of requests made by ~8x.
|
||||||
|
+ Haze now performs rendering on the GPU, freeing up the CPU to respond to requests in a more timely manner.
|
||||||
|
+ An issue was fixed with how `haze` configures `bMaxPacketSize0` which improves support for USB3.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.6.0
|
||||||
|
+ Basic support was added for 17.0.0.
|
||||||
|
+ The console should boot and atmosphère should be fully functional. However, not all modules have been fully updated to reflect the latest changes.
|
||||||
|
+ There shouldn't be anything user visible resulting from this, but it will be addressed in a soon-to-come atmosphère update.
|
||||||
|
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `ncm` was updated to reflect the latest official behavior.
|
||||||
|
+ `erpt` was partially updated to support the latest official behavior.
|
||||||
|
+ Atmosphere's gdbstub now supports waiting to attach to a specific program id on launch (as opposed to any application).
|
||||||
|
+ The monitor command for this is `monitor wait <hex program id>`, where program id can optionally have an `0x` prefix.
|
||||||
|
+ Support was added to `haze` for editing files in-place and performing 64-bit transfers (files larger than 4 GB).
|
||||||
|
+ `bpc.mitm` was enabled on Mariko units, and now triggers pmic-based shutdowns/reboots (thanks @CTCaer).
|
||||||
|
+ This should cause the console to no longer wake ~15 seconds after shutdown on Mariko.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ A workaround was added for a change in 17.0.0 that would cause consoles which had previously re-built their SYSTEM partition to brick on update-to-17.0.0.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.5
|
||||||
|
+ Support was added for 16.1.0.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.4
|
||||||
|
+ Experimental new functionality was implemented to prevent crashing when building romfs for certain games with obscene file counts.
|
||||||
|
+ This includes both Fire Emblem: Engage (~190000 files), and The Legend of Zelda: Tears of the Kingdom (~300000) files.
|
||||||
|
+ The solution involved adding functionality to ams.mitm/pm to dynamically steal memory from the application (and system) pool as needed when the games have romfs mods.
|
||||||
|
+ No memory is taken, and there is no cost to this functionality when playing without mods (or with overrides disabled).
|
||||||
|
+ The Legend of Zelda: Tears of the Kingdom is currently the absolute worst case game, requiring ~48 MB of memory to build a romfs image to play with mods.
|
||||||
|
+ Right now, the memory is sourced as follows: 32 MB (base ams.mitm heap), 10 MB (stolen from application pool), 8 MB (dynamically stolen from system pool).
|
||||||
|
+ This is 50 MB, which allows a little overhead in the worst case (prevents crashing due to exhausting the heap for other allocations in ams.mitm).
|
||||||
|
+ Zelda is remarkably sensitive to memory being stolen from the application pool, tolerating no more than 16 MB on 1.0.0 and 12 MB on 1.1.0. I have chosen to steal 10 MB, to be safe, for now.
|
||||||
|
+ This may break on a future game update, but I will fix it if and when that happens. There is no perfect solution; the game simply requires too much memory to support mods flawlessly, and I am forced to compromise.
|
||||||
|
+ As usual, if you encounter a game that exhausts ams.mitm's memory (crashing it) when loading layeredfs mods, please contact `SciresM#0524`.
|
||||||
|
"I am jinxing myself by saying this, but it's really hard to imagine any game being worse than The Legend of Zelda: Tears of the Kingdom, but if it happens again I will drop everything to fix it as usual".
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.3
|
||||||
|
+ Support was added for 16.0.3.
|
||||||
|
+ Atmosphère was updated to use GCC 13/newlib (latest devkitA64/devkitARM releases).
|
||||||
|
+ **Please note**: This introduces a known issue, which is currently being worked on.
|
||||||
|
+ As you may recall from the 1.4.1 changelog, Fire Emblem: Engage requires enormous amounts of memory to support using layeredfs mods with the game.
|
||||||
|
+ Latest GCC/newlib slightly increases malloc overhead size, which makes the previous memory increase insufficient.
|
||||||
|
+ A general-case solution to this is in the works, which should hopefully fix the problem in a way that doesn't jinx me for the future.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ An issue was fixed that caused system font replacement to not work on 16.0.0+.
|
||||||
|
+ An minor accuracy issue was addressed in mesosphere's management of certain memory ranges; this issue would have had zero visible impact to the end-user.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.2
|
||||||
|
+ A homebrew application (`haze`) was added for performing USB file transfer (with thanks to @liamwhite for both design and implementation).
|
||||||
|
+ `haze` is included with atmosphère, and provides access to the SD card via the PTP/MTP protocol.
|
||||||
|
+ **Please note**: haze will show inside the homebrew menu under the name "USB File Transfer".
|
||||||
|
+ **Please note**: Atmosphère cannot be updated at runtime, and trying to install an atmosphère update via haze will fail as usual.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.1
|
||||||
|
+ `fatal` was updated to reduce memory footprint.
|
||||||
|
+ Starting in 16.0.0, official `fatal` has no framebuffer or rendering logic, and instead calls other system service commands to draw the screen.
|
||||||
|
+ However, these commands aren't usable by atmosphère (too small rendering window, bad color support).
|
||||||
|
+ To reduce the relative memory footprint differential between atmosphère and official code, the framebuffer (2 MB) is now dynamically allocated when needed.
|
||||||
|
+ This will try to allocate from multiple pools (preferring System > System_NonSecure > Application).
|
||||||
|
+ This technically requires that 2 MB be available in at least one of these pools for the fatal screen to render (otherwise, a reboot-to-black-and-white-fatal will occur), but this should be a non-issue in almost all cases.
|
||||||
|
+ A feature was added to optionally mirror the bluetooth pairing database to the SD card (thanks @ndeadly).
|
||||||
|
+ This allows device pairings to be automatically kept in-sync across sysmmc/all emummcs.
|
||||||
|
+ This is opt-in, and can be controlled by setting `atmosphere!enable_external_bluetooth_db = u8!0x1`.
|
||||||
|
+ When enabled, the pairing database will be synchronized to `/atmosphere/bluetooth_devices.db`.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.5.0
|
||||||
|
+ Support was added for 16.0.0
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `ncm` was updated to reflect the latest official behavior.
|
||||||
|
+ Many FS apis were updated under the hood to reflect the latest official behavior.
|
||||||
|
+ **Please Note**: 16.0.0 made breaking changes to a number of system APIs, including in FS/NCM/Shared Font commands that some homebrew programs may use.
|
||||||
|
+ These programs may encounter strange errors, and may need to be recompiled with a libnx updated to support 16.0.0's changes to function properly.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ An issue was fixed that could cause GPIO outputs to be misconfigured under certain circumstances.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.4.1
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ `dmnt` cheat toggle files are no longer ignored when they are missing a trailing newline.
|
||||||
|
+ The mechanism for automatically cleaning up `erpt_reports` added in 1.3.0 was fixed.
|
||||||
|
+ This was actually just very fundamentally broken and has never worked, but it is verified working now.
|
||||||
|
+ Minor fixes were made in `mesosphère` to match official kernel behavior (spin lock assembly was corrected, wrong result on failure in in GetProcessId was corrected).
|
||||||
|
+ A missing call to GetSdStatus when initializing SD cards at non uhs-i mode was added in the sdmmc driver.
|
||||||
|
+ `ams.mitm`'s memory usage was increased by 16 MB, to prevent crashing when building romfs for games with obscene file counts.
|
||||||
|
+ To quote the changelog for 1.2.3: "Animal Crossing's 2.0.0 update contains >99000 files [...] It's really hard to imagine any game being worse than Animal Crossing".
|
||||||
|
+ As it turns out, Fire Emblem: Engage has ~186000 files, and is approximately twice as bad as animal crossing.
|
||||||
|
+ The additional memory here is taken from the applet pool; no issues are expected to arise from this, but please report anything you may run into.
|
||||||
|
+ As usual, if you encounter a game that exhausts ams.mitm's memory (crashing it) when loading layeredfs mods, please contact `SciresM#0524`.
|
||||||
|
+ I am jinxing myself by saying this, but it's really hard to imagine any game being worse than Fire Emblem: Engage, but if it happens again I will drop everything to fix it as usual.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.4.0
|
||||||
|
+ Support was added for 15.0.0.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `ncm` was updated to reflect the latest official behavior.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ The capacity limit on registered add-on contents was fixed in NCM to reflect the increase that occurred in 12.0.0.
|
||||||
|
+ An off-by-one was fixed in mesosphere when computing the new value for an address arbiter signaled with ModifyByWaitingCountIfEqual.
|
||||||
|
+ dmnt.gen2's gdbstub now sanitizes thread names to prevent invalid characters from breaking gdb.
|
||||||
|
+ dmnt.gen2's gdbstub now reports the architecture tag correctly when attached to 32-bit processes.
|
||||||
|
+ Support for program-specific html manual content overrides was added for non-hbl takeover context.
|
||||||
|
+ A bug was fixed in how emummc constructed the alternate Nintendo directory path.
|
||||||
|
+ Previously, this was using `/*/Nintendo/Nintendo` instead of `/*/Nintendo`.
|
||||||
|
+ Code was added to automatically move the old folders to the new ones when booting into emummc.
|
||||||
|
+ A bug was fixed in boot that caused an incorrectly low input voltage limit to be set.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.3.2
|
||||||
|
+ Support was improved for 14.0.0+.
|
||||||
|
+ `loader` was updated to reflect the latest official behaviors.
|
||||||
|
+ `ro` was updated to reflect the latest official behaviors.
|
||||||
|
+ A number of minor issues were fixed and improvements were made, including:
|
||||||
|
+ A memory leak was fixed in filesystem path management; this could cause a crash when launching games ~100 times, or when deleting/re-downloading games.
|
||||||
|
+ A bug was fixed that could cause threads to not see a newly signaled semaphore.
|
||||||
|
+ A number of minor inaccuracies were fixed in the updated FileSystem APIs.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.3.1
|
||||||
|
+ Support was added for 14.1.0.
|
||||||
|
+ A number of minor under the hood improvements to accuracy were made to better reflect latest official system module behavior, particularly around FS apis.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
## 1.3.0
|
## 1.3.0
|
||||||
+ Support was added for 14.0.0.
|
+ Support was added for 14.0.0.
|
||||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
18
docs/faq.md
Normal file
18
docs/faq.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Frequently Asked Questions
|
||||||
|
|
||||||
|
This document serves as a place to store answers for common questions received about Atmosphère.
|
||||||
|
|
||||||
|
## What does "June 15th" mean?
|
||||||
|
When Atmosphère began development in February 2018, "June 15" was given as the estimate/target date for a first release, to coincide with the planned disclosure of a vulnerability.
|
||||||
|
|
||||||
|
This deadline was missed, hard.
|
||||||
|
|
||||||
|
People made rather a lot of fun of me (SciresM) for this.
|
||||||
|
|
||||||
|
Several months later, when the first Atmosphère release occurred, I captioned it "Happy June 15th!" and pretended like I hadn't missed the first deadline.
|
||||||
|
|
||||||
|
This amused me a lot, and so the practice has been kept up for every single release since.
|
||||||
|
|
||||||
|
Depending on who you ask, you may be told that this is a dumb joke and it is not funny.
|
||||||
|
|
||||||
|
This is incorrect. It is definitely a dumb joke, but it is also hilarious.
|
@ -49,7 +49,7 @@ Code type 0x0 allows writing a static value to a memory address.
|
|||||||
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr, 4 = non-relative).
|
||||||
+ R: Register to use as an offset from memory region base.
|
+ R: Register to use as an offset from memory region base.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to write.
|
+ V: Value to write.
|
||||||
@ -62,11 +62,13 @@ Code type 0x1 performs a comparison of the contents of memory to a static value.
|
|||||||
If the condition is not met, all instructions until the appropriate End or Else conditional block terminator are skipped.
|
If the condition is not met, all instructions until the appropriate End or Else conditional block terminator are skipped.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`1TMCXrAA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to read from (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr, 4 = non-relative).
|
||||||
+ C: Condition to use, see below.
|
+ C: Condition to use, see below.
|
||||||
|
+ X: Operand Type, see below.
|
||||||
|
+ r: Offset Register (operand types 1).
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to compare to.
|
+ V: Value to compare to.
|
||||||
|
|
||||||
@ -78,6 +80,9 @@ If the condition is not met, all instructions until the appropriate End or Else
|
|||||||
+ 5: ==
|
+ 5: ==
|
||||||
+ 6: !=
|
+ 6: !=
|
||||||
|
|
||||||
|
#### Operand Type
|
||||||
|
+ 0: Memory Base + Relative Offset
|
||||||
|
+ 1: Memory Base + Offset Register + Relative Offset
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x2: End Conditional Block
|
### Code Type 0x2: End Conditional Block
|
||||||
@ -126,7 +131,7 @@ Code type 0x5 allows loading a value from memory into a register, either using a
|
|||||||
`5TMR00AA AAAAAAAA`
|
`5TMR00AA AAAAAAAA`
|
||||||
|
|
||||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr, 4 = non-relative).
|
||||||
+ R: Register to load value into.
|
+ R: Register to load value into.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
|
|
||||||
@ -137,6 +142,22 @@ Code type 0x5 allows loading a value from memory into a register, either using a
|
|||||||
+ R: Register to load value into. (This register is also used as the base memory address).
|
+ R: Register to load value into. (This register is also used as the base memory address).
|
||||||
+ A: Immediate offset to use from register R.
|
+ A: Immediate offset to use from register R.
|
||||||
|
|
||||||
|
#### Load from Register Address Encoding
|
||||||
|
`5T0R2SAA AAAAAAAA`
|
||||||
|
|
||||||
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
|
+ R: Register to load value into.
|
||||||
|
+ S: Register to use as the base memory address.
|
||||||
|
+ A: Immediate offset to use from register R.
|
||||||
|
|
||||||
|
#### Load From Fixed Address Encoding with offset register
|
||||||
|
`5TMR3SAA AAAAAAAA`
|
||||||
|
|
||||||
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr, 4 = non-relative).
|
||||||
|
+ R: Register to load value into.
|
||||||
|
+ S: Register to use as offset register.
|
||||||
|
+ A: Immediate offset to use from memory region base.
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x6: Store Static Value to Register Memory Address
|
### Code Type 0x6: Store Static Value to Register Memory Address
|
||||||
@ -250,7 +271,10 @@ Code type 0x9 allows performing arithmetic on registers.
|
|||||||
+ 7: Logical Not (discards right-hand operand)
|
+ 7: Logical Not (discards right-hand operand)
|
||||||
+ 8: Logical Xor
|
+ 8: Logical Xor
|
||||||
+ 9: None/Move (discards right-hand operand)
|
+ 9: None/Move (discards right-hand operand)
|
||||||
|
+ 10: Float Addition, T==4 single T==8 double
|
||||||
|
+ 11: Float Subtraction, T==4 single T==8 double
|
||||||
|
+ 12: Float Multiplication, T==4 single T==8 double
|
||||||
|
+ 13: Float Division, T==4 single T==8 double
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0xA: Store Register to Memory Address
|
### Code Type 0xA: Store Register to Memory Address
|
||||||
@ -380,6 +404,61 @@ Code type 0xC3 reads or writes a static register with a given register.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Code Type 0xC4: Begin Extended Keypress Conditional Block
|
||||||
|
Code type 0xC4 enters or skips a conditional block based on whether a key combination is pressed.
|
||||||
|
|
||||||
|
#### Encoding
|
||||||
|
`C4r00000 kkkkkkkk kkkkkkkk`
|
||||||
|
|
||||||
|
+ r: Auto-repeat, see below.
|
||||||
|
+ kkkkkkkkkk: Keypad mask to check against output of `hidKeysDown()`.
|
||||||
|
|
||||||
|
Note that for multiple button combinations, the bitmasks should be OR'd together.
|
||||||
|
|
||||||
|
#### Auto-repeat
|
||||||
|
|
||||||
|
+ 0: The conditional block executes only once when the keypad mask matches. The mask must stop matching to reset for the next trigger.
|
||||||
|
+ 1: The conditional block executes as long as the keypad mask matches.
|
||||||
|
|
||||||
|
#### Keypad Values
|
||||||
|
Note: This is the direct output of `hidKeysDown()`.
|
||||||
|
|
||||||
|
+ 00000000 00000001: A
|
||||||
|
+ 00000000 00000002: B
|
||||||
|
+ 00000000 00000004: X
|
||||||
|
+ 00000000 00000008: Y
|
||||||
|
+ 00000000 00000010: Left Stick Pressed
|
||||||
|
+ 00000000 00000020: Right Stick Pressed
|
||||||
|
+ 00000000 00000040: L
|
||||||
|
+ 00000000 00000080: R
|
||||||
|
+ 00000000 00000100: ZL
|
||||||
|
+ 00000000 00000200: ZR
|
||||||
|
+ 00000000 00000400: Plus
|
||||||
|
+ 00000000 00000800: Minus
|
||||||
|
+ 00000000 00001000: Left
|
||||||
|
+ 00000000 00002000: Up
|
||||||
|
+ 00000000 00004000: Right
|
||||||
|
+ 00000000 00008000: Down
|
||||||
|
+ 00000000 00010000: Left Stick Left
|
||||||
|
+ 00000000 00020000: Left Stick Up
|
||||||
|
+ 00000000 00040000: Left Stick Right
|
||||||
|
+ 00000000 00080000: Left Stick Down
|
||||||
|
+ 00000000 00100000: Right Stick Left
|
||||||
|
+ 00000000 00200000: Right Stick Up
|
||||||
|
+ 00000000 00400000: Right Stick Right
|
||||||
|
+ 00000000 00800000: Right Stick Down
|
||||||
|
+ 00000000 01000000: SL Left Joy-Con
|
||||||
|
+ 00000000 02000000: SR Left Joy-Con
|
||||||
|
+ 00000000 04000000: SL Right Joy-Con
|
||||||
|
+ 00000000 08000000: SR Right Joy-Con
|
||||||
|
+ 00000000 10000000: Top button on Poké Ball Plus (Palma) controller
|
||||||
|
+ 00000000 20000000: Verification
|
||||||
|
+ 00000000 40000000: B button on Left NES/HVC controller in Handheld mode
|
||||||
|
+ 00000000 80000000: Left C button in N64 controller
|
||||||
|
+ 00000001 00000000: Up C button in N64 controller
|
||||||
|
+ 00000002 00000000: Right C button in N64 controller
|
||||||
|
+ 00000004 00000000: Down C button in N64 controller
|
||||||
|
|
||||||
### Code Type 0xF0: Double Extended-Width Instruction
|
### 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.
|
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.
|
||||||
|
|
||||||
|
@ -27,3 +27,6 @@ A list of planned features for Atmosphère can be found [here](roadmap.md).
|
|||||||
|
|
||||||
## Release History
|
## Release History
|
||||||
A changelog of previous versions of Atmosphère can be found [here](changelog.md).
|
A changelog of previous versions of Atmosphère can be found [here](changelog.md).
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
Answers to one or more frequently asked questions may be found [here](faq.md).
|
||||||
|
4
emummc/.gitrepo
vendored
4
emummc/.gitrepo
vendored
@ -6,7 +6,7 @@
|
|||||||
[subrepo]
|
[subrepo]
|
||||||
remote = https://github.com/m4xw/emummc
|
remote = https://github.com/m4xw/emummc
|
||||||
branch = develop
|
branch = develop
|
||||||
commit = 56a2e8a2078944d9bf8daead237036254bb6e36d
|
commit = a8e5f1a184aeb8ba884166a1e4f386088d4a6cf1
|
||||||
parent = 4f763b2aa401ac3e3d699ec8c866ae9b3c8fb28d
|
parent = 409c3cf9e190dbb65fe76570954939cbe8a5eca0
|
||||||
method = merge
|
method = merge
|
||||||
cmdver = 0.4.1
|
cmdver = 0.4.1
|
||||||
|
2
emummc/README.md
vendored
2
emummc/README.md
vendored
@ -2,7 +2,7 @@
|
|||||||
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
||||||
|
|
||||||
### Supported Horizon Versions
|
### Supported Horizon Versions
|
||||||
**1.0.0 - 13.1.0**
|
**1.0.0 - 20.1.0**
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
* Arbitrary SDMMC backend selection
|
* Arbitrary SDMMC backend selection
|
||||||
|
72
emummc/source/FS/FS_offsets.c
vendored
72
emummc/source/FS/FS_offsets.c
vendored
@ -61,6 +61,24 @@
|
|||||||
#include "offsets/1310_exfat.h"
|
#include "offsets/1310_exfat.h"
|
||||||
#include "offsets/1400.h"
|
#include "offsets/1400.h"
|
||||||
#include "offsets/1400_exfat.h"
|
#include "offsets/1400_exfat.h"
|
||||||
|
#include "offsets/1500.h"
|
||||||
|
#include "offsets/1500_exfat.h"
|
||||||
|
#include "offsets/1600.h"
|
||||||
|
#include "offsets/1600_exfat.h"
|
||||||
|
#include "offsets/1603.h"
|
||||||
|
#include "offsets/1603_exfat.h"
|
||||||
|
#include "offsets/1700.h"
|
||||||
|
#include "offsets/1700_exfat.h"
|
||||||
|
#include "offsets/1800.h"
|
||||||
|
#include "offsets/1800_exfat.h"
|
||||||
|
#include "offsets/1810.h"
|
||||||
|
#include "offsets/1810_exfat.h"
|
||||||
|
#include "offsets/1900.h"
|
||||||
|
#include "offsets/1900_exfat.h"
|
||||||
|
#include "offsets/2000.h"
|
||||||
|
#include "offsets/2000_exfat.h"
|
||||||
|
#include "offsets/2010.h"
|
||||||
|
#include "offsets/2010_exfat.h"
|
||||||
#include "../utils/fatal.h"
|
#include "../utils/fatal.h"
|
||||||
|
|
||||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||||
@ -133,6 +151,24 @@ DEFINE_OFFSET_STRUCT(_1310);
|
|||||||
DEFINE_OFFSET_STRUCT(_1310_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1310_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1400);
|
DEFINE_OFFSET_STRUCT(_1400);
|
||||||
DEFINE_OFFSET_STRUCT(_1400_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1400_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1500);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1500_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1600);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1600_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1603);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1603_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1700);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1700_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1800);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1800_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1810);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1810_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1900);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1900_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_2000);
|
||||||
|
DEFINE_OFFSET_STRUCT(_2000_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_2010);
|
||||||
|
DEFINE_OFFSET_STRUCT(_2010_EXFAT);
|
||||||
|
|
||||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
@ -226,6 +262,42 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
|||||||
return &(GET_OFFSET_STRUCT_NAME(_1400));
|
return &(GET_OFFSET_STRUCT_NAME(_1400));
|
||||||
case FS_VER_14_0_0_EXFAT:
|
case FS_VER_14_0_0_EXFAT:
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1400_EXFAT));
|
return &(GET_OFFSET_STRUCT_NAME(_1400_EXFAT));
|
||||||
|
case FS_VER_15_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1500));
|
||||||
|
case FS_VER_15_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1500_EXFAT));
|
||||||
|
case FS_VER_16_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1600));
|
||||||
|
case FS_VER_16_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1600_EXFAT));
|
||||||
|
case FS_VER_16_0_3:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1603));
|
||||||
|
case FS_VER_16_0_3_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1603_EXFAT));
|
||||||
|
case FS_VER_17_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1700));
|
||||||
|
case FS_VER_17_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1700_EXFAT));
|
||||||
|
case FS_VER_18_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1800));
|
||||||
|
case FS_VER_18_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1800_EXFAT));
|
||||||
|
case FS_VER_18_1_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1810));
|
||||||
|
case FS_VER_18_1_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1810_EXFAT));
|
||||||
|
case FS_VER_19_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1900));
|
||||||
|
case FS_VER_19_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1900_EXFAT));
|
||||||
|
case FS_VER_20_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_2000));
|
||||||
|
case FS_VER_20_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_2000_EXFAT));
|
||||||
|
case FS_VER_20_1_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_2010));
|
||||||
|
case FS_VER_20_1_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_2010_EXFAT));
|
||||||
default:
|
default:
|
||||||
fatal_abort(Fatal_UnknownVersion);
|
fatal_abort(Fatal_UnknownVersion);
|
||||||
}
|
}
|
||||||
|
27
emummc/source/FS/FS_versions.h
vendored
27
emummc/source/FS/FS_versions.h
vendored
@ -89,6 +89,33 @@ enum FS_VER
|
|||||||
FS_VER_14_0_0,
|
FS_VER_14_0_0,
|
||||||
FS_VER_14_0_0_EXFAT,
|
FS_VER_14_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_15_0_0,
|
||||||
|
FS_VER_15_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_16_0_0,
|
||||||
|
FS_VER_16_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_16_0_3,
|
||||||
|
FS_VER_16_0_3_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_17_0_0,
|
||||||
|
FS_VER_17_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_18_0_0,
|
||||||
|
FS_VER_18_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_18_1_0,
|
||||||
|
FS_VER_18_1_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_19_0_0,
|
||||||
|
FS_VER_19_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_20_0_0,
|
||||||
|
FS_VER_20_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_20_1_0,
|
||||||
|
FS_VER_20_1_0_EXFAT,
|
||||||
|
|
||||||
FS_VER_MAX,
|
FS_VER_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
59
emummc/source/FS/offsets/1500.h
vendored
Normal file
59
emummc/source/FS/offsets/1500.h
vendored
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_1500_H__
|
||||||
|
#define __FS_1500_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1500_SDMMC_ACCESSOR_GC 0x183E20
|
||||||
|
#define FS_OFFSET_1500_SDMMC_ACCESSOR_SD 0x185AA0
|
||||||
|
#define FS_OFFSET_1500_SDMMC_ACCESSOR_NAND 0x1842E0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1500_SDMMC_WRAPPER_READ 0x17FCF0
|
||||||
|
#define FS_OFFSET_1500_SDMMC_WRAPPER_WRITE 0x17FD50
|
||||||
|
#define FS_OFFSET_1500_RTLD 0x26518
|
||||||
|
#define FS_OFFSET_1500_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1500_CLKRST_SET_MIN_V_CLK_RATE 0x1A0870
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1500_LOCK_MUTEX 0x1791A0
|
||||||
|
#define FS_OFFSET_1500_UNLOCK_MUTEX 0x1791F0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1500_SDMMC_WRAPPER_CONTROLLER_OPEN 0x17FCB0
|
||||||
|
#define FS_OFFSET_1500_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x17FCD0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1500_SD_MUTEX 0xFF33F0
|
||||||
|
#define FS_OFFSET_1500_NAND_MUTEX 0xFEE2E8
|
||||||
|
#define FS_OFFSET_1500_ACTIVE_PARTITION 0xFEE328
|
||||||
|
#define FS_OFFSET_1500_SDMMC_DAS_HANDLE 0xFD38D8
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1500_SD_DAS_INIT 0x25454
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1500_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063050, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006FDE8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000768D4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00089364, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1500_H__
|
59
emummc/source/FS/offsets/1500_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1500_exfat.h
vendored
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_1500_EXFAT_H__
|
||||||
|
#define __FS_1500_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_ACCESSOR_GC 0x18EDB0
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_ACCESSOR_SD 0x190A30
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_ACCESSOR_NAND 0x18F270
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_WRAPPER_READ 0x18AC80
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_WRAPPER_WRITE 0x18ACE0
|
||||||
|
#define FS_OFFSET_1500_EXFAT_RTLD 0x26518
|
||||||
|
#define FS_OFFSET_1500_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1500_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1AB800
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1500_EXFAT_LOCK_MUTEX 0x184130
|
||||||
|
#define FS_OFFSET_1500_EXFAT_UNLOCK_MUTEX 0x184180
|
||||||
|
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x18AC40
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x18AC60
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SD_MUTEX 0x10053F0
|
||||||
|
#define FS_OFFSET_1500_EXFAT_NAND_MUTEX 0x10002E8
|
||||||
|
#define FS_OFFSET_1500_EXFAT_ACTIVE_PARTITION 0x1000328
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SDMMC_DAS_HANDLE 0xFE08D8
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1500_EXFAT_SD_DAS_INIT 0x25454
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1500_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063050, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006FDE8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000768D4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00089364, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1500_EXFAT_H__
|
59
emummc/source/FS/offsets/1600.h
vendored
Normal file
59
emummc/source/FS/offsets/1600.h
vendored
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_1600_H__
|
||||||
|
#define __FS_1600_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1600_SDMMC_ACCESSOR_GC 0x1862A0
|
||||||
|
#define FS_OFFSET_1600_SDMMC_ACCESSOR_SD 0x187F20
|
||||||
|
#define FS_OFFSET_1600_SDMMC_ACCESSOR_NAND 0x186760
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1600_SDMMC_WRAPPER_READ 0x1821F0
|
||||||
|
#define FS_OFFSET_1600_SDMMC_WRAPPER_WRITE 0x182250
|
||||||
|
#define FS_OFFSET_1600_RTLD 0x269B0
|
||||||
|
#define FS_OFFSET_1600_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1600_CLKRST_SET_MIN_V_CLK_RATE 0x1A2D30
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1600_LOCK_MUTEX 0x17B730
|
||||||
|
#define FS_OFFSET_1600_UNLOCK_MUTEX 0x17B780
|
||||||
|
|
||||||
|
#define FS_OFFSET_1600_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1821B0
|
||||||
|
#define FS_OFFSET_1600_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1821D0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1600_SD_MUTEX 0xFFB3F0
|
||||||
|
#define FS_OFFSET_1600_NAND_MUTEX 0xFF6B58
|
||||||
|
#define FS_OFFSET_1600_ACTIVE_PARTITION 0xFF6B98
|
||||||
|
#define FS_OFFSET_1600_SDMMC_DAS_HANDLE 0xFDC8B0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1600_SD_DAS_INIT 0x258D4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1600_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063B48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00070D6C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007790C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008A754, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1600_H__
|
59
emummc/source/FS/offsets/1600_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1600_exfat.h
vendored
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_1600_EXFAT_H__
|
||||||
|
#define __FS_1600_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_ACCESSOR_GC 0x190F80
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_ACCESSOR_SD 0x192C00
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_ACCESSOR_NAND 0x191440
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_WRAPPER_READ 0x18CED0
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_WRAPPER_WRITE 0x18CF30
|
||||||
|
#define FS_OFFSET_1600_EXFAT_RTLD 0x269B0
|
||||||
|
#define FS_OFFSET_1600_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1600_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1ADA10
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1600_EXFAT_LOCK_MUTEX 0x186410
|
||||||
|
#define FS_OFFSET_1600_EXFAT_UNLOCK_MUTEX 0x186460
|
||||||
|
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x18CE90
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x18CEB0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SD_MUTEX 0x100D3F0
|
||||||
|
#define FS_OFFSET_1600_EXFAT_NAND_MUTEX 0x1008B58
|
||||||
|
#define FS_OFFSET_1600_EXFAT_ACTIVE_PARTITION 0x1008B98
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SDMMC_DAS_HANDLE 0xFE98B0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1600_EXFAT_SD_DAS_INIT 0x258D4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1600_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063B48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00070D6C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007790C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008A754, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1600_EXFAT_H__
|
59
emummc/source/FS/offsets/1603.h
vendored
Normal file
59
emummc/source/FS/offsets/1603.h
vendored
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_1603_H__
|
||||||
|
#define __FS_1603_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1603_SDMMC_ACCESSOR_GC 0x1862F0
|
||||||
|
#define FS_OFFSET_1603_SDMMC_ACCESSOR_SD 0x187F70
|
||||||
|
#define FS_OFFSET_1603_SDMMC_ACCESSOR_NAND 0x1867B0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1603_SDMMC_WRAPPER_READ 0x182240
|
||||||
|
#define FS_OFFSET_1603_SDMMC_WRAPPER_WRITE 0x1822A0
|
||||||
|
#define FS_OFFSET_1603_RTLD 0x269B0
|
||||||
|
#define FS_OFFSET_1603_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1603_CLKRST_SET_MIN_V_CLK_RATE 0x1A2D80
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1603_LOCK_MUTEX 0x17B780
|
||||||
|
#define FS_OFFSET_1603_UNLOCK_MUTEX 0x17B7D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1603_SDMMC_WRAPPER_CONTROLLER_OPEN 0x182200
|
||||||
|
#define FS_OFFSET_1603_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x182220
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1603_SD_MUTEX 0xFFB3F0
|
||||||
|
#define FS_OFFSET_1603_NAND_MUTEX 0xFF6B58
|
||||||
|
#define FS_OFFSET_1603_ACTIVE_PARTITION 0xFF6B98
|
||||||
|
#define FS_OFFSET_1603_SDMMC_DAS_HANDLE 0xFDC8B0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1603_SD_DAS_INIT 0x258D4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1603_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063B98, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00070DBC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007795C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008A7A4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1603_H__
|
59
emummc/source/FS/offsets/1603_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1603_exfat.h
vendored
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_1603_EXFAT_H__
|
||||||
|
#define __FS_1603_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_GC 0x190FD0
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_SD 0x192C50
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_NAND 0x191490
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_READ 0x18CF20
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_WRITE 0x18CF80
|
||||||
|
#define FS_OFFSET_1603_EXFAT_RTLD 0x269B0
|
||||||
|
#define FS_OFFSET_1603_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1603_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1ADA60
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1603_EXFAT_LOCK_MUTEX 0x186460
|
||||||
|
#define FS_OFFSET_1603_EXFAT_UNLOCK_MUTEX 0x1864B0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x18CEE0
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x18CF00
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SD_MUTEX 0x100D3F0
|
||||||
|
#define FS_OFFSET_1603_EXFAT_NAND_MUTEX 0x1008B58
|
||||||
|
#define FS_OFFSET_1603_EXFAT_ACTIVE_PARTITION 0x1008B98
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SDMMC_DAS_HANDLE 0xFE98B0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1603_EXFAT_SD_DAS_INIT 0x258D4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1603_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00063B98, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00070DBC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007795C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008A7A4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1603_EXFAT_H__
|
59
emummc/source/FS/offsets/1700.h
vendored
Normal file
59
emummc/source/FS/offsets/1700.h
vendored
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_1700_H__
|
||||||
|
#define __FS_1700_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1700_SDMMC_ACCESSOR_GC 0x18AD00
|
||||||
|
#define FS_OFFSET_1700_SDMMC_ACCESSOR_SD 0x18C9D0
|
||||||
|
#define FS_OFFSET_1700_SDMMC_ACCESSOR_NAND 0x18B1D0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1700_SDMMC_WRAPPER_READ 0x186BC0
|
||||||
|
#define FS_OFFSET_1700_SDMMC_WRAPPER_WRITE 0x186C20
|
||||||
|
#define FS_OFFSET_1700_RTLD 0x29D10
|
||||||
|
#define FS_OFFSET_1700_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1700_CLKRST_SET_MIN_V_CLK_RATE 0x1A7B60
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1700_LOCK_MUTEX 0x17FEA0
|
||||||
|
#define FS_OFFSET_1700_UNLOCK_MUTEX 0x17FEF0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1700_SDMMC_WRAPPER_CONTROLLER_OPEN 0x186B80
|
||||||
|
#define FS_OFFSET_1700_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x186BA0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1700_SD_MUTEX 0xFCE3F0
|
||||||
|
#define FS_OFFSET_1700_NAND_MUTEX 0xFC9B78
|
||||||
|
#define FS_OFFSET_1700_ACTIVE_PARTITION 0xFC9BB8
|
||||||
|
#define FS_OFFSET_1700_SDMMC_DAS_HANDLE 0xFAF840
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1700_SD_DAS_INIT 0x28C64
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1700_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068068, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007510C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007BEAC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008F674, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1700_H__
|
59
emummc/source/FS/offsets/1700_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1700_exfat.h
vendored
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_1700_EXFAT_H__
|
||||||
|
#define __FS_1700_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_ACCESSOR_GC 0x195B60
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_ACCESSOR_SD 0x197830
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_ACCESSOR_NAND 0x196030
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_WRAPPER_READ 0x191A20
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_WRAPPER_WRITE 0x191A80
|
||||||
|
#define FS_OFFSET_1700_EXFAT_RTLD 0x29D10
|
||||||
|
#define FS_OFFSET_1700_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1700_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1B29C0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1700_EXFAT_LOCK_MUTEX 0x18AD00
|
||||||
|
#define FS_OFFSET_1700_EXFAT_UNLOCK_MUTEX 0x18AD50
|
||||||
|
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1919E0
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x191A00
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SD_MUTEX 0xFE03F0
|
||||||
|
#define FS_OFFSET_1700_EXFAT_NAND_MUTEX 0xFDBB78
|
||||||
|
#define FS_OFFSET_1700_EXFAT_ACTIVE_PARTITION 0xFDBBB8
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SDMMC_DAS_HANDLE 0xFBC840
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1700_EXFAT_SD_DAS_INIT 0x28C64
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1700_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068068, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007510C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007BEAC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0008F674, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1700_EXFAT_H__
|
59
emummc/source/FS/offsets/1800.h
vendored
Normal file
59
emummc/source/FS/offsets/1800.h
vendored
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_1800_H__
|
||||||
|
#define __FS_1800_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1800_SDMMC_ACCESSOR_GC 0x18AB00
|
||||||
|
#define FS_OFFSET_1800_SDMMC_ACCESSOR_SD 0x18C800
|
||||||
|
#define FS_OFFSET_1800_SDMMC_ACCESSOR_NAND 0x18AFE0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1800_SDMMC_WRAPPER_READ 0x186A50
|
||||||
|
#define FS_OFFSET_1800_SDMMC_WRAPPER_WRITE 0x186AB0
|
||||||
|
#define FS_OFFSET_1800_RTLD 0x2A3A4
|
||||||
|
#define FS_OFFSET_1800_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x44)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1800_CLKRST_SET_MIN_V_CLK_RATE 0x1A77D0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1800_LOCK_MUTEX 0x17FCC0
|
||||||
|
#define FS_OFFSET_1800_UNLOCK_MUTEX 0x17FD10
|
||||||
|
|
||||||
|
#define FS_OFFSET_1800_SDMMC_WRAPPER_CONTROLLER_OPEN 0x186A10
|
||||||
|
#define FS_OFFSET_1800_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x186A30
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1800_SD_MUTEX 0xFD13F0
|
||||||
|
#define FS_OFFSET_1800_NAND_MUTEX 0xFCCB28
|
||||||
|
#define FS_OFFSET_1800_ACTIVE_PARTITION 0xFCCB68
|
||||||
|
#define FS_OFFSET_1800_SDMMC_DAS_HANDLE 0xFB1950
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1800_SD_DAS_INIT 0x28F24
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1800_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068B08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x000758DC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007C77C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000905C4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1800_H__
|
59
emummc/source/FS/offsets/1800_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1800_exfat.h
vendored
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_1800_EXFAT_H__
|
||||||
|
#define __FS_1800_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_ACCESSOR_GC 0x195B90
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_ACCESSOR_SD 0x197890
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_ACCESSOR_NAND 0x196070
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_WRAPPER_READ 0x191AE0
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_WRAPPER_WRITE 0x191B40
|
||||||
|
#define FS_OFFSET_1800_EXFAT_RTLD 0x2A3A4
|
||||||
|
#define FS_OFFSET_1800_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x44)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1800_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1B2860
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1800_EXFAT_LOCK_MUTEX 0x18AD50
|
||||||
|
#define FS_OFFSET_1800_EXFAT_UNLOCK_MUTEX 0x18ADA0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x191AA0
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x191AC0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SD_MUTEX 0xFE33F0
|
||||||
|
#define FS_OFFSET_1800_EXFAT_NAND_MUTEX 0xFDEB28
|
||||||
|
#define FS_OFFSET_1800_EXFAT_ACTIVE_PARTITION 0xFDEB68
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SDMMC_DAS_HANDLE 0xFBE950
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1800_EXFAT_SD_DAS_INIT 0x28F24
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1800_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068B08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x000758DC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007C77C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000905C4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1800_EXFAT_H__
|
59
emummc/source/FS/offsets/1810.h
vendored
Normal file
59
emummc/source/FS/offsets/1810.h
vendored
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_1810_H__
|
||||||
|
#define __FS_1810_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1810_SDMMC_ACCESSOR_GC 0x18AB00
|
||||||
|
#define FS_OFFSET_1810_SDMMC_ACCESSOR_SD 0x18C800
|
||||||
|
#define FS_OFFSET_1810_SDMMC_ACCESSOR_NAND 0x18AFE0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1810_SDMMC_WRAPPER_READ 0x186A50
|
||||||
|
#define FS_OFFSET_1810_SDMMC_WRAPPER_WRITE 0x186AB0
|
||||||
|
#define FS_OFFSET_1810_RTLD 0x2A3A4
|
||||||
|
#define FS_OFFSET_1810_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x44)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1810_CLKRST_SET_MIN_V_CLK_RATE 0x1A77D0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1810_LOCK_MUTEX 0x17FCC0
|
||||||
|
#define FS_OFFSET_1810_UNLOCK_MUTEX 0x17FD10
|
||||||
|
|
||||||
|
#define FS_OFFSET_1810_SDMMC_WRAPPER_CONTROLLER_OPEN 0x186A10
|
||||||
|
#define FS_OFFSET_1810_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x186A30
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1810_SD_MUTEX 0xFD13F0
|
||||||
|
#define FS_OFFSET_1810_NAND_MUTEX 0xFCCB28
|
||||||
|
#define FS_OFFSET_1810_ACTIVE_PARTITION 0xFCCB68
|
||||||
|
#define FS_OFFSET_1810_SDMMC_DAS_HANDLE 0xFB1950
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1810_SD_DAS_INIT 0x28F24
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1810_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068B08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x000758DC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007C77C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000905C4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1810_H__
|
59
emummc/source/FS/offsets/1810_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1810_exfat.h
vendored
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_1810_EXFAT_H__
|
||||||
|
#define __FS_1810_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_ACCESSOR_GC 0x195B90
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_ACCESSOR_SD 0x197890
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_ACCESSOR_NAND 0x196070
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_WRAPPER_READ 0x191AE0
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_WRAPPER_WRITE 0x191B40
|
||||||
|
#define FS_OFFSET_1810_EXFAT_RTLD 0x2A3A4
|
||||||
|
#define FS_OFFSET_1810_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x44)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1810_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1B2860
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1810_EXFAT_LOCK_MUTEX 0x18AD50
|
||||||
|
#define FS_OFFSET_1810_EXFAT_UNLOCK_MUTEX 0x18ADA0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x191AA0
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x191AC0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SD_MUTEX 0xFE33F0
|
||||||
|
#define FS_OFFSET_1810_EXFAT_NAND_MUTEX 0xFDEB28
|
||||||
|
#define FS_OFFSET_1810_EXFAT_ACTIVE_PARTITION 0xFDEB68
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SDMMC_DAS_HANDLE 0xFBE950
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1810_EXFAT_SD_DAS_INIT 0x28F24
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1810_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00068B08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x000758DC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007C77C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x000905C4, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1810_EXFAT_H__
|
59
emummc/source/FS/offsets/1900.h
vendored
Normal file
59
emummc/source/FS/offsets/1900.h
vendored
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_1900_H__
|
||||||
|
#define __FS_1900_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1900_SDMMC_ACCESSOR_GC 0x195C00
|
||||||
|
#define FS_OFFSET_1900_SDMMC_ACCESSOR_SD 0x197F80
|
||||||
|
#define FS_OFFSET_1900_SDMMC_ACCESSOR_NAND 0x1963B0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1900_SDMMC_WRAPPER_READ 0x191A70
|
||||||
|
#define FS_OFFSET_1900_SDMMC_WRAPPER_WRITE 0x191AD0
|
||||||
|
#define FS_OFFSET_1900_RTLD 0x275F0
|
||||||
|
#define FS_OFFSET_1900_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x50)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1900_CLKRST_SET_MIN_V_CLK_RATE 0x1B3880
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1900_LOCK_MUTEX 0x18AC20
|
||||||
|
#define FS_OFFSET_1900_UNLOCK_MUTEX 0x18AC70
|
||||||
|
|
||||||
|
#define FS_OFFSET_1900_SDMMC_WRAPPER_CONTROLLER_OPEN 0x191A30
|
||||||
|
#define FS_OFFSET_1900_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x191A50
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1900_SD_MUTEX 0xFE1408
|
||||||
|
#define FS_OFFSET_1900_NAND_MUTEX 0xFDCB60
|
||||||
|
#define FS_OFFSET_1900_ACTIVE_PARTITION 0xFDCBA0
|
||||||
|
#define FS_OFFSET_1900_SDMMC_DAS_HANDLE 0xFC1908
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1900_SD_DAS_INIT 0x260C4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1900_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00067FC8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00075D6C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007D1E8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092818, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1900_H__
|
59
emummc/source/FS/offsets/1900_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1900_exfat.h
vendored
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_1900_EXFAT_H__
|
||||||
|
#define __FS_1900_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_ACCESSOR_GC 0x1A1430
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_ACCESSOR_SD 0x1A37B0
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_ACCESSOR_NAND 0x1A1BE0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_WRAPPER_READ 0x19D2A0
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_WRAPPER_WRITE 0x19D300
|
||||||
|
#define FS_OFFSET_1900_EXFAT_RTLD 0x275F0
|
||||||
|
#define FS_OFFSET_1900_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x50)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1900_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1BF0B0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1900_EXFAT_LOCK_MUTEX 0x196450
|
||||||
|
#define FS_OFFSET_1900_EXFAT_UNLOCK_MUTEX 0x1964A0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x19D260
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x19D280
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SD_MUTEX 0xFF4408
|
||||||
|
#define FS_OFFSET_1900_EXFAT_NAND_MUTEX 0xFEFB60
|
||||||
|
#define FS_OFFSET_1900_EXFAT_ACTIVE_PARTITION 0xFEFBA0
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SDMMC_DAS_HANDLE 0xFCF908
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1900_EXFAT_SD_DAS_INIT 0x260C4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1900_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00067FC8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00075D6C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0007D1E8, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092818, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1900_EXFAT_H__
|
59
emummc/source/FS/offsets/2000.h
vendored
Normal file
59
emummc/source/FS/offsets/2000.h
vendored
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_2000_H__
|
||||||
|
#define __FS_2000_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_2000_SDMMC_ACCESSOR_GC 0x1A7DB0
|
||||||
|
#define FS_OFFSET_2000_SDMMC_ACCESSOR_SD 0x1AA130
|
||||||
|
#define FS_OFFSET_2000_SDMMC_ACCESSOR_NAND 0x1A8560
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_2000_SDMMC_WRAPPER_READ 0x1A3C20
|
||||||
|
#define FS_OFFSET_2000_SDMMC_WRAPPER_WRITE 0x1A3C80
|
||||||
|
#define FS_OFFSET_2000_RTLD 0x2B594
|
||||||
|
#define FS_OFFSET_2000_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_2000_CLKRST_SET_MIN_V_CLK_RATE 0x1C6150
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_2000_LOCK_MUTEX 0x19CD80
|
||||||
|
#define FS_OFFSET_2000_UNLOCK_MUTEX 0x19CDD0
|
||||||
|
|
||||||
|
#define FS_OFFSET_2000_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1A3BE0
|
||||||
|
#define FS_OFFSET_2000_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1A3C00
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_2000_SD_MUTEX 0xFF5408
|
||||||
|
#define FS_OFFSET_2000_NAND_MUTEX 0xFF0CF0
|
||||||
|
#define FS_OFFSET_2000_ACTIVE_PARTITION 0xFF0D30
|
||||||
|
#define FS_OFFSET_2000_SDMMC_DAS_HANDLE 0xFD2B08
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_2000_SD_DAS_INIT 0x289F4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_2000_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_2000_H__
|
59
emummc/source/FS/offsets/2000_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/2000_exfat.h
vendored
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_2000_EXFAT_H__
|
||||||
|
#define __FS_2000_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_ACCESSOR_GC 0x1B36D0
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_ACCESSOR_SD 0x1B5A50
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_ACCESSOR_NAND 0x1B3E80
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_WRAPPER_READ 0x1AF540
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_WRAPPER_WRITE 0x1AF5A0
|
||||||
|
#define FS_OFFSET_2000_EXFAT_RTLD 0x2B594
|
||||||
|
#define FS_OFFSET_2000_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_2000_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1D1A70
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_2000_EXFAT_LOCK_MUTEX 0x1A86A0
|
||||||
|
#define FS_OFFSET_2000_EXFAT_UNLOCK_MUTEX 0x1A86F0
|
||||||
|
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1AF500
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1AF520
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SD_MUTEX 0x1006408
|
||||||
|
#define FS_OFFSET_2000_EXFAT_NAND_MUTEX 0x1001CF0
|
||||||
|
#define FS_OFFSET_2000_EXFAT_ACTIVE_PARTITION 0x1001D30
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SDMMC_DAS_HANDLE 0xFDFB08
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_2000_EXFAT_SD_DAS_INIT 0x289F4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_2000_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_2000_EXFAT_H__
|
59
emummc/source/FS/offsets/2010.h
vendored
Normal file
59
emummc/source/FS/offsets/2010.h
vendored
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_2010_H__
|
||||||
|
#define __FS_2010_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_2010_SDMMC_ACCESSOR_GC 0x1A7DB0
|
||||||
|
#define FS_OFFSET_2010_SDMMC_ACCESSOR_SD 0x1AA130
|
||||||
|
#define FS_OFFSET_2010_SDMMC_ACCESSOR_NAND 0x1A8560
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_2010_SDMMC_WRAPPER_READ 0x1A3C20
|
||||||
|
#define FS_OFFSET_2010_SDMMC_WRAPPER_WRITE 0x1A3C80
|
||||||
|
#define FS_OFFSET_2010_RTLD 0x2B594
|
||||||
|
#define FS_OFFSET_2010_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_2010_CLKRST_SET_MIN_V_CLK_RATE 0x1C6150
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_2010_LOCK_MUTEX 0x19CD80
|
||||||
|
#define FS_OFFSET_2010_UNLOCK_MUTEX 0x19CDD0
|
||||||
|
|
||||||
|
#define FS_OFFSET_2010_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1A3BE0
|
||||||
|
#define FS_OFFSET_2010_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1A3C00
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_2010_SD_MUTEX 0xFF5408
|
||||||
|
#define FS_OFFSET_2010_NAND_MUTEX 0xFF0CF0
|
||||||
|
#define FS_OFFSET_2010_ACTIVE_PARTITION 0xFF0D30
|
||||||
|
#define FS_OFFSET_2010_SDMMC_DAS_HANDLE 0xFD2B08
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_2010_SD_DAS_INIT 0x289F4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_2010_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_2010_H__
|
59
emummc/source/FS/offsets/2010_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/2010_exfat.h
vendored
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_2010_EXFAT_H__
|
||||||
|
#define __FS_2010_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_GC 0x1B36D0
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_SD 0x1B5A50
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_NAND 0x1B3E80
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_READ 0x1AF540
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_WRITE 0x1AF5A0
|
||||||
|
#define FS_OFFSET_2010_EXFAT_RTLD 0x2B594
|
||||||
|
#define FS_OFFSET_2010_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_2010_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1D1A70
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_2010_EXFAT_LOCK_MUTEX 0x1A86A0
|
||||||
|
#define FS_OFFSET_2010_EXFAT_UNLOCK_MUTEX 0x1A86F0
|
||||||
|
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1AF500
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1AF520
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SD_MUTEX 0x1006408
|
||||||
|
#define FS_OFFSET_2010_EXFAT_NAND_MUTEX 0x1001CF0
|
||||||
|
#define FS_OFFSET_2010_EXFAT_ACTIVE_PARTITION 0x1001D30
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SDMMC_DAS_HANDLE 0xFDFB08
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_2010_EXFAT_SD_DAS_INIT 0x289F4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_2010_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_2010_EXFAT_H__
|
7
emummc/source/utils/types.h
vendored
7
emummc/source/utils/types.h
vendored
@ -18,6 +18,7 @@
|
|||||||
#define _TYPES_H_
|
#define _TYPES_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
|
#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
@ -58,12 +59,6 @@ typedef u32 Result; ///< Function error code result type.
|
|||||||
#define INVALID_HANDLE ((Handle) 0)
|
#define INVALID_HANDLE ((Handle) 0)
|
||||||
#define CUR_PROCESS_HANDLE ((Handle) 0xFFFF8001)
|
#define CUR_PROCESS_HANDLE ((Handle) 0xFFFF8001)
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
typedef int bool;
|
|
||||||
#define true 1
|
|
||||||
#define false 0
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
#define BOOT_CFG_AUTOBOOT_EN (1 << 0)
|
#define BOOT_CFG_AUTOBOOT_EN (1 << 0)
|
||||||
#define BOOT_CFG_FROM_LAUNCH (1 << 1)
|
#define BOOT_CFG_FROM_LAUNCH (1 << 1)
|
||||||
#define BOOT_CFG_SEPT_RUN (1 << 7)
|
#define BOOT_CFG_SEPT_RUN (1 << 7)
|
||||||
|
@ -15,13 +15,12 @@ ifneq ($(__RECURSIVE__),1)
|
|||||||
export ATMOSPHERE_TOPDIR := $(CURRENT_DIRECTORY)
|
export ATMOSPHERE_TOPDIR := $(CURRENT_DIRECTORY)
|
||||||
|
|
||||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) $(CURDIR)/include \
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) $(CURDIR)/include \
|
||||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||||
$(CURRENT_DIRECTORY)/../program/$(ATMOSPHERE_OUT_DIR)
|
|
||||||
|
|
||||||
CFILES := $(call FIND_SOURCE_FILES,$(SOURCES),c)
|
CFILES := $(call FIND_SOURCE_FILES,$(SOURCES),c)
|
||||||
CPPFILES := $(call FIND_SOURCE_FILES,$(SOURCES),cpp)
|
CPPFILES := $(call FIND_SOURCE_FILES,$(SOURCES),cpp)
|
||||||
SFILES := $(call FIND_SOURCE_FILES,$(SOURCES),s)
|
SFILES := $(call FIND_SOURCE_FILES,$(SOURCES),s)
|
||||||
BINFILES := program.lz4 boot_code.lz4
|
BINFILES :=
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# use CXX for linking C++ projects, CC for standard C
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
@ -102,13 +101,7 @@ $(OUTPUT).elf : $(OFILES)
|
|||||||
|
|
||||||
$(OFILES) : $(ATMOSPHERE_LIBRARIES_DIR)/libexosphere/$(ATMOSPHERE_LIBRARY_DIR)/libexosphere.a
|
$(OFILES) : $(ATMOSPHERE_LIBRARIES_DIR)/libexosphere/$(ATMOSPHERE_LIBRARY_DIR)/libexosphere.a
|
||||||
|
|
||||||
program.lz4.o: program.lz4
|
secmon_loader_main.o: CXXFLAGS += --embed-dir="$(CURRENT_DIRECTORY)/../program/$(ATMOSPHERE_OUT_DIR)/"
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(bin2o)
|
|
||||||
|
|
||||||
boot_code.lz4.o: boot_code.lz4
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(bin2o)
|
|
||||||
|
|
||||||
%.elf:
|
%.elf:
|
||||||
@echo linking $(notdir $@)
|
@echo linking $(notdir $@)
|
||||||
@ -117,14 +110,6 @@ boot_code.lz4.o: boot_code.lz4
|
|||||||
|
|
||||||
$(OFILES_SRC) : $(OFILES_BIN)
|
$(OFILES_SRC) : $(OFILES_BIN)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# you need a rule like this for each extension you use as binary data
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.bin.o %_bin.h: %.bin
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(bin2o)
|
|
||||||
|
|
||||||
-include $(DEPENDS)
|
-include $(DEPENDS)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------
|
||||||
|
@ -15,21 +15,31 @@
|
|||||||
*/
|
*/
|
||||||
#include <exosphere.hpp>
|
#include <exosphere.hpp>
|
||||||
#include "secmon_loader_uncompress.hpp"
|
#include "secmon_loader_uncompress.hpp"
|
||||||
#include "program_lz4.h"
|
|
||||||
#include "boot_code_lz4.h"
|
|
||||||
|
|
||||||
namespace ams::secmon::loader {
|
namespace ams::secmon::loader {
|
||||||
|
|
||||||
NORETURN void UncompressAndExecute(const void *program, const void *boot_code) {
|
namespace {
|
||||||
|
|
||||||
|
constexpr const u8 SecmonProgramLz4[] = {
|
||||||
|
#embed <program.lz4>
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr const u8 SecmonBootCodeLz4[] = {
|
||||||
|
#embed <boot_code.lz4>
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
NORETURN void UncompressAndExecute() {
|
||||||
/* Uncompress the program image. */
|
/* Uncompress the program image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), program, program_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), SecmonProgramLz4, sizeof(SecmonProgramLz4));
|
||||||
|
|
||||||
/* Copy the boot image to the end of IRAM */
|
/* Copy the boot image to the end of IRAM */
|
||||||
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - boot_code_lz4_size;
|
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - sizeof(SecmonBootCodeLz4);
|
||||||
std::memcpy(relocated_boot_code, boot_code, boot_code_lz4_size);
|
std::memcpy(relocated_boot_code, SecmonBootCodeLz4, sizeof(SecmonBootCodeLz4));
|
||||||
|
|
||||||
/* Uncompress the boot image. */
|
/* Uncompress the boot image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, boot_code_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, sizeof(SecmonBootCodeLz4));
|
||||||
|
|
||||||
/* Jump to the boot image. */
|
/* Jump to the boot image. */
|
||||||
reinterpret_cast<void (*)()>(secmon::MemoryRegionPhysicalIramBootCodeImage.GetAddress())();
|
reinterpret_cast<void (*)()>(secmon::MemoryRegionPhysicalIramBootCodeImage.GetAddress())();
|
||||||
|
@ -98,8 +98,5 @@ _start:
|
|||||||
ldr x20, =0x7C020000
|
ldr x20, =0x7C020000
|
||||||
mov sp, x20
|
mov sp, x20
|
||||||
|
|
||||||
adr x0, program_lz4
|
|
||||||
adr x1, boot_code_lz4
|
|
||||||
|
|
||||||
/* Uncompress the program and iram boot code images. */
|
/* Uncompress the program and iram boot code images. */
|
||||||
b _ZN3ams6secmon6loader20UncompressAndExecuteEPKvS3_
|
b _ZN3ams6secmon6loader20UncompressAndExecuteEv
|
||||||
|
@ -62,7 +62,7 @@ namespace ams::secmon::fatal {
|
|||||||
/* Write the context to the file. */
|
/* Write the context to the file. */
|
||||||
R_TRY(fs::WriteFile(file, 0, ctx, sizeof(*ctx), fs::WriteOption::Flush));
|
R_TRY(fs::WriteFile(file, 0, ctx, sizeof(*ctx), fs::WriteOption::Flush));
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,11 +48,11 @@ namespace ams::secmon::fatal {
|
|||||||
//sdmmc::Deactivate(Port);
|
//sdmmc::Deactivate(Port);
|
||||||
R_TRY(sdmmc::Activate(Port));
|
R_TRY(sdmmc::Activate(Port));
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result CheckSdCardConnection(sdmmc::SpeedMode *out_sm, sdmmc::BusWidth *out_bw) {
|
Result CheckSdCardConnection(sdmmc::SpeedMode *out_sm, sdmmc::BusWidth *out_bw) {
|
||||||
return sdmmc::CheckSdCardConnection(out_sm, out_bw, Port);
|
R_RETURN(sdmmc::CheckSdCardConnection(out_sm, out_bw, Port));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ReadSdCard(void *dst, size_t size, size_t sector_index, size_t sector_count) {
|
Result ReadSdCard(void *dst, size_t size, size_t sector_index, size_t sector_count) {
|
||||||
@ -78,7 +78,7 @@ namespace ams::secmon::fatal {
|
|||||||
sector_count -= cur_sectors;
|
sector_count -= cur_sectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result WriteSdCard(size_t sector_index, size_t sector_count, const void *src, size_t size) {
|
Result WriteSdCard(size_t sector_index, size_t sector_count, const void *src, size_t size) {
|
||||||
@ -104,7 +104,7 @@ namespace ams::secmon::fatal {
|
|||||||
sector_count -= cur_sectors;
|
sector_count -= cur_sectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,45 +34,45 @@ namespace ams::fs {
|
|||||||
Result TranslateFatFsError(FRESULT res) {
|
Result TranslateFatFsError(FRESULT res) {
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case FR_OK:
|
case FR_OK:
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
case FR_DISK_ERR:
|
case FR_DISK_ERR:
|
||||||
return fs::ResultMmcAccessFailed();
|
R_THROW(fs::ResultMmcAccessFailed());
|
||||||
case FR_INT_ERR:
|
case FR_INT_ERR:
|
||||||
return fs::ResultPreconditionViolation();
|
R_THROW(fs::ResultPreconditionViolation());
|
||||||
case FR_NOT_READY:
|
case FR_NOT_READY:
|
||||||
return fs::ResultMmcAccessFailed();
|
R_THROW(fs::ResultMmcAccessFailed());
|
||||||
case FR_NO_FILE:
|
case FR_NO_FILE:
|
||||||
return fs::ResultPathNotFound();
|
R_THROW(fs::ResultPathNotFound());
|
||||||
case FR_NO_PATH:
|
case FR_NO_PATH:
|
||||||
return fs::ResultPathNotFound();
|
R_THROW(fs::ResultPathNotFound());
|
||||||
case FR_INVALID_NAME:
|
case FR_INVALID_NAME:
|
||||||
return fs::ResultInvalidPath();
|
R_THROW(fs::ResultInvalidPath());
|
||||||
case FR_DENIED:
|
case FR_DENIED:
|
||||||
return fs::ResultPermissionDenied();
|
R_THROW(fs::ResultPermissionDenied());
|
||||||
case FR_EXIST:
|
case FR_EXIST:
|
||||||
return fs::ResultPathAlreadyExists();
|
R_THROW(fs::ResultPathAlreadyExists());
|
||||||
case FR_INVALID_OBJECT:
|
case FR_INVALID_OBJECT:
|
||||||
return fs::ResultInvalidArgument();
|
R_THROW(fs::ResultInvalidArgument());
|
||||||
case FR_WRITE_PROTECTED:
|
case FR_WRITE_PROTECTED:
|
||||||
return fs::ResultWriteNotPermitted();
|
R_THROW(fs::ResultWriteNotPermitted());
|
||||||
case FR_INVALID_DRIVE:
|
case FR_INVALID_DRIVE:
|
||||||
return fs::ResultInvalidMountName();
|
R_THROW(fs::ResultInvalidMountName());
|
||||||
case FR_NOT_ENABLED:
|
case FR_NOT_ENABLED:
|
||||||
return fs::ResultInvalidMountName(); /* BAD/TODO */
|
R_THROW(fs::ResultInvalidMountName()); /* BAD/TODO */
|
||||||
case FR_NO_FILESYSTEM:
|
case FR_NO_FILESYSTEM:
|
||||||
return fs::ResultInvalidMountName(); /* BAD/TODO */
|
R_THROW(fs::ResultInvalidMountName()); /* BAD/TODO */
|
||||||
case FR_TIMEOUT:
|
case FR_TIMEOUT:
|
||||||
return fs::ResultTargetLocked(); /* BAD/TODO */
|
R_THROW(fs::ResultTargetLocked()); /* BAD/TODO */
|
||||||
case FR_LOCKED:
|
case FR_LOCKED:
|
||||||
return fs::ResultTargetLocked();
|
R_THROW(fs::ResultTargetLocked());
|
||||||
case FR_NOT_ENOUGH_CORE:
|
case FR_NOT_ENOUGH_CORE:
|
||||||
return fs::ResultPreconditionViolation(); /* BAD/TODO */
|
R_THROW(fs::ResultPreconditionViolation()); /* BAD/TODO */
|
||||||
case FR_TOO_MANY_OPEN_FILES:
|
case FR_TOO_MANY_OPEN_FILES:
|
||||||
return fs::ResultPreconditionViolation(); /* BAD/TODO */
|
R_THROW(fs::ResultPreconditionViolation()); /* BAD/TODO */
|
||||||
case FR_INVALID_PARAMETER:
|
case FR_INVALID_PARAMETER:
|
||||||
return fs::ResultInvalidArgument();
|
R_THROW(fs::ResultInvalidArgument());
|
||||||
default:
|
default:
|
||||||
return fs::ResultInternal();
|
R_THROW(fs::ResultInternal());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,11 +125,11 @@ namespace ams::fs {
|
|||||||
/* Expand the file. */
|
/* Expand the file. */
|
||||||
R_TRY(TranslateFatFsError(f_expand(std::addressof(fp), size, 1)));
|
R_TRY(TranslateFatFsError(f_expand(std::addressof(fp), size, 1)));
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result CreateDirectory(const char *path) {
|
Result CreateDirectory(const char *path) {
|
||||||
return TranslateFatFsError(f_mkdir(path));
|
R_RETURN(TranslateFatFsError(f_mkdir(path)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result OpenFile(FileHandle *out_file, const char *path, int mode) {
|
Result OpenFile(FileHandle *out_file, const char *path, int mode) {
|
||||||
@ -144,10 +144,10 @@ namespace ams::fs {
|
|||||||
out_file->_handle = fp;
|
out_file->_handle = fp;
|
||||||
g_files_opened[i] = true;
|
g_files_opened[i] = true;
|
||||||
g_open_modes[i] = mode;
|
g_open_modes[i] = mode;
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fs::ResultOpenCountLimit();
|
R_THROW(fs::ResultOpenCountLimit());
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ReadFile(FileHandle handle, s64 offset, void *buffer, size_t size, const fs::ReadOption &option) {
|
Result ReadFile(FileHandle handle, s64 offset, void *buffer, size_t size, const fs::ReadOption &option) {
|
||||||
@ -164,11 +164,11 @@ namespace ams::fs {
|
|||||||
/* Check that we read the correct amount. */
|
/* Check that we read the correct amount. */
|
||||||
R_UNLESS(br == size, fs::ResultOutOfRange());
|
R_UNLESS(br == size, fs::ResultOutOfRange());
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ReadFile(FileHandle handle, s64 offset, void *buffer, size_t size) {
|
Result ReadFile(FileHandle handle, s64 offset, void *buffer, size_t size) {
|
||||||
return ReadFile(handle, offset, buffer, size, fs::ReadOption::None);
|
R_RETURN(ReadFile(handle, offset, buffer, size, fs::ReadOption::None));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ReadFile(size_t *out, FileHandle handle, s64 offset, void *buffer, size_t size, const fs::ReadOption &option) {
|
Result ReadFile(size_t *out, FileHandle handle, s64 offset, void *buffer, size_t size, const fs::ReadOption &option) {
|
||||||
@ -185,21 +185,21 @@ namespace ams::fs {
|
|||||||
/* Set the output size. */
|
/* Set the output size. */
|
||||||
*out = br;
|
*out = br;
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ReadFile(size_t *out, FileHandle handle, s64 offset, void *buffer, size_t size) {
|
Result ReadFile(size_t *out, FileHandle handle, s64 offset, void *buffer, size_t size) {
|
||||||
return ReadFile(out, handle, offset, buffer, size, fs::ReadOption::None);
|
R_RETURN(ReadFile(out, handle, offset, buffer, size, fs::ReadOption::None));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result GetFileSize(s64 *out, FileHandle handle) {
|
Result GetFileSize(s64 *out, FileHandle handle) {
|
||||||
FIL *fp = GetInternalFile(handle);
|
FIL *fp = GetInternalFile(handle);
|
||||||
*out = f_size(fp);
|
*out = f_size(fp);
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result FlushFile(FileHandle handle) {
|
Result FlushFile(FileHandle handle) {
|
||||||
return TranslateFatFsError(f_sync(GetInternalFile(handle)));
|
R_RETURN(TranslateFatFsError(f_sync(GetInternalFile(handle))));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result WriteFile(FileHandle handle, s64 offset, const void *buffer, size_t size, const fs::WriteOption &option) {
|
Result WriteFile(FileHandle handle, s64 offset, const void *buffer, size_t size, const fs::WriteOption &option) {
|
||||||
@ -218,7 +218,7 @@ namespace ams::fs {
|
|||||||
R_TRY(FlushFile(handle));
|
R_TRY(FlushFile(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result SetFileSize(FileHandle handle, s64 size) {
|
Result SetFileSize(FileHandle handle, s64 size) {
|
||||||
@ -242,7 +242,7 @@ namespace ams::fs {
|
|||||||
/* Check that our expansion succeeded. */
|
/* Check that our expansion succeeded. */
|
||||||
AMS_ASSERT(f_size(fp) == static_cast<FSIZE_t>(size));
|
AMS_ASSERT(f_size(fp) == static_cast<FSIZE_t>(size));
|
||||||
|
|
||||||
return ResultSuccess();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetFileOpenMode(FileHandle handle) {
|
int GetFileOpenMode(FileHandle handle) {
|
||||||
|
@ -106,6 +106,7 @@ SECTIONS
|
|||||||
.debug_code : {
|
.debug_code : {
|
||||||
KEEP (*(.text._ZN3ams3log6PrintfEPKcz .text._ZN3ams3log7VPrintfEPKcSt9__va_list .text._ZN3ams3log4DumpEPKvm))
|
KEEP (*(.text._ZN3ams3log6PrintfEPKcz .text._ZN3ams3log7VPrintfEPKcSt9__va_list .text._ZN3ams3log4DumpEPKvm))
|
||||||
KEEP (*(.text._ZN3ams4util10TVSNPrintfEPcmPKcSt9__va_list .text._ZN3ams4util12_GLOBAL__N_114TVSNPrintfImplEPcmPKcSt9__va_list .text._ZZN3ams4util12_GLOBAL__N_114TVSNPrintfImplEPcmPKcSt9__va_listENKUlbmE3_clEbm))
|
KEEP (*(.text._ZN3ams4util10TVSNPrintfEPcmPKcSt9__va_list .text._ZN3ams4util12_GLOBAL__N_114TVSNPrintfImplEPcmPKcSt9__va_list .text._ZZN3ams4util12_GLOBAL__N_114TVSNPrintfImplEPcmPKcSt9__va_listENKUlbmE3_clEbm))
|
||||||
|
KEEP (*(.text._ZN3ams4util12_GLOBAL__N_1L14TVSNPrintfImplEPcmPKcSt9__va_list .text._ZZN3ams4util12_GLOBAL__N_1L14TVSNPrintfImplEPcmPKcSt9__va_listENKUlbmE_clEbm))
|
||||||
KEEP(secmon_exception_handler.o(.text*))
|
KEEP(secmon_exception_handler.o(.text*))
|
||||||
secmon_exception_handler.o(.rodata*)
|
secmon_exception_handler.o(.rodata*)
|
||||||
secmon_exception_handler.o(.data*)
|
secmon_exception_handler.o(.data*)
|
||||||
|
@ -85,10 +85,10 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
/* We can get away with only including latest because exosphere supports newer-than-expected master key in engine. */
|
/* We can get away with only including latest because exosphere supports newer-than-expected master key in engine. */
|
||||||
/* TODO: Update on next change of keys. */
|
/* TODO: Update on next change of keys. */
|
||||||
/* Mariko Development Master Kek Source. */
|
/* Mariko Development Master Kek Source. */
|
||||||
.byte 0xEC, 0x5E, 0xB5, 0x11, 0xD5, 0x43, 0x1E, 0x6A, 0x4E, 0x54, 0x6F, 0xD4, 0xD3, 0x22, 0xCE, 0x87
|
.byte 0x8C, 0x2E, 0xC1, 0x1C, 0xA0, 0x28, 0x35, 0xFC, 0x9A, 0x9F, 0x1D, 0x9B, 0x4E, 0xDF, 0x1E, 0x03
|
||||||
|
|
||||||
/* Mariko Production Master Kek Source. */
|
/* Mariko Production Master Kek Source. */
|
||||||
.byte 0xD2, 0x68, 0xC6, 0x53, 0x9D, 0x94, 0xF9, 0xA8, 0xA5, 0xA8, 0xA7, 0xC8, 0x8F, 0x53, 0x4B, 0x7A
|
.byte 0x1A, 0x31, 0x62, 0x87, 0xA8, 0x09, 0xCA, 0xF8, 0x69, 0x15, 0x45, 0xC2, 0x6B, 0xAA, 0x5A, 0x8A
|
||||||
|
|
||||||
/* Development Master Key Vectors. */
|
/* Development Master Key Vectors. */
|
||||||
.byte 0x46, 0x22, 0xB4, 0x51, 0x9A, 0x7E, 0xA7, 0x7F, 0x62, 0xA1, 0x1F, 0x8F, 0xC5, 0x3A, 0xDB, 0xFE /* Zeroes encrypted with Master Key 00. */
|
.byte 0x46, 0x22, 0xB4, 0x51, 0x9A, 0x7E, 0xA7, 0x7F, 0x62, 0xA1, 0x1F, 0x8F, 0xC5, 0x3A, 0xDB, 0xFE /* Zeroes encrypted with Master Key 00. */
|
||||||
@ -105,6 +105,12 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0x21, 0x88, 0x6B, 0x10, 0x9E, 0x83, 0xD6, 0x52, 0xAB, 0x08, 0xDB, 0x6D, 0x39, 0xFF, 0x1C, 0x9C /* Master key 0A encrypted with Master key 0B. */
|
.byte 0x21, 0x88, 0x6B, 0x10, 0x9E, 0x83, 0xD6, 0x52, 0xAB, 0x08, 0xDB, 0x6D, 0x39, 0xFF, 0x1C, 0x9C /* Master key 0A encrypted with Master key 0B. */
|
||||||
.byte 0x8A, 0xCE, 0xC4, 0x7F, 0xBE, 0x08, 0x61, 0x88, 0xD3, 0x73, 0x64, 0x51, 0xE2, 0xB6, 0x53, 0x15 /* Master key 0B encrypted with Master key 0C. */
|
.byte 0x8A, 0xCE, 0xC4, 0x7F, 0xBE, 0x08, 0x61, 0x88, 0xD3, 0x73, 0x64, 0x51, 0xE2, 0xB6, 0x53, 0x15 /* Master key 0B encrypted with Master key 0C. */
|
||||||
.byte 0x08, 0xE0, 0xF4, 0xBE, 0xAA, 0x6E, 0x5A, 0xC3, 0xA6, 0xBC, 0xFE, 0xB9, 0xE2, 0xA3, 0x24, 0x12 /* Master key 0C encrypted with Master key 0D. */
|
.byte 0x08, 0xE0, 0xF4, 0xBE, 0xAA, 0x6E, 0x5A, 0xC3, 0xA6, 0xBC, 0xFE, 0xB9, 0xE2, 0xA3, 0x24, 0x12 /* Master key 0C encrypted with Master key 0D. */
|
||||||
|
.byte 0xD6, 0x80, 0x98, 0xC0, 0xFA, 0xC7, 0x13, 0xCB, 0x93, 0xD2, 0x0B, 0x82, 0x4C, 0xA1, 0x7B, 0x8D /* Master key 0D encrypted with Master key 0E. */
|
||||||
|
.byte 0x78, 0x66, 0x19, 0xBD, 0x86, 0xE7, 0xC1, 0x09, 0x9B, 0x6F, 0x92, 0xB2, 0x58, 0x7D, 0xCF, 0x26 /* Master key 0E encrypted with Master key 0F. */
|
||||||
|
.byte 0x39, 0x1E, 0x7E, 0xF8, 0x7E, 0x73, 0xEA, 0x6F, 0xAF, 0x00, 0x3A, 0xB4, 0xAA, 0xB8, 0xB7, 0x59 /* Master key 0F encrypted with Master key 10. */
|
||||||
|
.byte 0x0C, 0x75, 0x39, 0x15, 0x53, 0xEA, 0x81, 0x11, 0xA3, 0xE0, 0xDC, 0x3D, 0x0E, 0x76, 0xC6, 0xB8 /* Master key 10 encrypted with Master key 11. */
|
||||||
|
.byte 0x90, 0x64, 0xF9, 0x08, 0x29, 0x88, 0xD4, 0xDC, 0x73, 0xA4, 0xA1, 0x13, 0x9E, 0x59, 0x85, 0xA0 /* Master key 11 encrypted with Master key 12. */
|
||||||
|
.byte 0x94, 0x46, 0x3B, 0xFA, 0x7D, 0xB9, 0xE2, 0x94, 0xC2, 0x9D, 0xB9, 0xA4, 0xB2, 0x56, 0xCA, 0xFE /* Master key 12 encrypted with Master key 13. */
|
||||||
|
|
||||||
/* Production Master Key Vectors. */
|
/* Production Master Key Vectors. */
|
||||||
.byte 0x0C, 0xF0, 0x59, 0xAC, 0x85, 0xF6, 0x26, 0x65, 0xE1, 0xE9, 0x19, 0x55, 0xE6, 0xF2, 0x67, 0x3D /* Zeroes encrypted with Master Key 00. */
|
.byte 0x0C, 0xF0, 0x59, 0xAC, 0x85, 0xF6, 0x26, 0x65, 0xE1, 0xE9, 0x19, 0x55, 0xE6, 0xF2, 0x67, 0x3D /* Zeroes encrypted with Master Key 00. */
|
||||||
@ -121,6 +127,12 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xC1, 0x8D, 0x16, 0xBB, 0x2A, 0xE4, 0x1D, 0xD4, 0xC2, 0xC1, 0xB6, 0x40, 0x94, 0x35, 0x63, 0x98 /* Master key 0A encrypted with Master key 0B. */
|
.byte 0xC1, 0x8D, 0x16, 0xBB, 0x2A, 0xE4, 0x1D, 0xD4, 0xC2, 0xC1, 0xB6, 0x40, 0x94, 0x35, 0x63, 0x98 /* Master key 0A encrypted with Master key 0B. */
|
||||||
.byte 0xA3, 0x24, 0x65, 0x75, 0xEA, 0xCC, 0x6E, 0x8D, 0xFB, 0x5A, 0x16, 0x50, 0x74, 0xD2, 0x15, 0x06 /* Master key 0B encrypted with Master key 0C. */
|
.byte 0xA3, 0x24, 0x65, 0x75, 0xEA, 0xCC, 0x6E, 0x8D, 0xFB, 0x5A, 0x16, 0x50, 0x74, 0xD2, 0x15, 0x06 /* Master key 0B encrypted with Master key 0C. */
|
||||||
.byte 0x83, 0x67, 0xAF, 0x01, 0xCF, 0x93, 0xA1, 0xAB, 0x80, 0x45, 0xF7, 0x3F, 0x72, 0xFD, 0x3B, 0x38 /* Master key 0C encrypted with Master key 0D. */
|
.byte 0x83, 0x67, 0xAF, 0x01, 0xCF, 0x93, 0xA1, 0xAB, 0x80, 0x45, 0xF7, 0x3F, 0x72, 0xFD, 0x3B, 0x38 /* Master key 0C encrypted with Master key 0D. */
|
||||||
|
.byte 0xB1, 0x81, 0xA6, 0x0D, 0x72, 0xC7, 0xEE, 0x15, 0x21, 0xF3, 0xC0, 0xB5, 0x6B, 0x61, 0x6D, 0xE7 /* Master key 0D encrypted with Master key 0E. */
|
||||||
|
.byte 0xAF, 0x11, 0x4C, 0x67, 0x17, 0x7A, 0x52, 0x43, 0xF7, 0x70, 0x2F, 0xC7, 0xEF, 0x81, 0x72, 0x16 /* Master key 0E encrypted with Master key 0F. */
|
||||||
|
.byte 0x25, 0x12, 0x8B, 0xCB, 0xB5, 0x46, 0xA1, 0xF8, 0xE0, 0x52, 0x15, 0xB7, 0x0B, 0x57, 0x00, 0xBD /* Master key 0F encrypted with Master key 10. */
|
||||||
|
.byte 0x58, 0x15, 0xD2, 0xF6, 0x8A, 0xE8, 0x19, 0xAB, 0xFB, 0x2D, 0x52, 0x9D, 0xE7, 0x55, 0xF3, 0x93 /* Master key 10 encrypted with Master key 11. */
|
||||||
|
.byte 0x4A, 0x01, 0x3B, 0xC7, 0x44, 0x6E, 0x45, 0xBD, 0xE6, 0x5E, 0x2B, 0xEC, 0x07, 0x37, 0x52, 0x86 /* Master key 11 encrypted with Master key 12. */
|
||||||
|
.byte 0x97, 0xE4, 0x11, 0xAB, 0x22, 0x72, 0x1A, 0x1F, 0x70, 0x5C, 0x00, 0xB3, 0x96, 0x30, 0x05, 0x28 /* Master key 12 encrypted with Master key 13. */
|
||||||
|
|
||||||
/* Device Master Key Source Sources. */
|
/* Device Master Key Source Sources. */
|
||||||
.byte 0x8B, 0x4E, 0x1C, 0x22, 0x42, 0x07, 0xC8, 0x73, 0x56, 0x94, 0x08, 0x8B, 0xCC, 0x47, 0x0F, 0x5D /* 4.0.0 Device Master Key Source Source. */
|
.byte 0x8B, 0x4E, 0x1C, 0x22, 0x42, 0x07, 0xC8, 0x73, 0x56, 0x94, 0x08, 0x8B, 0xCC, 0x47, 0x0F, 0x5D /* 4.0.0 Device Master Key Source Source. */
|
||||||
@ -134,6 +146,12 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xAA, 0xFD, 0xBC, 0xBB, 0x25, 0xC3, 0xA4, 0xEF, 0xE3, 0xEE, 0x58, 0x53, 0xB7, 0xF8, 0xDD, 0xD6 /* 12.1.0 Device Master Key Source Source. */
|
.byte 0xAA, 0xFD, 0xBC, 0xBB, 0x25, 0xC3, 0xA4, 0xEF, 0xE3, 0xEE, 0x58, 0x53, 0xB7, 0xF8, 0xDD, 0xD6 /* 12.1.0 Device Master Key Source Source. */
|
||||||
.byte 0xE4, 0xF3, 0x45, 0x6F, 0x18, 0xA1, 0x89, 0xF8, 0xDA, 0x4C, 0x64, 0x75, 0x68, 0xE6, 0xBD, 0x4F /* 13.0.0 Device Master Key Source Source. */
|
.byte 0xE4, 0xF3, 0x45, 0x6F, 0x18, 0xA1, 0x89, 0xF8, 0xDA, 0x4C, 0x64, 0x75, 0x68, 0xE6, 0xBD, 0x4F /* 13.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x5B, 0x94, 0x63, 0xF7, 0xAD, 0x96, 0x1B, 0xA6, 0x23, 0x30, 0x06, 0x4D, 0x01, 0xE4, 0xCE, 0x1D /* 14.0.0 Device Master Key Source Source. */
|
.byte 0x5B, 0x94, 0x63, 0xF7, 0xAD, 0x96, 0x1B, 0xA6, 0x23, 0x30, 0x06, 0x4D, 0x01, 0xE4, 0xCE, 0x1D /* 14.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0x5E, 0xC9, 0xC5, 0x0A, 0xD0, 0x5F, 0x8B, 0x7B, 0xA7, 0x39, 0xEA, 0xBC, 0x60, 0x0F, 0x74, 0xE6 /* 15.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0xEA, 0x90, 0x6E, 0xA8, 0xAE, 0x92, 0x99, 0x64, 0x36, 0xC1, 0xF3, 0x1C, 0xC6, 0x32, 0x83, 0x8C /* 16.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0xDA, 0xB9, 0xD6, 0x77, 0x52, 0x2D, 0x1F, 0x78, 0x73, 0xC9, 0x98, 0x5B, 0x06, 0xFE, 0xA0, 0x52 /* 17.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0x14, 0xF5, 0xA5, 0xD0, 0x73, 0x6D, 0x44, 0x80, 0x5F, 0x31, 0x5A, 0x8F, 0x1E, 0xD4, 0x0D, 0x63 /* 18.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0x07, 0x38, 0x9A, 0xEC, 0x9C, 0xBD, 0x50, 0x4A, 0x4C, 0x1F, 0x04, 0xDA, 0x40, 0x68, 0x29, 0xE3 /* 19.0.0 Device Master Key Source Source. */
|
||||||
|
.byte 0xA3, 0x6B, 0x0A, 0xB5, 0x6F, 0x57, 0x4C, 0x5E, 0x00, 0xFD, 0x56, 0x21, 0xF5, 0x06, 0x6B, 0xD1 /* 20.0.0 Device Master Key Source Source. */
|
||||||
|
|
||||||
/* Development Device Master Kek Sources. */
|
/* Development Device Master Kek Sources. */
|
||||||
.byte 0xD6, 0xBD, 0x9F, 0xC6, 0x18, 0x09, 0xE1, 0x96, 0x20, 0x39, 0x60, 0xD2, 0x89, 0x83, 0x31, 0x34 /* 4.0.0 Device Master Kek Source. */
|
.byte 0xD6, 0xBD, 0x9F, 0xC6, 0x18, 0x09, 0xE1, 0x96, 0x20, 0x39, 0x60, 0xD2, 0x89, 0x83, 0x31, 0x34 /* 4.0.0 Device Master Kek Source. */
|
||||||
@ -147,6 +165,12 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xC4, 0xBB, 0xF3, 0x9F, 0xA3, 0xAA, 0x00, 0x99, 0x7C, 0x97, 0xAD, 0x91, 0x8F, 0xE8, 0x45, 0xCB /* 12.1.0 Device Master Kek Source. */
|
.byte 0xC4, 0xBB, 0xF3, 0x9F, 0xA3, 0xAA, 0x00, 0x99, 0x7C, 0x97, 0xAD, 0x91, 0x8F, 0xE8, 0x45, 0xCB /* 12.1.0 Device Master Kek Source. */
|
||||||
.byte 0x20, 0x20, 0xAA, 0xFB, 0x89, 0xC2, 0xF0, 0x70, 0xB5, 0xE0, 0xA3, 0x11, 0x8A, 0x29, 0x8D, 0x0F /* 13.0.0 Device Master Kek Source. */
|
.byte 0x20, 0x20, 0xAA, 0xFB, 0x89, 0xC2, 0xF0, 0x70, 0xB5, 0xE0, 0xA3, 0x11, 0x8A, 0x29, 0x8D, 0x0F /* 13.0.0 Device Master Kek Source. */
|
||||||
.byte 0xCE, 0x14, 0x74, 0x66, 0x98, 0xA8, 0x6D, 0x7D, 0xBD, 0x54, 0x91, 0x68, 0x5F, 0x1D, 0x0E, 0xEA /* 14.0.0 Device Master Kek Source. */
|
.byte 0xCE, 0x14, 0x74, 0x66, 0x98, 0xA8, 0x6D, 0x7D, 0xBD, 0x54, 0x91, 0x68, 0x5F, 0x1D, 0x0E, 0xEA /* 14.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xAE, 0x05, 0x48, 0x65, 0xAB, 0x17, 0x9D, 0x3D, 0x51, 0xB7, 0x56, 0xBD, 0x9B, 0x0B, 0x5B, 0x6E /* 15.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xFF, 0xF6, 0x4B, 0x0F, 0xFF, 0x0D, 0xC0, 0x4F, 0x56, 0x8A, 0x40, 0x74, 0x67, 0xC5, 0xFE, 0x9F /* 16.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x4E, 0xCE, 0x7B, 0x2A, 0xEA, 0x2E, 0x3D, 0x16, 0xD5, 0x2A, 0xDE, 0xF6, 0xF8, 0x6A, 0x7D, 0x43 /* 17.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x3B, 0x00, 0x89, 0xD7, 0xA9, 0x9E, 0xB7, 0x70, 0x86, 0x00, 0xC3, 0x49, 0x52, 0x8C, 0xA4, 0xAF /* 18.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xAE, 0x78, 0x36, 0xB6, 0x91, 0xEB, 0xAF, 0x9C, 0x18, 0xF1, 0xC0, 0xD5, 0x8A, 0x0C, 0x7C, 0xA1 /* 19.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x09, 0x12, 0x4F, 0x26, 0x90, 0xB9, 0xA6, 0xF5, 0xA5, 0x18, 0x74, 0xB6, 0x8D, 0x80, 0x59, 0x3D /* 20.0.0 Device Master Kek Source. */
|
||||||
|
|
||||||
/* Production Device Master Kek Sources. */
|
/* Production Device Master Kek Sources. */
|
||||||
.byte 0x88, 0x62, 0x34, 0x6E, 0xFA, 0xF7, 0xD8, 0x3F, 0xE1, 0x30, 0x39, 0x50, 0xF0, 0xB7, 0x5D, 0x5D /* 4.0.0 Device Master Kek Source. */
|
.byte 0x88, 0x62, 0x34, 0x6E, 0xFA, 0xF7, 0xD8, 0x3F, 0xE1, 0x30, 0x39, 0x50, 0xF0, 0xB7, 0x5D, 0x5D /* 4.0.0 Device Master Kek Source. */
|
||||||
@ -160,3 +184,9 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xC2, 0x65, 0x34, 0x6E, 0xC7, 0xC6, 0x5D, 0x97, 0x3E, 0x34, 0x5C, 0x6B, 0xB3, 0x7E, 0xC6, 0xE3 /* 12.1.0 Device Master Kek Source. */
|
.byte 0xC2, 0x65, 0x34, 0x6E, 0xC7, 0xC6, 0x5D, 0x97, 0x3E, 0x34, 0x5C, 0x6B, 0xB3, 0x7E, 0xC6, 0xE3 /* 12.1.0 Device Master Kek Source. */
|
||||||
.byte 0x77, 0x52, 0x92, 0xF0, 0xAA, 0xE3, 0xFB, 0xE0, 0x60, 0x16, 0xB3, 0x78, 0x68, 0x53, 0xF7, 0xA8 /* 13.0.0 Device Master Kek Source. */
|
.byte 0x77, 0x52, 0x92, 0xF0, 0xAA, 0xE3, 0xFB, 0xE0, 0x60, 0x16, 0xB3, 0x78, 0x68, 0x53, 0xF7, 0xA8 /* 13.0.0 Device Master Kek Source. */
|
||||||
.byte 0x67, 0xD5, 0xD6, 0x0C, 0x08, 0xF5, 0xA3, 0x11, 0xBD, 0x6D, 0x5A, 0xEB, 0x96, 0x24, 0xB0, 0xD2 /* 14.0.0 Device Master Kek Source. */
|
.byte 0x67, 0xD5, 0xD6, 0x0C, 0x08, 0xF5, 0xA3, 0x11, 0xBD, 0x6D, 0x5A, 0xEB, 0x96, 0x24, 0xB0, 0xD2 /* 14.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x7C, 0x30, 0xED, 0x8B, 0x39, 0x25, 0x2C, 0x08, 0x8F, 0x48, 0xDC, 0x28, 0xE6, 0x1A, 0x6B, 0x49 /* 15.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xF0, 0xF3, 0xFF, 0x52, 0x75, 0x2F, 0xBA, 0x4D, 0x09, 0x72, 0x30, 0x89, 0xA9, 0xDF, 0xFE, 0x1F /* 16.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x21, 0xD6, 0x35, 0xF1, 0x0F, 0x7A, 0xF0, 0x5D, 0xDF, 0x79, 0x1C, 0x7A, 0xE4, 0x32, 0x82, 0x9E /* 17.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xE7, 0x85, 0x8C, 0xA2, 0xF4, 0x49, 0xCB, 0x07, 0xD1, 0x8E, 0x48, 0x1B, 0xE8, 0x1E, 0x28, 0x3B /* 18.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0x9B, 0xA5, 0xFD, 0x74, 0x7F, 0xCD, 0x23, 0xD1, 0xD9, 0xBD, 0x6C, 0x51, 0x72, 0x5F, 0x3D, 0x1F /* 19.0.0 Device Master Kek Source. */
|
||||||
|
.byte 0xDA, 0xFB, 0x61, 0x39, 0x48, 0x2D, 0xC2, 0x7E, 0x0D, 0x8E, 0x8F, 0x98, 0x57, 0x20, 0xB8, 0x15 /* 20.0.0 Device Master Kek Source. */
|
@ -94,7 +94,7 @@ namespace ams::secmon::boot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check that the key generation is one that we can use. */
|
/* Check that the key generation is one that we can use. */
|
||||||
static_assert(pkg1::KeyGeneration_Count == 14);
|
static_assert(pkg1::KeyGeneration_Count == 20);
|
||||||
if (key_generation >= pkg1::KeyGeneration_Count) {
|
if (key_generation >= pkg1::KeyGeneration_Count) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,15 @@ namespace ams::secmon {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PerformUserRebootByPmic() {
|
||||||
|
/* Ensure that i2c-5 is usable for communicating with the pmic. */
|
||||||
|
clkrst::EnableI2c5Clock();
|
||||||
|
i2c::Initialize(i2c::Port_5);
|
||||||
|
|
||||||
|
/* Reboot. */
|
||||||
|
pmic::ShutdownSystem(true);
|
||||||
|
}
|
||||||
|
|
||||||
void PerformUserRebootToRcm() {
|
void PerformUserRebootToRcm() {
|
||||||
/* Configure the bootrom to boot to rcm. */
|
/* Configure the bootrom to boot to rcm. */
|
||||||
reg::Write(PMC + APBDEV_PMC_SCRATCH0, 0x2);
|
reg::Write(PMC + APBDEV_PMC_SCRATCH0, 0x2);
|
||||||
@ -100,11 +109,20 @@ namespace ams::secmon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PerformUserShutDown() {
|
void PerformUserShutDown() {
|
||||||
|
if (fuse::GetSocType() == fuse::SocType_Mariko) {
|
||||||
|
/* Ensure that i2c-5 is usable for communicating with the pmic. */
|
||||||
|
clkrst::EnableI2c5Clock();
|
||||||
|
i2c::Initialize(i2c::Port_5);
|
||||||
|
|
||||||
|
/* On Mariko shutdown via pmic. */
|
||||||
|
pmic::ShutdownSystem(false);
|
||||||
|
} else /* if (fuse::GetSocType() == fuse::SocType_Erista) */ {
|
||||||
/* Load our reboot stub to iram. */
|
/* Load our reboot stub to iram. */
|
||||||
LoadRebootStub(RebootStubAction_ShutDown);
|
LoadRebootStub(RebootStubAction_ShutDown);
|
||||||
|
|
||||||
/* Reboot. */
|
/* Reboot. */
|
||||||
PerformPmcReboot();
|
PerformPmcReboot();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,13 @@ namespace ams::secmon {
|
|||||||
UserRebootType_ToRcm = 1,
|
UserRebootType_ToRcm = 1,
|
||||||
UserRebootType_ToPayload = 2,
|
UserRebootType_ToPayload = 2,
|
||||||
UserRebootType_ToFatalError = 3,
|
UserRebootType_ToFatalError = 3,
|
||||||
|
UserRebootType_ByPmic = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
void PerformUserRebootToRcm();
|
void PerformUserRebootToRcm();
|
||||||
void PerformUserRebootToPayload();
|
void PerformUserRebootToPayload();
|
||||||
void PerformUserRebootToFatalError();
|
void PerformUserRebootToFatalError();
|
||||||
|
void PerformUserRebootByPmic();
|
||||||
void PerformUserShutDown();
|
void PerformUserShutDown();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,7 @@ namespace ams::secmon::smc {
|
|||||||
constexpr const u8 EsCommonKeySources[EsCommonKeyType_Count][AesKeySize] = {
|
constexpr const u8 EsCommonKeySources[EsCommonKeyType_Count][AesKeySize] = {
|
||||||
[EsCommonKeyType_TitleKey] = { 0x1E, 0xDC, 0x7B, 0x3B, 0x60, 0xE6, 0xB4, 0xD8, 0x78, 0xB8, 0x17, 0x15, 0x98, 0x5E, 0x62, 0x9B },
|
[EsCommonKeyType_TitleKey] = { 0x1E, 0xDC, 0x7B, 0x3B, 0x60, 0xE6, 0xB4, 0xD8, 0x78, 0xB8, 0x17, 0x15, 0x98, 0x5E, 0x62, 0x9B },
|
||||||
[EsCommonKeyType_ArchiveKey] = { 0x3B, 0x78, 0xF2, 0x61, 0x0F, 0x9D, 0x5A, 0xE2, 0x7B, 0x4E, 0x45, 0xAF, 0xCB, 0x0B, 0x67, 0x4D },
|
[EsCommonKeyType_ArchiveKey] = { 0x3B, 0x78, 0xF2, 0x61, 0x0F, 0x9D, 0x5A, 0xE2, 0x7B, 0x4E, 0x45, 0xAF, 0xCB, 0x0B, 0x67, 0x4D },
|
||||||
|
[EsCommonKeyType_Unknown2] = { 0x42, 0x64, 0x0B, 0xE3, 0x5F, 0xC6, 0xBE, 0x47, 0xC7, 0xB4, 0x84, 0xC5, 0xEB, 0x63, 0xAA, 0x02 },
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const u8 EsSealKeySource[AesKeySize] = {
|
constexpr const u8 EsSealKeySource[AesKeySize] = {
|
||||||
|
@ -22,6 +22,7 @@ namespace ams::secmon::smc {
|
|||||||
enum EsCommonKeyType {
|
enum EsCommonKeyType {
|
||||||
EsCommonKeyType_TitleKey = 0,
|
EsCommonKeyType_TitleKey = 0,
|
||||||
EsCommonKeyType_ArchiveKey = 1,
|
EsCommonKeyType_ArchiveKey = 1,
|
||||||
|
EsCommonKeyType_Unknown2 = 2,
|
||||||
|
|
||||||
EsCommonKeyType_Count,
|
EsCommonKeyType_Count,
|
||||||
};
|
};
|
||||||
|
@ -52,7 +52,7 @@ namespace ams::secmon::smc {
|
|||||||
[fuse::DramId_IcosaSamsung6GB] = pkg1::MemorySize_6GB,
|
[fuse::DramId_IcosaSamsung6GB] = pkg1::MemorySize_6GB,
|
||||||
[fuse::DramId_HoagHynix1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagHynix1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_AulaHynix1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_AulaHynix1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_Deprecated7] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSansung4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaSansung4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung8GB] = pkg1::MemorySize_8GB,
|
[fuse::DramId_IowaSamsung8GB] = pkg1::MemorySize_8GB,
|
||||||
[fuse::DramId_IowaHynix4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaHynix4GB] = pkg1::MemorySize_4GB,
|
||||||
@ -61,7 +61,7 @@ namespace ams::secmon::smc {
|
|||||||
[fuse::DramId_HoagSamsung8GB] = pkg1::MemorySize_8GB,
|
[fuse::DramId_HoagSamsung8GB] = pkg1::MemorySize_8GB,
|
||||||
[fuse::DramId_HoagHynix4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagHynix4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_HoagMicron4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagMicron4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung4GBY] = pkg1::MemorySize_4GB,
|
[fuse::DramId_Deprecated16] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
[fuse::DramId_IowaSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
||||||
[fuse::DramId_HoagSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
||||||
@ -74,6 +74,12 @@ namespace ams::secmon::smc {
|
|||||||
[fuse::DramId_HoagMicron1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagMicron1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_AulaMicron1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_AulaMicron1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_AulaSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
[fuse::DramId_AulaSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
||||||
|
[fuse::DramId_IowaX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
||||||
|
[fuse::DramId_HoagX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
||||||
|
[fuse::DramId_AulaX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
||||||
|
[fuse::DramId_IowaSamsung4GBY] = pkg1::MemorySize_4GB,
|
||||||
|
[fuse::DramId_HoagSamsung4GBY] = pkg1::MemorySize_4GB,
|
||||||
|
[fuse::DramId_AulaSamsung4GBY] = pkg1::MemorySize_4GB,
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const pkg1::MemoryMode MemoryModes[] = {
|
constexpr const pkg1::MemoryMode MemoryModes[] = {
|
||||||
@ -351,6 +357,9 @@ namespace ams::secmon::smc {
|
|||||||
case UserRebootType_ToFatalError:
|
case UserRebootType_ToFatalError:
|
||||||
PerformUserRebootToFatalError();
|
PerformUserRebootToFatalError();
|
||||||
break;
|
break;
|
||||||
|
case UserRebootType_ByPmic:
|
||||||
|
PerformUserRebootByPmic();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return SmcResult::InvalidArgument;
|
return SmcResult::InvalidArgument;
|
||||||
}
|
}
|
||||||
@ -359,19 +368,18 @@ namespace ams::secmon::smc {
|
|||||||
case UserRebootType_ToFatalError:
|
case UserRebootType_ToFatalError:
|
||||||
PerformUserRebootToFatalError();
|
PerformUserRebootToFatalError();
|
||||||
break;
|
break;
|
||||||
|
case UserRebootType_ByPmic:
|
||||||
|
PerformUserRebootByPmic();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return SmcResult::InvalidArgument;
|
return SmcResult::InvalidArgument;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ConfigItem::ExosphereNeedsShutdown:
|
case ConfigItem::ExosphereNeedsShutdown:
|
||||||
if (soc_type == fuse::SocType_Erista) {
|
|
||||||
if (args.r[3] != 0) {
|
if (args.r[3] != 0) {
|
||||||
PerformUserShutDown();
|
PerformUserShutDown();
|
||||||
}
|
}
|
||||||
} else /* if (soc_type == fuse::SocType_Mariko) */ {
|
|
||||||
return SmcResult::NotSupported;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ConfigItem::ExospherePayloadAddress:
|
case ConfigItem::ExospherePayloadAddress:
|
||||||
if (g_payload_address == 0) {
|
if (g_payload_address == 0) {
|
||||||
|
@ -32,8 +32,8 @@ namespace ams::secmon::smc {
|
|||||||
|
|
||||||
struct PrepareEsDeviceUniqueKeyOption {
|
struct PrepareEsDeviceUniqueKeyOption {
|
||||||
using KeyGeneration = util::BitPack32::Field<0, 6, int>;
|
using KeyGeneration = util::BitPack32::Field<0, 6, int>;
|
||||||
using Type = util::BitPack32::Field<6, 1, EsCommonKeyType>;
|
using Type = util::BitPack32::Field<6, 2, EsCommonKeyType>;
|
||||||
using Reserved = util::BitPack32::Field<7, 25, u32>;
|
using Reserved = util::BitPack32::Field<8, 24, u32>;
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const u8 ModularExponentiateByStorageKeyTable[] = {
|
constexpr const u8 ModularExponentiateByStorageKeyTable[] = {
|
||||||
|
@ -96,7 +96,7 @@ namespace ams::nxboot::loader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size) {
|
void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size) {
|
||||||
/* Create an execute a decompressor. */
|
/* Create and execute a decompressor. */
|
||||||
Lz4Uncompressor(dst, dst_size, src, src_size).Uncompress();
|
Lz4Uncompressor(dst, dst_size, src, src_size).Uncompress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.
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.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user