3.5 KiB
set_mitm
set_mitm is a sysmodule that enables intercepting requests to the system settings service.
Atmosphère Extensions
set_mitm intercepts the GetFirmwareVersion command, if the requester is qlaunch or maintenance.
It modifies the display_version field of the returned system version, causing the version to display
in settings as #.#.# (AMS #.#.#). This allows users to easily verify what version of Atmosphère they are running.
set_mitm also intercepts the GetSettingsItemValueSize and GetSettingsItemValue commands for all requesters.
It does so in order to enable user configuration of system settings, which are parsed from atmosphere/system_settings.ini on boot.
The format for settings is described below.
Atmosphère Settings Format
Settings are parsed from the atmosphere/system_settings.ini file during the boot process. This file is a normal ini file,
with some specific interpretations.
The standard representation of a system setting's identifier takes the form name!key. This is represented within
system_settings.ini as a section name, with an entry key. For example:
[name]
key = ...
System settings can have variable types (strings, integral values, byte arrays, etc). To accommodate this, system_settings.ini
must store values as a type_identifier!value_store pair. A number of different types are supported, with identifiers detailed below.
Please note that a malformed value string will cause a fatal error to occur on boot. A full example of a custom setting is given below
(setting eupld!upload_enabled = 0), for posterity:
[eupld]
upload_enabled = u8!0x0
Supported Types
- Strings
- Type identifiers:
str,string - The value string is used directly as the setting, with null terminator appended.
- Type identifiers:
- Integral types
- Type identifiers:
u8,u16,u32,u64 - The value string is parsed via a call to
strtoul(value, NULL, 0). - Setting bitwidth is determined by the identifier (8 for 1 byte, 16 for 2 bytes, and so on).
- Type identifiers:
- Raw bytes
- Type identifiers:
hex,bytes - The value string is parsed as a hexadecimal string.
- The value string must be of even length, or a fatal error will be thrown on parse.
- Type identifiers:
Atmosphère Custom Settings
At the time of writing, Atmosphère implements two custom settings, found in the atmosphere section.\
While not used for set_mitm, power_menu_reboot_function is loaded and controls the reboot behaviour of the console. By default, this value
is "payload", where the console will automatically reboot into the RCM payload stored in sdmc:/atmosphere/reboot_payload.bin.
(This payload is also used for fatal, upon a serious crash.) Setting the value to "rcm" reboots directly into RCM, and setting the value
to "normal" skips these behaviours.
[atmosphere]
power_menu_reboot_function = str!payload
dmnt_cheats_enabled_by_default controls the behaviour of dmnt's cheat functionality. By default, this value is "0x1", enabling any cheats
defined by the user. Check cheats for more information about Atmosphère's cheat functionality.
[atmosphere]
dmnt_cheats_enabled_by_default = u8!0x1
dmnt_always_save_cheat_toggles controls the behaviour of dmnt's cheat toggle functionality. By default, this value is "0x0", causing toggles to
only be saved on game quit if a toggle file existed on game boot. Check cheats for more information about Atmosphère's cheat functionality.
[atmosphere]
dmnt_always_save_cheat_toggles = u8!0x0