[Switch] Atmosphère 1.12.0 est disponible : support du firmware 23.0.0 et des évolutions internes
L'équipe Atmosphère-NX, amis sunriseurs, vient de publier Atmosphère 1.12.0, la 93e version officielle du custom firmware destiné à la Nintendo Switch. Cette mise à jour intervient avec un changement majeur : la prise en charge du firmware 23.0.0 de Nintendo.
Cette nouvelle version ne se contente pas d'ajouter la compatibilité avec le dernier firmware. Elle apporte également plusieurs modifications profondes au niveau du kernel, du secure monitor, du démarrage de la console et de la gestion de la mémoire.
Atmosphère 1.12.0 intègre hbl 2.4.5 ainsi que hbmenu 3.6.1, cette version apporte le support du firmware 23.0.0, c'est d'ailleurs le changement principal. Plusieurs composants internes d'Atmosphère ont dû être adaptés afin de reproduire le comportement du nouveau système Nintendo.
Le travail réalisé porte notamment sur :
- exosphère, mis à jour pour correspondre au comportement du secure monitor officiel
- mesosphère, adapté aux évolutions du kernel
- boot, avec notamment une correction concernant la gestion de l'arrêt de la batterie via I2C
- loader, erpt, pgl et ro, mis à jour pour refléter les dernières évolutions officielles
Le kernel de la version 23.0.0 prend notamment en charge un espace d'adressage de 42 bits et introduit une nouvelle région mémoire appelée ShadowStack. Le générateur de nombres aléatoires du kernel évolue également vers CTR-DRBG.
Une mémoire encore plus contrainte
L'une des conséquences les plus importantes du firmware 23.0.0 concerne la mémoire disponible pour les modules système personnalisés.
Nintendo a réduit davantage la quantité de mémoire pouvant être récupérée depuis l'applet pool. Atmosphère indique que la marge disponible est désormais inférieure à 7 Mo, ce qui entraîne notamment des plantages lors du lancement de certaines browser applets, comme celles utilisées par l'eShop.
Pour contourner cette limitation, Atmosphère introduit plusieurs patches visant les browser applets.
Depuis la refonte opérée par Nintendo avec le firmware 22.0.0, trois applets principales sont concernées : systemWeb, openWeb et LibAppletOff
Atmosphère peut désormais neutraliser certaines allocations mémoire réservées par ces composants afin de récupérer environ 9 Mo supplémentaires.
D'après les développeurs, cette mémoire est considérée comme inutilisée : les applets la déclarent comme réservée mais n'y accèdent pas réellement.
Avec cette méthode, Atmosphère peut expérimentalement porter la mémoire disponible pour les modules système personnalisés jusqu'à 16 Mo.
Les premiers tests n'ont pas mis en évidence de problème particulier avec le fonctionnement général du système ou des browser applets. Les développeurs demandent néanmoins aux utilisateurs de signaler tout comportement anormal, cette solution pouvant encore être ajustée ou abandonnée si une meilleure approche est trouvée.
Correction de la compression ZBIC
Atmosphère 1.12.0 apporte également une implémentation complète de la compression et décompression ZBIC.
Les applications utilisant ce format devraient désormais pouvoir être lancées et fonctionner correctement.
Autre évolution intéressante : les fichiers NRO peuvent désormais être compressés au format LZ4 Frame, grâce à l'adaptation du composant ro.
Une correction qui concerne potentiellement la batterie
Les développeurs ont également identifié une modification introduite par Nintendo dès le firmware 18.0.0 concernant l'activation de l'arrêt de la batterie via I2C.
Cette modification n'avait pas été correctement reproduite dans Atmosphère jusqu'à présent.
L'équipe indique qu'il est possible que cette différence soit liée à un problème connu de décharge de batterie qui aurait commencé à apparaître autour du firmware 18.0.0. Des tests supplémentaires seront toutefois nécessaires avant de pouvoir établir un lien définitif.
Autres améliorations
Cette version poursuit également le nettoyage interne du code avec l'adoption du macro R_DISCARD dans l'ensemble du projet lorsque cela est pertinent. Cette évolution, commencée avec Atmosphère 1.10.0, permet notamment d'éliminer les avertissements nodiscard lors de la compilation.
Un Dockerfile fait également son apparition dans le projet, grâce au travail d'@alula, afin de faciliter certaines opérations liées à la compilation et au développement.
Enfin, comme à chaque nouvelle version, Atmosphère 1.12.0 embarque diverses corrections destinées à améliorer la stabilité générale du système.
Atmosphère continue son évolution
Avec cette version 1.12.0, Atmosphère démontre une nouvelle fois l'importance du travail réalisé pour suivre les évolutions internes de Nintendo. Le passage au firmware 23.0.0 nécessite plusieurs adaptations profondes, notamment au niveau du kernel et de la gestion de la mémoire.
La situation devient cependant de plus en plus complexe pour les modules système personnalisés, Nintendo réduisant progressivement les marges mémoire disponibles.
Pour les utilisateurs d'Atmosphère qui souhaitent passer au firmware 23.0.0, la mise à jour d'Atmosphère et de fusee est donc indispensable.
Atmosphère 1.12.0 est disponible dès maintenant sur le dépôt officiel du projet.
Téléchargement : Atmosphère 1.12.0