Atmosphère

Version vom 4. Januar 2020, 15:16 Uhr von ICON (Diskussion | Beiträge) (Flags, KIPs, Speicherstand-Redirection)

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
Atmosphère
Allgemein
Nintendo Switch
Nintendo Switch
Entwickler SciresM, TuxSH, hexkyz, fincs
Kategorie Custom Firmware
Lizenz GPLv2
Links
Download
Website
Atmosphère Version in den Systemeinstellungen: Aktuelle Firmware|Atmosphère-Version|NAND-Typ (S = SysMMC)

Geschichte

  Dieser Abschnitt ist unvollständig. Du kannst uns helfen, indem du die fehlenden Informationen ergänzt.

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.
  • Exoshpè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 System Settings.
      • 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.
    • 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).
    • 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"[7][8] auf der Firmware < 3.0.1.
    • spl: Reimplementierung von Nintendos "Secure Platform Services".
  • Mesosphère: Reimplementierung von Nintendos Kernel.
  • Troposphère: HorizonOS-Patches für Applikationen. Dies ist noch nicht in Atmosphère implementiert.[9]

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 (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)
|   |   +---0100000000000008 (boot2)
|   |   |
|   |   +---010000000000000D (dmnt)
|   |   |
|   |   +---0100000000000032 (eclct.stub)
|   |   |
|   |   +---0100000000000034 (fatal)
|   |   |
|   |   +---0100000000000036 (creport)
|   |   |
|   |   \---0100000000000037 (ro)
|   |
|   +---fatal_errors (Fehlerreports von fatal)
|   +---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

  Dieser Dieser Abschnitt ist unvollständig. Du kannst uns helfen, indem du die fehlenden Informationen ergänzt.

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.

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).
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"

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.

0x0 = deaktiviert, 0x1 = aktiviert

[ro]
Config-Key Wert Beispiel Erklärung
ease_nro_restriction 0x0 oder 0x1 u8!0x0 Weist "ro" an, NROs nicht streng zu überprüfen.

0x0 = deaktiviert, 0x1 = aktiviert

[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 gestartet werden soll. In dem Beispiel nach fünf Sekunden (1338 Millisekunden in Hex = 5000 Millisekunden = 5 Sekunden).

0x0 = Reboote nie automatisch

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.
  • normal = Normaler Reboot in die originale Firmware ohne Atmosphère
  • payload = Startet /atmosphere/reboot_payload.bin (standardmäßig wieder Atmosphère)
  • rcm = Rebootet in den Tegra Recovery Mode, bspw. zum Senden eines Payloads
dmnt_cheats_enabled_by_default 0x0 oder 0x1 0x0 Gibt an, ob alle Cheats standardmäßig aktiviert werden sollen.

0x0 = deaktiviert, 0x1 = aktiviert.
Empfohlen wird "0x0", da es sonst zu Konflikten kommt, wenn alle Cheats eines Spiels auf einmal aktiviert werden (zudem ist es sowieso empfohlen, eine Homebrew wie EdiZon zum Konfigurieren von Cheats zu benutzen).

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.

0x0 = deaktiviert, 0x1 = aktiviert.
Empfohlen wird "0x1", da so der Status von Cheats immer gespeichert wird.

enable_hbl_bis_write 0x0 oder 0x1 0x0 (De-)aktiviert das Schreiben auf die BIS-Partition für Homebrews.

0x0 = deaktiviert, 0x1 = aktiviert.

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).

0x0 = deaktiviert, 0x1 = aktiviert.

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.

0x0 = deaktiviert, 0x1 = aktiviert.
Diese Einstellung ist experimentell und kann mit Datenverlust einhergehen! Das bloße Aktivieren dieser Option leitet noch keine Speicherstände um - dies geschicht per Flags auf Titel-basis, siehe Speicherstand-Redirection.

enable_deprecated_hid_mitm 0x0 oder 0x1 0x1 Aktiviert den hid_mitm-Workaround für alte Homebrews (siehe Komponente -> Stratosphère -> hid_mitm).

0x0 = deaktiviert, 0x1 = aktiviert.
Diese Einstellung wird in Zukunft entfernt!

[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 applet_heap_size nicht auf 0x0 steht!


Sprach- und Regionsemulation

 
Dr. Kawashimas Gehirn-Jogging für Nintendo Switch auf japanisch auf einer deutsch eingestellten Switch

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

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

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.

ams_mitm

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 auf 0x1 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

Einzelnachweise