Atmosphere 1.2.0 (pre-release)

SciresM continue avec les pre-releases pour Atmosphère. Celle-ci apporte beaucoup de changements sous le capot, ce qui risque de provoquer des soucis avec certains homebrews (et qui devront être mis à jour en conséquence). On note surtout le support de la Switch OLED, qui n’aura pas tardé (malgré les difficultés de pose d’une puce sur ce modèle !). Après une petite période d’incubation, si aucun bug majeur n’est remonté, cette pre-release sera officiellement intronisée comme la version « 1.2.0 » officielle.

↓ Nouveautés / Corrections (cliquer pour voir) ↓'

1.2.0 is Atmosphère’s fifty-seventh official release.

Please be sure to update fusee when upgrading to 1.2.0. fusee-primary no longer exists, and will not work any more.

Please note: Atmosphère 1.2.0 is currently in pre-release, and issues may be found that need to be fixed before full release.

  • If any bugs are reported while Atmosphère is in pre-release, they will be fixed and the build will be updated.
  • 1.2.0 will transition to release after a short amount of time has passed without pressing bug reports.

With thanks to the @switchbrew team, Atmosphère 1.2.0 is bundled with hbl 2.4.1, and hbmenu 3.4.1.

The following was changed since the last release:

  • boot was updated to reflect the latest official behavior for display/battery management.
    • This should fix any issues that might result from running older releases on the OLED model, if you’re somehow in a position to do so.
  • The « target firmware » system was changed to allow the bootloader to specify an approximation, rather than the true target firmware.
    • Previously we expected compliant bootloaders to inspect SYSTEM:/ to determine the specific target firmware.
    • Now, we only require an approximate version, with major version == true major version and approximate version <= true version.
    • This greatly simplifies bootloader requirements, and correspondingly all code for accessing SYSTEM has been removed from fusee.
      • This should result in a substantial speedup when booting emummc with fusee, as SYSTEM accesses were the most expensive thing done previously.
    • This should resolve any inconsistency in firmware detection when booting via fusee vs hekate.
    • This should also improve our compatibility with micro firmware releases, making it more likely that atmosphere « just works » if nothing important has changed.
  • Dynamic resource limit determination logic was implemented in pm to match latest official behavior.
    • This greatly simplifies/makes consistent the resource limits on older firmwares, as well.
  • An enormous amount of refactoring was performed under the hood, including:
    • Please Note: If you are a developer who uses Atmosphere-libs, a number of changes here are breaking.
      • Feel free to contact SciresM#524 for help updating your program.
    • The OS namespace had many primitives implemented/made more accurate.
    • Since mesosphere is now always-on, os::LightEvent (which required newer SVCs) is now globally usable (and used by stratosphere where relevant).
    • Assertions are now true no-ops when building for release.
    • Stratosphere is now built with -Wextra/-Werror.
    • Most « common » logic in system module main.cpp files was moved into libstratosphere.
      • Please Note: main.cpp files for prior atmosphere-libs will no longer work, for a really large number of reasons.
    • A number of longstanding code style issues were corrected.
    • Mesosphere now uses util::BitFlagSet for SVC permissions.
    • Mesosphere now puts its relocation table inside .bss, which allows that memory to be reclaimed after relocations are performed.
      • These changes save ~16KB of memory in the kernel, all said and done.
    • A number of locations in stratosphere where memory could be saved were spotted and taken advantage of, leading to ~150-200KB of saved memory.
    • The spl and loader system module was refactored to better reflect official logic.
    • sf ipc server code was updated to only emit mitm/defer logic when that logic is actually required somewhere in process.
    • tipc ipc server code was updated to reflect changes to official logic made in 13.0.0.
    • Many, many other minor changes, please talk to SciresM#524 or read the relevant commits if you want to know more.
  • A number of minor issues were fixed, including:
    • Mesosphere’s handling of SVC permissions on thread pin/unpin was updated to reflect official kernel behavior.
    • util::CountTrailingZeroes() was fixed to calculate the correct value when used at compile-time.
  • General system stability improvements to enhance the user’s experience.

For information on the featureset supported by 1.2, please see the official release notes