Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Atmosphere Switch: Difference between revisions

From GameBrew
m (Text replacement - "|discussion=" to "|donation=")
No edit summary
Line 4: Line 4:
|description=A work-in-progress customized firmware for the Nintendo Switch.
|description=A work-in-progress customized firmware for the Nintendo Switch.
|author=Atmosphere-NX
|author=Atmosphere-NX
|lastupdated=2023/05/09
|lastupdated=2023/08/22
|type=Custom Firmwares
|type=Custom Firmwares
|version=1.5.3
|version=1.5.5
|license=GPL-2.0
|license=GPL-2.0
|download=https://github.com/Atmosphere-NX/Atmosphere/releases
|download=https://github.com/Atmosphere-NX/Atmosphere/releases
Line 38: Line 38:


==Changelog==
==Changelog==
'''v1.5.5'''
*Support was added for 16.1.0.
*General system stability improvements to enhance the user's experience.
'''v1.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.
'''v1.5.3'''
'''v1.5.3'''
* Support was added for 16.0.3.
* Support was added for 16.0.3.

Revision as of 02:24, 23 August 2023

Atmosphere
Atmospherenx.png
General
AuthorAtmosphere-NX
TypeCustom Firmwares
Version1.5.5
LicenseGPL-2.0
Last Updated2023/08/22
Links
Download
Website
Source

Atmosphère is a custom firmware developed by SciresM.

Recommended guides:

User guide

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.
    • Sept - Payload used to enable support for runtime key derivation on 7.0.0.
  • 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.
  • 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.
  • Troposphère - Application-level Horizon OS patches, used to implement desirable CFW features.

Screenshots

atmospherenx2.png atmospherenx3.png

atmospherenx4.png atmospherenx5.png

Changelog

v1.5.5

  • Support was added for 16.1.0.
  • General system stability improvements to enhance the user's experience.

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

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

v1.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.
  • For information on the featureset supported by 1.5, please see the official release notes.

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

And the following was changed in 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.
      • If you are an impacted developer, please contact SciresM#0524 on discord for assistance.
  • 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.
  • For information on the featureset supported by 1.5, please see the official release notes.

Release notes.

Credits

Atmosphère is currently being developed and maintained by SciresM, TuxSH, hexkyz, and fincs.

In no particular order, we credit the following for their invaluable contributions:

  • switchbrew for the libnx project and the extensive documentation, research and tool development pertaining to the Nintendo Switch.
  • devkitPro for the devkitA64 toolchain and libnx support.
  • ReSwitched Team for additional documentation, research and tool development pertaining to the Nintendo Switch.
  • ChaN for the FatFs module.
  • Marcus Geelnard for the bcl-1.2.0 library.
  • naehrwert and st4rk for the original hekate project and its hwinit code base.
  • CTCaer for the continued hekate project's fork and the minerva_tc project.
  • m4xw for development of the emuMMC project.
  • Riley for suggesting "Atmosphere" as a Horizon OS reimplementation+customization project name.
  • hedgeberg for research and hardware testing.
  • lioncash for code cleanup and general improvements.
  • jaames for designing and providing Atmosphère's graphical resources.
  • Everyone who submitted entries for Atmosphère's splash design contest.
  • All those who actively contribute to the Atmosphère repository.

External links

Advertising: