Atmosphère
Atmosphère ist eine freie Custom Firmware für die Nintendo Switch. Entwickelt wird sie hauptsächlich von SciresM. Sie ist unter einer freien Lizenz verfügbar und wird aktiv weiterentwickelt.
Atmosphère | |
---|---|
Allgemein | |
Entwickler | SciresM, TuxSH, hexkyz, fincs |
Kategorie | Custom Firmware |
Lizenz | GPLv2 |
Links | |
Download | |
Website |
Geschichte
Im März 2018 gab SciresM bekannt, dass die Custom Firmware "Atmosphère" im Sommer 2018 für alle zu dem Zeitpunkt erhältlichen Switch-Modelle und -Firmware-Versionen erscheinen soll.[1] Die erste öffentliche Version erschien mit etwas Verzögerung im Oktober 2018 als v0.7.[2]
Atmosphère v0.8.5 fügte Cheat-Support hinzu.[3] Seit v0.9.0 wird ein EmuMMC unterstützt.[4].
Komponenten
Atmosphère zielt darauf ab, fast alle System-Komponenten der Switch zu reimplementieren und dabei zu erweitern. Sie heißen dabei:
- Fusée: Bootloader, verifiziert und startet Exosphère und Package2 (Kernel/FIRM-Systemmodule) und patcht diese, falls nötig.
- Sept: Payload zur Schlüsselableitung auf allen Firmware-Versionen >= 7.0.0. Ein Teil von sept ist signiert/verschlüsselt, weshalb es ohne Keys nicht möglich ist, sept selbstständig zu bauen.
- Exosphère: TrustZone mit eigenem Secure Monitor.
- Thermosphère: EmuMMC, lädt den MMC von der SD-Karte um so eine getrennte Umgebung für bspw. Homebrew zu schaffen.
- Stratosphère: Eigene Systemmodule mit neuen Features und zur Erweiterung bestehender.
- ams_mitm: Neues Systemmodul zum on-the-fly Patchen von Dateien und Titeln.
- bpc_mitm: Ermöglicht das Neustarten in einen Payload (bspw. wieder Atmosphère) und das vollständige Herunterfahren, wenn AutoRCM aktiviert ist (siehe AutoRCM#Herunterfahren). Überschreibt den bpc PCV-Service von Nintendo.
- fs_mitm: Kann Dateien von Titeln mit denen auf der SD-Karte ersetzen, auch bekannt als "LayeredFS".
- hid_mitm: Mit der Firmware 9.0.0 wurden die HID-Komponenten für Controller so sehr geändert, dass libnx (die Bibliothek zum Bauen von Switch-Homebrews) keine Controller-Eingaben mehr erkennt. Dieses Problem wurde zwar in neueren libnx-Versionen behoben, allerdings müssen Homebrews mit der neuen libnx-Version neu gebaut werden. Da nicht jede Homebrew sofort aktualisiert wird/werden kann, wurde als Übergang ein temporäres Modul eingeführt, welches das Problem behebt.[5] Da es somit nicht mehr möglich ist, das HID-Modul selbst zu überschreiben, wird dieser Workaround in Zukunft entfernt. Mit Atmosphère v0.10.2 wurde es per Standard deaktiviert.[6] Siehe auch enable_deprecated_hid_mitm. Sollte es in Zukunft entfernt werden, wird SciresM aber einen separaten Download anbieten.[7]
- ns_mitm: Ermöglicht die Verwendung von Web-Applets im Homebrew Menu, wenn eine Anwendung überschrieben wird, da diese erst prüfen, ob es HTML-Inhalte in der Anwendung gibt.
- set_mitm: Verändert die Anzeige der Systemversion (GetFirmwareVersion) (siehe Bild) und liest weitere Einstellungen aus einer INI-Datei. Dabei wird der System-Settings-Service abgefangen.
- boot: Reimplementierung von Nintendos "boot"; initialisiert die Hardware und startet das System.
- boot2: Reimplementierung von Nintendos "boot2"; lädt weitere Prozesse.
- creport: Generiert Absturzberichte auf der SD-Karte und verhindert das Senden dieser an Nintendo
- dmnt: Cheat-Code-Support, inklusive Kompatibilität zu Gateshark. "dmnt" steht dabei für "Debug Monitor".
- eclct.stub: Deaktiviert weitere Telemetrie-Dienste von Nintendo.
- erpt: Reimplementiert Nintendos Error Report Service und verhindert das Anlegen von Crash Reports im MMC
- fatal: Reimplementiert Nintendos fatal und zeigt einen umfangreichen Fehlerbildschirm bei einem fatalen (deshalb der Name) Absturz an. Auch kann die Konsole mit den Lautstärketasten direkt neu gestartet werden.
- loader: Reimplementiert Nintendos "loader" und ermöglicht das Ersetzen von Dateien im ExeFS, das Patchen von NSOs, sowie Button Overrides (bspw.: "R" gedrückt halten, während ein Spiel startet, startet das Homebrew Menu mit vollem RAM-Zugriff).
- ncm: Reimplementierung von Nintendos Content Manager.
- pm: Reimplementierung von Nintendos "Process Manager", gibt u.a. mehr Speicher für Systemmodule frei.
- ro: Reimplementierung von Nintendos RO-Services.
- sm: Reimplementierung von Nintendos "Service Manager". Dieser ist für Entwickler interessant, da so u.a. ein eigener MitM-Service registriert werden kann. Patcht per Standard auch "smhax"[8][9] auf der Firmware < 3.0.1.
- spl: Reimplementierung von Nintendos "Secure Platform Services".
- ams_mitm: Neues Systemmodul zum on-the-fly Patchen von Dateien und Titeln.
- Mesosphère: Reimplementierung von Nintendos Kernel.
- Troposphère: HorizonOS-Patches für Applikationen. Dies ist noch nicht in Atmosphère implementiert.[10]
Ordnerstruktur
Die Inhalte in (kursiven Klammern) dienen der Erklärung
SD-Karte | fusee-primary.bin (Payload, der an die Switch gesendet werden muss, um den Bootprozess einzuleiten) | hbmenu.nro (Homebrew Menu) | +---atmosphere | | fusee-mtc.bin | | fusee-secondary.bin (Signierter/verschlüsselter Fusée-Teil) | | hbl.nsp (Homebrew Loader, der das Homebrew Menü lädt) | | reboot_payload.bin (Reboot-Payload, Kopie von fusee-primary, wird bei einem Neustart ausgeführt) | | | +---config (Konfigurationsdateien) | | BCT.ini (Einstellungen für Exosphère, Stratosphère und fusee-primary) | | | +---config_templates (Konfigurationstemplates, müssen in "config" kopiert werden)' | | override_config.ini (Button-Overrides) | | system_settings.ini (Atmosphère-Einstellungen) | | | +---contents (Ordner für fs_mitm, ersetzt Inhalte in Anwendungen/Modulen, Ordnerinhalte nachfolgend gekürzt) | | +---010000000000000D (dmnt) | | | | | +---010000000000002B (erpt) | | | | | +---010000000000003C (jpegdec) | | | | | +---0100000000000008 (boot2) | | | | | +---0100000000000032 (eclct.stub) | | | | | +---0100000000000034 (fatal) | | | | | +---0100000000000036 (creport) | | | | | \---0100000000000037 (ro) | | | +---fatal_errors (Fehlerreports von fusee-primary) | +---hbl_html (Zum Starten von Web-Applets) | | | \---kip_patches (KIP-Patches) | +---sept (sept) | \---switch (Ordner für Homebrews) reboot_to_payload.nro (Startet /atmosphere/reboot_payload.bin)
Installation
Um Atmosphère zu "installieren" muss lediglich die Release-ZIP auf die SD-Karte entpackt werden. Für die meisten Nutzer werden auch noch die Signatur-Patches empfohlen. Die fusee_primary.bin muss anschließend gestartet werden, bspw. über Fusée Gelée.
Features
Homebrew Menu
Standardmäßig gibt es zwei Möglichkeiten, das Homebrew Menu aufzurufen:
- "R" gedrückt halten, während ein Spiel gestartet wird ("Takeover")
- Das Album starten, ohne "R" gedrückt zu halten ("Applet-Modus")
Letztere Möglichkeit ist nicht empfohlen, da das Homebrew Menu sonst im "Applet-Modus" gestartet wird und nicht den vollen Arbeitsspeicher zur Verfügung stehen hat. Allerdings ist es somit möglich, Homebrews aufzurufen, während ein Spiel läuft (bspw. screen-nx um Screenshots hochzuladen oder EdiZon um Cheats zu erstellen).
Die Tasten-Kombination lässt sich in der "/atmosphere/config/override_config.ini
" festlegen, siehe Button Overrides.
Button Overrides
Mithilfe der Button Overrides (Knopfüberschreibungen) ist es möglich, das Überschreibverhalten des Homebrew Menus zu konfigurieren. So kann bspw. eingestellt werden, dass das Homebrew Menu gestartet werden soll, wenn "Y" gedrückt wird, während das Album gestartet wird.
Mithilfe der Kosmos Toolbox lassen sich die Button Overrides grafisch direkt auf der Konsole bearbeiten.
Zuerst muss die "/atmosphere/config_templates/override_config.ini
" nach "/atmosphere/config/
" kopiert und mit einem Texteditor geöffnet werden. Die Datei ist folgendermaßen aufgebaut:
[hbl_config] | |||
---|---|---|---|
Config-Key | Wert | Beispiel | Erklärung |
program_id_0
|
TITLEID | 010000000000100D
|
Legt einen Titel fest, für den die nachfolgende Tasten-Konfiguration gelten soll (in dem Beispiel das Album), um das Homebrew Menu zu starten. |
override_key_0
|
Taste | R
|
Knopf, der gedrückt gehalten (oder nicht gehalten) werden soll, um das Homebrew Menu zu starten. In dem Beispiel muss "R" gedrückt gehalten werden, während das Album aufgerufen wird. |
program_id_1
|
TITLEID | 0100E95004038000
|
Legt einen weiteren Titel fest, für den die nachfolgende Tasten-Konfiguration gelten soll (in dem Beispiel Xenoblade Chronicles 2) um das Homebrew Menu zu starten. |
override_key_1
|
Taste | !ZL
|
Knopf, der gedrückt gehalten (oder nicht gehalten) werden soll, um das Homebrew Menu zu starten. In dem Beispiel darf "ZL" nicht gedrückt gehalten werden, während Xenoblade Chronicles 2 aufgerufen wird. Wird die Taste dennoch gehalten, wird das Spiel aufgerufen. |
Bis zu acht verschiedene Konfigurationen werden unterstützt (program_id_0 bis program_id_7 bzw. override_key_0 bis override_key_7 ). Wenn "program_id_0 " nicht gesetzt ist, sondern nur "override_key_0 " bezieht sich die Konfiguration aufs Album. "_0 " kann auch weggelassen werden.
| |||
override_any_app
|
true oder false
|
true
|
Bestimmt, ob das Homebrew Menu jeden Titel überschreiben soll, egal ob er oben angegeben ist, oder nicht. |
override_any_app_key
|
Taste | Y
|
Bestimmt, welcher Knopf gedrückt (oder nicht gedrückt) gehalten werden soll, während ein Titel aufgerufen wird (gilt nicht für Applets!), um das Homebrew Menu zu starten, wenn override_any_app auf true steht. In dem Beispiel wird das Homebrew Menu nur aufgerufen, wenn "Y" gedrückt gehalten wird, während ein Spiel gestartet wird. Sind oben spezifische TitleIDs angegeben, sind diese von dieser Konfiguration ausgenommen!Merkhilfe: "Starte das Homebrew Menu wenn Y gedrückt gehalten wird" |
override_key
|
Taste | R
|
Bestimmt, welcher Knopf gedrückt (oder nicht gedrückt) gehalten werden soll, um LayeredFS (Mods) zu aktivieren. Wird in dem Beispiel "X" gedrückt gehalten, wird LayeredFS für diesen Titel deaktiviert. Ist bspw. nur "ZL" eingestellt, werden Mods nur aktiviert, wenn "ZL" gedrückt gehalten wird. Merkhilfe: "Aktiviere LayeredFS, wenn X nicht gedrückt gehalten wird" |
path
|
Pfad zur hbl.nsp | atmosphere/hbl.nsp
|
Pfad zur NSP des Homebrew Loaders |
[default_config] | |||
Config-Key | Wert | Beispiel | Erklärung |
override_key
|
Taste | !X
|
Bestimmt, welcher Knopf gedrückt (oder nicht gedrückt) gehalten werden soll, um LayeredFS (Mods) zu aktivieren. Wird in dem Beispiel "X" gedrückt gehalten, wird LayeredFS für diesen Titel deaktiviert. Ist bspw. nur "ZL" eingestellt, werden Mods nur aktiviert, wenn "ZL" gedrückt gehalten wird. Merkhilfe: "Aktiviere LayeredFS, wenn X nicht gedrückt gehalten wird" |
cheat_enable_key
|
Taste | !B
|
Legt fest, welcher Knopf gedrückt (oder nicht gedrückt) gehalten werden soll, um Cheats zu aktivieren. Wird in dem Beispiel "B" gedrückt gehalten, werden Cheats für diesen Titel deaktiviert. Ist bspw. nur "ZR" eingestellt, werden Cheats nur aktiviert, wenn "ZR" gedrückt gehalten wird. Merkhilfe: "Aktiviere Cheats, wenn B nicht gedrückt gehalten wird" |
Tasten
Folgende Tasten stehen für die Button Overrides zur Verfügung. Soll die Funktionalität umgekehrt werden, muss einfach ein Ausrufezeichen davor gesetzt werden (bspw. !Y
).
Wert in der INI | Steht für |
---|---|
A
|
A-Knopf |
B
|
B-Knopf |
X
|
X-Knopf |
Y
|
Y-Knopf |
LS
|
Linker Stick ("L3") |
RS
|
Rechter Stick ("R3") |
L
|
L-Knopf |
R
|
R-Knopf |
ZL
|
ZL-Knopf |
ZR
|
ZR-Knopf |
PLUS
|
Plus-Knopf |
MINUS
|
Minus-Knopf |
DLEFT
|
Steuerkreuz nach links |
DRIGHT
|
Steuerkreuz nach rechts |
DUP
|
Steuerkreuz nach oben |
DOWN
|
Steuerkreuz nach unten |
SL
|
SL-Knopf (einzelner Joy-Con) |
SR
|
SR-Knopf (einzelner Joy-Con) |
System Settings
In der Datei "/atmosphere/config/system_settings.ini
" lassen sich verschiedene Atmosphère-Einstellungen festlegen. Die Datei kann aus "/atmosphere/config_templates/system_settings.ini
" kopiert werden und ist wie in der Tabelle zu sehen aufgebaut. Dabei steht der Wert vor dem Ausrufezeichen für den Datentyp und der Wert dahinter für den eigentlichen Wert (im Hexadezimalsystem!).
[eupld] | |||
---|---|---|---|
Config-Key | Wert | Beispiel | Erklärung |
upload_enabled
|
0x0 oder 0x1
|
u8!0x0
|
(De-)aktiviert den Telemetrie-Upload zu Nintendo.
|
[ro] | |||
Config-Key | Wert | Beispiel | Erklärung |
ease_nro_restriction
|
0x0 oder 0x1
|
u8!0x0
|
Weist "ro" an, NROs nicht streng zu überprüfen. Darunter fallen Signatur, die Programm-ID und der Typ.[11]
|
[atmosphere] | |||
Config-Key | Wert | Beispiel | Erklärung |
fatal_auto_reboot_interval
|
Unsigned 64-Bit Integer (0x0 bis 0xFFFFFFFFFFFFFFFF )
|
u8!0x1388
|
Gibt die Zeit in Millisekunden an, nach der im "fatal"-Absturzbildschirm (mit dem Atmosphère-Logo) automatisch neu in einen Payload gestartet werden soll. In dem Beispiel nach fünf Sekunden (1388 Millisekunden in Hex = 5000 Millisekunden = 5 Sekunden).
|
power_menu_reboot_function
|
normal , payload ,oder rcm
|
str!payload
|
Bestimmt, wie die Konsole neu gestartet werden soll, wenn "Neu starten" unter "Power-Optionen" im Ausschaltmenü gewählt wird.
|
dmnt_cheats_enabled_by_default
|
0x0 oder 0x1
|
0x0
|
Gibt an, ob alle Cheats standardmäßig aktiviert werden sollen.
|
dmnt_always_save_cheat_toggles
|
0x0 oder 0x1
|
0x1
|
Gibt an, ob der Status von Cheats (aktiviert oder deaktiviert) immer gespeichert werden soll, oder nur, wenn die "Toggle"-Datei (/atmosphere/contents/TITLEID/cheats/toggles.txt ) schon existiert.
|
enable_hbl_bis_write
|
0x0 oder 0x1
|
0x0
|
(De-)aktiviert das Schreiben auf die BIS-Partition für Homebrews.
|
enable_hbl_cal_read
|
0x0 oder 0x1
|
0x0
|
(De-)aktiviert das Lesen der CAL0-Partition für Homebrews (enthält u.a. wichtige konsolenspezifische Schlüssel).
|
fsmitm_redirect_saves_to_sd
|
0x0 oder 0x1
|
0x0
|
Ermöglicht das Speichern von Speicherdaten von Spielen auf die SD-Karte, anstatt auf den internen Speicher der Switch.
|
enable_deprecated_hid_mitm
|
0x0 oder 0x1
|
0x1
|
Aktiviert den hid_mitm-Workaround für alte Homebrews (siehe Komponente -> Stratosphère -> hid_mitm).
|
[hbloader] | |||
Config-Key | Wert | Beispiel | Erklärung |
applet_heap_size
|
Unsigned 64-Bit Integer (0x0 bis 0xFFFFFFFFFFFFFFFF )
|
u8!0x0
|
Gibt die Größe des dynamischen Speichers an, der Homebrews zugewiesen werden soll, wenn diese als Applet (bspw. über das Album) laufen. Wenn dieser Wert auf 0x0 gesetzt wird, wird der ganze Speicher Homebrews zugewiesen.
|
applet_heap_reservation_size
|
Unsigned 64-Bit Integer (0x0 bis 0xFFFFFFFFFFFFFFFF )
|
u8!0x8600000
|
Kontrolliert, wie viel Speicher anderen Applets zur Verfügung stehen soll, während Homebrews im Applet-Modus ausgeführt werden. Hiermiet ist es bspw. möglich, das Tastatur- oder Web-Applet neben einer Homebrew ohne Absturz laufen zu lassen. Der Standard-Wert sind ca. 140 MB. Hat keinen Effekt, wenn |
BCT.ini
Mit der "/atmosphere/config/BCT.ini
" (Boot Configuration Table) lassen sich Einstellungen festlegen, die beim Start des Systems geladen werden müssen und während der Laufzeit nicht verändert werden dürfen. Sie sollten nur von erfahrenen Usern geändert werden![12]
[stage1] | |||
---|---|---|---|
Config-Key | Wert | Beispiel | Erklärung |
stage2_path
|
String | atmosphere/fusee-secondary.bin
|
Pfad zum Stage2-Payload. |
stage2_mtc_path
|
String | atmosphere/fusee-mtc.bin
|
Pfad zum Stage2-MTC-Payload. |
stage2_addr
|
Hexadezimal | 0xF0000000
|
? |
stage2_entrypoint
|
Hexadezimal | 0xF0000000
|
? |
custom_splash
|
String | /atmosphere/bootlogo.bmp
|
Ermöglicht einen eigenen Bootsplash. Das Bild muss eine BMP mit einer Größe von 1280x720 Pixeln sein, welches 90° gegen den Uhrzeigersinn gedreht wurde (sodass die Auflösung am Ende 720x1280 beträgt). Zudem muss es als 32-Bit ARGB exportiert werden - dies ist bspw. mit GIMP möglich. Siehe auch diesen GBATemp-Thread. |
[stratosphere] | |||
Config-Key | Wert | Beispiel | Erklärung |
nogc
|
0 oder 1
|
1
|
Erzwingt das (De-)Aktivieren der NoGC-Patches, welche das Aktualisieren der GameCard-Treiber-Firmware (LOTUS3) verhindern. Dadurch lassen sich auch keine GameCards starten.
|
enable_ncm
|
0 oder 1
|
0
|
Aktiviert Atmosphères eigene NCM-Reimplementierung, die sich u.a. um die Verwaltung von NAND-Speicherständen kümmert. Aus diesem Grund ist dieses Modul zuerst Opt-In, bis es später für jeden aktiviert wird.
|
exosphere.ini
Mit der "/atmosphere/config/exosphere.ini
" lässt sich das Verhalten von Atmosphères Secure Monitor anpassen.[13] Die INI muss vorher aus dem Ordner "/atmosphere/config_templates/
" kopiert werden. Früher befanden sich diese Einstellungen in der BCT.ini.
Config-Key | Wert | Beispiel | Erklärung |
---|---|---|---|
debugmode
|
0 oder 1
|
1
|
Signalisiert dem Kernel, dass der Debugging-Mode aktiv ist. Wenn der Debug-Mode deaktiviert ist, wird eventuell der Debugger in zukünftigen Atmosphère-Versionen nicht mehr funktionieren.
|
debugmode_user
|
0 oder 1
|
0
|
Signalisiert dem Userland, dass der Debugging-Mode aktiv ist.
|
disable_user_exception_handlers
|
0 oder 1
|
0
|
Deaktiviert Exception-Handler im Usermode. Dies sorgt dafür, dass Atmosphère bei Fehlern nicht sauber heruntergefahren wird, weshalb ein Aktivieren dieser Option (also das Deaktivieren der Usermode Exception Handler) nicht empfohlen wird.
|
enable_user_pmu_access
|
0 oder 1
|
0
|
Aktiviert den Zugriff auf die PMU-Register vom Userland aus (Power-Management). Es ist nicht bekannt, was das Aktivieren dieser Option für Auswirkungen auf Spiele, etc. hat.
|
blank_prodinfo_sysmmc
|
0 oder 1
|
0
|
Wenn diese Option aktiviert ist, wird die PRODINFO-Partition mit wichtigen Hardware-Keys und -Zertifikaten "pseudo-gelöscht", sodass das System keine validen Keys und keine Seriennummer mehr erkennt. Es ist nicht bekannt, ob es sicher ist, dies zu nutzen, da diese Infos eventuell anderswo vom System gecached werden. Die eigentliche PRODINFO-Partition wird hierbei nicht angerührt! Auch bekannt als "Incognito".
|
blank_prodinfo_emummc
|
0 oder 1
|
0
|
Gleiches wie oben, nur für den EmuMMC.
|
allow_writing_to_cal_sysmmc
|
0 oder 1
|
0
|
Ermöglicht den Schreibzugriff auf die PRODINFO-Partition für Hoembrews. Ohne ein sicheres Backup ist das Aktivieren nicht empfohlen, weshalb ein verschlüsseltes Backup im MMC angelegt wird. Im EmuMMC ist das Schreiben auf die PRODINFO-Partition immer erlaubt.
|
Sprach- und Regionsemulation
Atmosphère ermöglicht es, einem Spiel eine andere Region und/oder Sprache vorzutäuschen, ohne diese in den Einstellungen ändern zu müssen. Hierzu muss eine Datei im Pfad "/atmosphere/contents/TITLEID/config.ini
" mit folgendem Inhalt erstellt werden:
[override_config]
override_language = SPRACHE
override_region = REGION
Wobei "SPRACHE" und "REGION" durch einen Wert aus den untentstehenden Tabellen ersetzt werden müssen.
Um beispielsweise die Sprache von "Dr. Kawashimas Gehirn-Jogging für Nintendo Switch" auf japanisch zu ändern, muss die Datei "/atmosphere/contents/0100ED000D390000/config.ini
" mit folgendem Inhalt erstellt werden:
[override_config]
override_language = ja
Sprachen
Wert | Steht für |
---|---|
de
|
Deutsch |
en-GB
|
Englisch (Großbritannien) |
en-US
|
Englisch (USA) |
es
|
Spanisch (Europa) |
es-419
|
Spanisch (Lateinamerika und Karibik) |
fr
|
Französisch |
fr-CA
|
Französisch (Kanada) |
it
|
Italienisch |
ja
|
Japanisch |
ko
|
Koreanisch |
nl
|
Niederländisch |
pt
|
Portugiesisch |
ru
|
Russisch |
zh-CN
|
Chinesisch (vereinfacht) |
zh-TW
|
Chinesisch (traditionell) |
zh-Hans
|
Chinesisch (vereinfacht, ist gleich zh-CN) |
zh-Hant
|
Chinesisch (traditionell, ist gleich zh-TW) |
Regionen
Wert | Steht für |
---|---|
aus
|
Australien |
chn
|
China |
eur
|
Europa |
jpn
|
Japan |
kor
|
Südkorea |
twn
|
Taiwan |
usa
|
USA |
Cheats
Atmosphère unterstützt Action-Replay-artige Cheats und ist kompatibel zu Gateshark-Codes. Eine umfangreiche Dokumentation zum Erstellen von Cheats kann im Atmosphère GitHub gefunden werden. Cheats müssen als Textdatei an folgendem Ort auf der SD-Karte platziert werden:
/atmosphere/contents/TITLEID/cheats/BUILD-ID.txt
Die Build-ID des Spiels ist dazu da, Cheats für bestimmte Spiele-Versionen zu unterschieden. EdiZon v4 zeigt bspw. die Build-ID des Spiels an. Fertige Cheats lassen sich per EdiZon oder direkt auf GitHub herunterladen.
Es empfiehlt sich noch, in den System Settings "dmnt_cheats_enabled_by_default" auf "0x0" und "dmnt_always_save_cheat_toggles" auf "0x1" zu setzen, da so Cheats selbst per bspw. EdiZon aktiviert werden können und der Cheat-Status immer gespeichert wird. Letzterer wird unter "/atmosphere/contents/TITLEID/cheats/toggles.txt
" gespeichert.
Standardmäßig werden Cheats aktiviert, wenn ein Spiel gestartet und dabei nicht "L" gedrückt gehalten wird. Dies lässt sich in den Button Overrides unter "cheat_enable_key" ändern.
EmuMMC
Ein EmuMMC ist eine getrennte Umgebung des Systems auf der SD-Karte, in der bspw. nur Homebrew ausgeführt werden kann und der normale SysMMC unangetastet bleibt. Geläufig ist auch der Begriff "EmuNAND".
Die Einrichtung eines EmuMMC ist nicht mit Atmosphère möglich - hierfür muss hekate verwendet werden, welches auch automatisch die Konfigurationsdatei schreibt. Wird hekate als Bootloader genutzt, kann auch bequem in den SysMMC gebootet werden, ohne eine Konfigurationsdatei bearbeiten zu müssen. Ansonsten muss "emummc!enabled = 1
" in der "emummc/emummc.ini
" auf "0" gestellt werden.
erpt
Mithilfe von Atmosphères eigener Reimplementierung von "erpt" (Error Report) werden Crash Reports nicht mehr im System-Speicherstand, sondern auf der SD-Karte im Pfad "/atmosphere/erpt_reports/
" angelegt. Dies verhindert das Hochladen dieser zu Nintendo, wenn die Original Firmware gebootet wird.
fatal
"fatal" ist der Absturzbildschirm der Nintendo Switch. Atmosphère überschreibt diesen Service mit einem eigenen, der die Logs auch auf der SD-Karte unter "/atmosphere/fatal_reports/
", anstatt im Speicher der Switch speichert. So wird auch verhindert, dass eventuelle Fehler-Logs zu Nintendo hochgeladen werden. Auch besteht die Möglichkeit, per "POWER"-Knopf die Konsole normal neu zu starten (nicht in Atmosphère) oder einen Lautstärkeknopf, um den Reboot-Payload zu starten. "fatal_auto_reboot_interval" kann auch auf einen Wert gesetzt werden, um die Konsole automatisch neu in den Reboot-Payload zu starten.
Nicht zu verwechseln mit dem Pfad "/atmosphere/fatal_errors/
", in dem nur Fehlerreports von fusee-primary abgelegt werden.
Reboot-Payload
Unter "/atmosphere/reboot_payload.bin
" kann ein beliebiger Fusée-Gelée-Payload abgelegt werden, der gestartet werden soll, wenn die Konsole neu gestartet wird (falls in den System Settings power_menu_reboot_function
auf payload
steht) oder bei einem Reboot über den Absturzbildschirm "fatal". Auch startet die "reboot_to_payload.nro" diesen Payload. Standardmäßig handelt es sich hierbei lediglich um eine Kopie von "fusee-primary.bin".
KIPs
Atmosphère lädt während des Bootvorgans (über Fusèe) alle Kernel-Module ("KIP"-Dateien) aus "/atmosphere/kips/
" und "/atmosphere/kips/NAME/
", wobei "NAME" durch einen eigenen Namen ersetzt werden kann.
KIP-Patches
Zusätzlich dazu kann Atmosphère auch bestehende Kernel-Module patchen. Hierfür müssen IPS-Patches in folgenden Ordner platziert werden:
/atmosphere/kip_patches/NAME/
Wobei "NAME" durch einen eigenen Namen ersetzt werden muss. Innerhalb dieser Ordner können mehrere IPS-Patches abgelegt werden, die den Dateinamen des SHA256-Hashes der KIP tragen müssen. Dies wird bspw. für Signatur-Patches eingesetzt.
NSO-Patches
NSOs lassen sich ebenfalls on-the-fly patchen. Dies geschieht in folgendem Pfad mithilfe von IPS-Patches:
/atmosphere/exefs_patches/NAME/BUILD-ID.ips
Wobei "NAME" durch einen eigenen Namen ersetzt werden muss. Bei der Build-ID können nachgestellte Nullen weggelassen werden. Hierbei werden die unkomprimierten NSOs gepatcht. NSOs lassen sich mit SciresM hactool entpacken; damit lässt sich auch die Build-ID herausfinden.
ES-Patches werden als NSO-Patches verteilt.
Flags
Mithilfe von "Flags" lässt sich das Verhalten von Atmosphère bei bestimmten Titeln steuern. Dabei handelt es sich lediglich um leere Textdateien, die in "/atmosphere/contents/TITLEID/flags/
" abgelegt werden müssen.
Folgende Flags gibt es:
boot2.flag
: Weist den Process Manager an, diesen Titeln während des Bootvorgangs zu starten (für Systemmodule)redirect_save.flag
: Aktiviert die Speicherstand-Redirection für diesen Titel
LayeredFS
"LayeredFS" ermöglicht es, Dateien von Spielen mit denen aus der SD-Karte auszutauschen, ohne das eigentliche Spiel modifizieren zu müssen. Es ist dabei eine bequeme Art, Spiele-Mods zu nutzen. Das Knopf-Verhalten zum Aktivieren von LayeredFS wird über den "override_key" Button Override gesteuert. Standardmäßig wird LayeredFS immer aktiviert.
ACHTUNG: Der "/atmosphere/contents/
" Ordner hieß früher "/atmosphere/titles/
". Er wird automatisch umbenannt, wenn eine neue Atmosphère-Version gestartet wird.
RomFS
Um Inhalte im RomFS zu ersetzen, platziere sie mit der gleichen Dateistruktur in:
/atmosphere/contents/TITLEID/romfs/
oder als fertig verpacktes RomFS in /atmosphere/contents/TITLEID/romfs.bin
.
HTML-Bedienungsanleitungen
Um die Inhalte in der Bedienungsanleitung zu ändern, platziere sie mit der gleichen Dateistruktur in:
/atmosphere/contents/TITLEID/manual_html/
ExeFS
Um Inhalte im ExeFS zu ersetzen, platziere sie mit der gleichen Dateistruktur in:
/atmosphere/contents/TITLEID/exefs/
oder als fertig verpacktes ExeFS in /atmosphere/contents/TITLEID/exefs.bin
.
Um das Laden einer NSO zu verhindern, muss diese mit dem gleichen Dateinamen plus der Endung ".stub
" im obigen ExeFS-Verzeichnis platziert werden. Also bspw.:
/atmosphere/contents/TITLEID/exefs/main.stub
Speicherstand-Redirection
Speicherstände lassen sich als experimentelles Feature auf die SD-Karte umleiten. Dabei müssen zwei Bedingungen erfüllt sein:
fsmitm_redirect_saves_to_sd
muss in den System Settings auf0x1
gesetzt sein- Der
redirect_save.flag
Flag muss in/atmosphere/contents/TITLEID/flags/
existieren
Speicherstände werden in "/atmosphere/saves/
" abgelegt, getrennt nach Sys- und EmuMMC. Es wird ein neuer Speicherstand erstellt, wenn keiner existiert - es wird also nicht der aus dem internen Speicher kopiert!
Trivia
- SX OS verwendet als Basis Atmosphère (siehe auch SX OS#Kopierter Atmosphère-Code und Lizenzverstoß)
Einzelnachweise
- ↑ Switch: Atmosphère CFW soll im Sommer für alle Switch-Firmware-Versionen erscheinen
- ↑ Atmosphère v0.7 erschienen
- ↑ Atmosphère v0.8.5 mit Cheat-Support
- ↑ Atmosphère v0.9.0 mit experimentellem EmuNAND
- ↑ Atmosphère v0.9.4
- ↑ Atmosphère v0.10.2
- ↑ https://arch.b4k.co/vg/thread/276990665/#277109730 "If it's ever removed (and I don't actually have plans to do so, I just wanted to explicitly reserve that right), I will publish a hid-compat-mitm sysmodule on my personal GitHub that can be used as a standalone. Don't worry, I don't want to leave people without an option. It just kinda sucks that people not using it are paying memory costs equivalent to the whole sm sysmodule."
- ↑ Switch System Flaws#FIRM-package System Modules unter "Service access control bypass"
- ↑ Switch-Firmware 3.0.1 fixt "großen Bug" – Update nicht empfohlen
- ↑ https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/components/troposphere.md
- ↑ https://github.com/Atmosphere-NX/Atmosphere/blob/48b0b2fc46c7331ba3cb9b297475db9e0d82cd66/stratosphere/ro/source/impl/ro_nrr_utils.cpp#L48
- ↑ BCT.md
- ↑ https://github.com/Atmosphere-NX/Atmosphere/blob/prodinfo_memes/config_templates/exosphere.ini