gcc 10 no longer lets you get away with not externing global variables in header files. This adds the necessary extern and adds defines in appropriate c files
exosphere.ini will always be loaded and the values set by it.
User can still choose to override them with the `cal0blank` and `cal0writesys` in a boot entry.
Override keys get a 0 or 1.
By using `BOOT_CFG_AUTOBOOT_EN` in `boot_cfg` and `EXTRA_CFG_NYX_UMS` in `extra_cfg` you can launch UMS from boot.
The `ums` variable must be populated with one of the following:
```
NYX_UMS_SD_CARD 0
NYX_UMS_EMMC_BOOT0 1
NYX_UMS_EMMC_BOOT1 2
NYX_UMS_EMMC_GPP 3
NYX_UMS_EMUMMC_BOOT0 4
NYX_UMS_EMUMMC_BOOT1 5
NYX_UMS_EMUMMC_GPP 6
```
Use the exact same clocks with HOS and utilize low jitter clock parents.
Add back our compatibility mode and the missing timeout clock parent.
Hekate main will continue to use PLLP clock parent for all.
hekate main always runs in compatibility mode (SDR82).
This ensures speed on boot process.
Nyx will first try SDR104.
If the sd card is a sandisk U1 and fails, it will try the compatibility mode.
After that it fallbacks to lower bus speeds.
Both support 1bit mode for broken sd card readers.
Having the new error checking in the sdmmc driver, allows for all that to work.
It can now fail instead of continuing, like how HOS reacts.
Allows more kip names to be added. To use it on them you will need to dump the kips via the Dump pkg1/2 function and then sha256 to get the hash.
The name must be used as is, otherwise the name compare will fail.
Because of that, also allow unordered parsing and gluing.
Using the key `emupath` on a boot entry will load the selected emuMMC.
This can also be forced by using the correct boot cfg storage bit and writing the path at the emummc path offset. Check readme for these.
This can only be used if the emuMMC was created via Nyx. because of the raw_based and file_based files that have emuMMC info.
(emupath=emuMMC/RAW1, emupath=emuMMC/SD00, etc)
This disables low battery monitor shutdown (LBM shutdown) on boot and checks if battery is enough.
The logic is as follows:
If battery is not enough:
- If not charging and 15s pass, it will re enable LBM shutdown and power off.
- If charging, it will wait until it is charged above the limit.
Screen will auto turn off to save power. A press on Power button or a change on charger, will enable it for another 15s.
If battery is enough:
- Enables LBM shutdown and continues with the boot process.
Use key `fss0experimental=1` in a boot entry with `fss0=` defined to enable experimental content.
(Older versions of hekate will just skip any experimental content.)
Additionally disable archive bit fix tool in hekate main to shave binary size.
The archive bit fix in Nyx is the only maintained one and so the only one that should be used.
There is an edge case fixed where the whole would be freed and this would make use of a nullptr.
Additionally, remove usage of reserved names for vars and add comments on how it works.
This fixes the following case:
When force is 0 and the payload is not hekate, the function jumps to the 'is old' check.
This skips the is magic value check and only does the version check.
In case the foreign payload has a low value on that offset, it causes an overwrite which is unneeded.