mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-08-06 07:29:33 +02:00
support 20.1.5
This commit is contained in:
parent
d5ced20ad5
commit
c9762ab802
@ -4,6 +4,7 @@
|
||||
|
||||

|
||||
[](https://discordapp.com/invite/ZdqEhed)
|
||||

|
||||
|
||||
Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
# Changelog
|
||||
## 1.9.1
|
||||
+ Basic support was added for 20.1.0.
|
||||
+ General system stability improvements to enhance the user's experience.
|
||||
## 1.9.0
|
||||
+ Basic support was added for 20.0.0.
|
||||
+ The console should boot and atmosphère should be fully functional. However, not all modules have been fully updated to reflect the latest changes.
|
||||
|
@ -423,41 +423,41 @@ Note that for multiple button combinations, the bitmasks should be OR'd together
|
||||
#### Keypad Values
|
||||
Note: This is the direct output of `hidKeysDown()`.
|
||||
|
||||
+ 000000001: A
|
||||
+ 000000002: B
|
||||
+ 000000004: X
|
||||
+ 000000008: Y
|
||||
+ 000000010: Left Stick Pressed
|
||||
+ 000000020: Right Stick Pressed
|
||||
+ 000000040: L
|
||||
+ 000000080: R
|
||||
+ 000000100: ZL
|
||||
+ 000000200: ZR
|
||||
+ 000000400: Plus
|
||||
+ 000000800: Minus
|
||||
+ 000001000: Left
|
||||
+ 000002000: Up
|
||||
+ 000004000: Right
|
||||
+ 000008000: Down
|
||||
+ 000010000: Left Stick Left
|
||||
+ 000020000: Left Stick Up
|
||||
+ 000040000: Left Stick Right
|
||||
+ 000080000: Left Stick Down
|
||||
+ 000100000: Right Stick Left
|
||||
+ 000200000: Right Stick Up
|
||||
+ 000400000: Right Stick Right
|
||||
+ 000800000: Right Stick Down
|
||||
+ 001000000: SL Left Joy-Con
|
||||
+ 002000000: SR Left Joy-Con
|
||||
+ 004000000: SL Right Joy-Con
|
||||
+ 008000000: SR Right Joy-Con
|
||||
+ 010000000: Top button on Poké Ball Plus (Palma) controller
|
||||
+ 020000000: Verification
|
||||
+ 040000000: B button on Left NES/HVC controller in Handheld mode
|
||||
+ 080000000: Left C button in N64 controller
|
||||
+ 100000000: Up C button in N64 controller
|
||||
+ 200000000: Right C button in N64 controller
|
||||
+ 400000000: Down C button in N64 controller
|
||||
+ 00000000 00000001: A
|
||||
+ 00000000 00000002: B
|
||||
+ 00000000 00000004: X
|
||||
+ 00000000 00000008: Y
|
||||
+ 00000000 00000010: Left Stick Pressed
|
||||
+ 00000000 00000020: Right Stick Pressed
|
||||
+ 00000000 00000040: L
|
||||
+ 00000000 00000080: R
|
||||
+ 00000000 00000100: ZL
|
||||
+ 00000000 00000200: ZR
|
||||
+ 00000000 00000400: Plus
|
||||
+ 00000000 00000800: Minus
|
||||
+ 00000000 00001000: Left
|
||||
+ 00000000 00002000: Up
|
||||
+ 00000000 00004000: Right
|
||||
+ 00000000 00008000: Down
|
||||
+ 00000000 00010000: Left Stick Left
|
||||
+ 00000000 00020000: Left Stick Up
|
||||
+ 00000000 00040000: Left Stick Right
|
||||
+ 00000000 00080000: Left Stick Down
|
||||
+ 00000000 00100000: Right Stick Left
|
||||
+ 00000000 00200000: Right Stick Up
|
||||
+ 00000000 00400000: Right Stick Right
|
||||
+ 00000000 00800000: Right Stick Down
|
||||
+ 00000000 01000000: SL Left Joy-Con
|
||||
+ 00000000 02000000: SR Left Joy-Con
|
||||
+ 00000000 04000000: SL Right Joy-Con
|
||||
+ 00000000 08000000: SR Right Joy-Con
|
||||
+ 00000000 10000000: Top button on Poké Ball Plus (Palma) controller
|
||||
+ 00000000 20000000: Verification
|
||||
+ 00000000 40000000: B button on Left NES/HVC controller in Handheld mode
|
||||
+ 00000000 80000000: Left C button in N64 controller
|
||||
+ 00000001 00000000: Up C button in N64 controller
|
||||
+ 00000002 00000000: Right C button in N64 controller
|
||||
+ 00000004 00000000: Down C button in N64 controller
|
||||
|
||||
### Code Type 0xF0: Double Extended-Width Instruction
|
||||
Code Type 0xF0 signals to the VM to treat the upper three nybbles of the first dword as instruction type, instead of just the upper nybble.
|
||||
|
4
emummc/.gitrepo
vendored
4
emummc/.gitrepo
vendored
@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = https://github.com/m4xw/emummc
|
||||
branch = develop
|
||||
commit = 7522f1f6054a71bdff5beadee0302cead1235be3
|
||||
parent = 0e2ef545f947d24c6add254874ab493ba84bbdc9
|
||||
commit = a8e5f1a184aeb8ba884166a1e4f386088d4a6cf1
|
||||
parent = 409c3cf9e190dbb65fe76570954939cbe8a5eca0
|
||||
method = merge
|
||||
cmdver = 0.4.1
|
||||
|
2
emummc/README.md
vendored
2
emummc/README.md
vendored
@ -2,7 +2,7 @@
|
||||
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
||||
|
||||
### Supported Horizon Versions
|
||||
**1.0.0 - 20.0.0**
|
||||
**1.0.0 - 20.1.0**
|
||||
|
||||
## Features
|
||||
* Arbitrary SDMMC backend selection
|
||||
|
8
emummc/source/FS/FS_offsets.c
vendored
8
emummc/source/FS/FS_offsets.c
vendored
@ -77,6 +77,8 @@
|
||||
#include "offsets/1900_exfat.h"
|
||||
#include "offsets/2000.h"
|
||||
#include "offsets/2000_exfat.h"
|
||||
#include "offsets/2010.h"
|
||||
#include "offsets/2010_exfat.h"
|
||||
#include "../utils/fatal.h"
|
||||
|
||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||
@ -165,6 +167,8 @@ DEFINE_OFFSET_STRUCT(_1900);
|
||||
DEFINE_OFFSET_STRUCT(_1900_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_2000);
|
||||
DEFINE_OFFSET_STRUCT(_2000_EXFAT);
|
||||
DEFINE_OFFSET_STRUCT(_2010);
|
||||
DEFINE_OFFSET_STRUCT(_2010_EXFAT);
|
||||
|
||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||
switch (version) {
|
||||
@ -290,6 +294,10 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||
return &(GET_OFFSET_STRUCT_NAME(_2000));
|
||||
case FS_VER_20_0_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_2000_EXFAT));
|
||||
case FS_VER_20_1_0:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_2010));
|
||||
case FS_VER_20_1_0_EXFAT:
|
||||
return &(GET_OFFSET_STRUCT_NAME(_2010_EXFAT));
|
||||
default:
|
||||
fatal_abort(Fatal_UnknownVersion);
|
||||
}
|
||||
|
3
emummc/source/FS/FS_versions.h
vendored
3
emummc/source/FS/FS_versions.h
vendored
@ -113,6 +113,9 @@ enum FS_VER
|
||||
FS_VER_20_0_0,
|
||||
FS_VER_20_0_0_EXFAT,
|
||||
|
||||
FS_VER_20_1_0,
|
||||
FS_VER_20_1_0_EXFAT,
|
||||
|
||||
FS_VER_MAX,
|
||||
};
|
||||
|
||||
|
59
emummc/source/FS/offsets/2010.h
vendored
Normal file
59
emummc/source/FS/offsets/2010.h
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __FS_2010_H__
|
||||
#define __FS_2010_H__
|
||||
|
||||
// Accessor vtable getters
|
||||
#define FS_OFFSET_2010_SDMMC_ACCESSOR_GC 0x1A7DB0
|
||||
#define FS_OFFSET_2010_SDMMC_ACCESSOR_SD 0x1AA130
|
||||
#define FS_OFFSET_2010_SDMMC_ACCESSOR_NAND 0x1A8560
|
||||
|
||||
// Hooks
|
||||
#define FS_OFFSET_2010_SDMMC_WRAPPER_READ 0x1A3C20
|
||||
#define FS_OFFSET_2010_SDMMC_WRAPPER_WRITE 0x1A3C80
|
||||
#define FS_OFFSET_2010_RTLD 0x2B594
|
||||
#define FS_OFFSET_2010_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||
|
||||
#define FS_OFFSET_2010_CLKRST_SET_MIN_V_CLK_RATE 0x1C6150
|
||||
|
||||
// Misc funcs
|
||||
#define FS_OFFSET_2010_LOCK_MUTEX 0x19CD80
|
||||
#define FS_OFFSET_2010_UNLOCK_MUTEX 0x19CDD0
|
||||
|
||||
#define FS_OFFSET_2010_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1A3BE0
|
||||
#define FS_OFFSET_2010_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1A3C00
|
||||
|
||||
// Misc Data
|
||||
#define FS_OFFSET_2010_SD_MUTEX 0xFF5408
|
||||
#define FS_OFFSET_2010_NAND_MUTEX 0xFF0CF0
|
||||
#define FS_OFFSET_2010_ACTIVE_PARTITION 0xFF0D30
|
||||
#define FS_OFFSET_2010_SDMMC_DAS_HANDLE 0xFD2B08
|
||||
|
||||
// NOPs
|
||||
#define FS_OFFSET_2010_SD_DAS_INIT 0x289F4
|
||||
|
||||
// Nintendo Paths
|
||||
#define FS_OFFSET_2010_NINTENDO_PATHS \
|
||||
{ \
|
||||
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||
}
|
||||
|
||||
#endif // __FS_2010_H__
|
59
emummc/source/FS/offsets/2010_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/2010_exfat.h
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||
* Copyright (c) 2019 Atmosphere-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __FS_2010_EXFAT_H__
|
||||
#define __FS_2010_EXFAT_H__
|
||||
|
||||
// Accessor vtable getters
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_GC 0x1B36D0
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_SD 0x1B5A50
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_ACCESSOR_NAND 0x1B3E80
|
||||
|
||||
// Hooks
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_READ 0x1AF540
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_WRITE 0x1AF5A0
|
||||
#define FS_OFFSET_2010_EXFAT_RTLD 0x2B594
|
||||
#define FS_OFFSET_2010_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C)))
|
||||
|
||||
#define FS_OFFSET_2010_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1D1A70
|
||||
|
||||
// Misc funcs
|
||||
#define FS_OFFSET_2010_EXFAT_LOCK_MUTEX 0x1A86A0
|
||||
#define FS_OFFSET_2010_EXFAT_UNLOCK_MUTEX 0x1A86F0
|
||||
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1AF500
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1AF520
|
||||
|
||||
// Misc Data
|
||||
#define FS_OFFSET_2010_EXFAT_SD_MUTEX 0x1006408
|
||||
#define FS_OFFSET_2010_EXFAT_NAND_MUTEX 0x1001CF0
|
||||
#define FS_OFFSET_2010_EXFAT_ACTIVE_PARTITION 0x1001D30
|
||||
#define FS_OFFSET_2010_EXFAT_SDMMC_DAS_HANDLE 0xFDFB08
|
||||
|
||||
// NOPs
|
||||
#define FS_OFFSET_2010_EXFAT_SD_DAS_INIT 0x289F4
|
||||
|
||||
// Nintendo Paths
|
||||
#define FS_OFFSET_2010_EXFAT_NINTENDO_PATHS \
|
||||
{ \
|
||||
{.opcode_reg = 3, .adrp_offset = 0x0006DB14, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 3, .adrp_offset = 0x0007CE1C, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 4, .adrp_offset = 0x00084A08, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 4, .adrp_offset = 0x0009AE48, .add_rel_offset = 0x00000004}, \
|
||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||
}
|
||||
|
||||
#endif // __FS_2010_EXFAT_H__
|
202
fusee/old_build_package3.py
Normal file
202
fusee/old_build_package3.py
Normal file
@ -0,0 +1,202 @@
|
||||
#!/usr/bin/env python
|
||||
import sys, lz4, hashlib, os
|
||||
from struct import unpack as up, pack as pk
|
||||
|
||||
def lz4_compress(data):
|
||||
try:
|
||||
import lz4.block as block
|
||||
except ImportError:
|
||||
block = lz4.LZ4_compress
|
||||
return block.compress(data, 'high_compression', store_size=False)
|
||||
|
||||
def read_file(fn):
|
||||
with open(fn, 'rb') as f:
|
||||
return f.read()
|
||||
|
||||
def pad(data, size):
|
||||
assert len(data) <= size
|
||||
return (data + b'\x00' * size)[:size]
|
||||
|
||||
def get_overlay(program, i):
|
||||
return program[0x2B000 + 0x14000 * i:0x2B000 + 0x14000 * (i+1)]
|
||||
|
||||
KIP_NAMES = [b'Loader', b'NCM', b'ProcessManager', b'sm', b'boot', b'spl', b'ams_mitm']
|
||||
|
||||
def get_kips(ams_dir, build_out_dir):
|
||||
emummc = read_file(os.path.join(ams_dir, 'emummc/emummc_unpacked.kip'))
|
||||
loader = read_file(os.path.join(ams_dir, 'stratosphere/loader/%s/loader.kip' % build_out_dir))
|
||||
ncm = read_file(os.path.join(ams_dir, 'stratosphere/ncm/%s/ncm.kip' % build_out_dir))
|
||||
pm = read_file(os.path.join(ams_dir, 'stratosphere/pm/%s/pm.kip' % build_out_dir))
|
||||
sm = read_file(os.path.join(ams_dir, 'stratosphere/sm/%s/sm.kip' % build_out_dir))
|
||||
boot = read_file(os.path.join(ams_dir, 'stratosphere/boot/%s/boot.kip' % build_out_dir))
|
||||
spl = read_file(os.path.join(ams_dir, 'stratosphere/spl/%s/spl.kip' % build_out_dir))
|
||||
ams_mitm = read_file(os.path.join(ams_dir, 'stratosphere/ams_mitm/%s/ams_mitm.kip' % build_out_dir))
|
||||
return (emummc, {
|
||||
b'Loader' : loader,
|
||||
b'NCM' : ncm,
|
||||
b'ProcessManager' : pm,
|
||||
b'sm' : sm,
|
||||
b'boot' : boot,
|
||||
b'spl' : spl,
|
||||
b'ams_mitm' : ams_mitm,
|
||||
})
|
||||
|
||||
def write_kip_meta(f, kip, ofs):
|
||||
# Write program id
|
||||
f.write(kip[0x10:0x18])
|
||||
# Write offset, size
|
||||
f.write(pk('<II', ofs - 0x100000, len(kip)))
|
||||
# Write hash
|
||||
f.write(hashlib.sha256(kip).digest())
|
||||
|
||||
def write_header(f, all_kips, wb_size, tk_size, xf_size, ex_size, ms_size, fs_size, rb_size, git_revision, major, minor, micro, relstep, s_major, s_minor, s_micro, s_relstep):
|
||||
# Unpack kips
|
||||
emummc, kips = all_kips
|
||||
# Write magic as PK31 magic.
|
||||
f.write(b'PK31')
|
||||
# Write metadata offset = 0x10
|
||||
f.write(pk('<I', 0x20))
|
||||
# Write flags
|
||||
f.write(pk('<I', 0x00000000))
|
||||
# Write meso_size
|
||||
f.write(pk('<I', ms_size))
|
||||
# Write num_kips
|
||||
f.write(pk('<I', len(KIP_NAMES)))
|
||||
# Write reserved1
|
||||
f.write(b'\xCC' * 0xC)
|
||||
# Write legacy magic
|
||||
f.write(b'FSS0')
|
||||
# Write total size
|
||||
f.write(pk('<I', 0x800000))
|
||||
# Write reserved2
|
||||
f.write(pk('<I', 0xCCCCCCCC))
|
||||
# Write content_header_offset
|
||||
f.write(pk('<I', 0x40))
|
||||
# Write num_content_headers;
|
||||
f.write(pk('<I', 8 + len(KIP_NAMES)))
|
||||
# Write supported_hos_version;
|
||||
f.write(pk('<BBBB', s_relstep, s_micro, s_minor, s_major))
|
||||
# Write release_version;
|
||||
f.write(pk('<BBBB', relstep, micro, minor, major))
|
||||
# Write git_revision;
|
||||
f.write(pk('<I', git_revision))
|
||||
# Write content metas
|
||||
f.write(pk('<IIBBBBI16s', 0x000800, wb_size, 2, 0, 0, 0, 0xCCCCCCCC, b'warmboot'))
|
||||
f.write(pk('<IIBBBBI16s', 0x002000, tk_size, 12, 0, 0, 0, 0xCCCCCCCC, b'tsec_keygen'))
|
||||
f.write(pk('<IIBBBBI16s', 0x004000, xf_size, 11, 0, 0, 0, 0xCCCCCCCC, b'exosphere_fatal'))
|
||||
f.write(pk('<IIBBBBI16s', 0x048000, ex_size, 1, 0, 0, 0, 0xCCCCCCCC, b'exosphere'))
|
||||
f.write(pk('<IIBBBBI16s', 0x056000, ms_size, 10, 0, 0, 0, 0xCCCCCCCC, b'mesosphere'))
|
||||
f.write(pk('<IIBBBBI16s', 0x7C0000, fs_size, 0, 0, 0, 0, 0xCCCCCCCC, b'fusee'))
|
||||
f.write(pk('<IIBBBBI16s', 0x7E0000, rb_size, 3, 0, 0, 0, 0xCCCCCCCC, b'rebootstub'))
|
||||
f.write(pk('<IIBBBBI16s', 0x100000, len(emummc), 8, 0, 0, 0, 0xCCCCCCCC, b'emummc'))
|
||||
ofs = (0x100000 + len(emummc) + 0xF) & ~0xF
|
||||
for kip_name in KIP_NAMES:
|
||||
kip_data = kips[kip_name]
|
||||
f.write(pk('<IIBBBBI16s', ofs, len(kip_data), 6, 0, 0, 0, 0xCCCCCCCC, kip_name))
|
||||
ofs += len(kip_data)
|
||||
ofs += 0xF
|
||||
ofs &= ~0xF
|
||||
# Pad to kip metas.
|
||||
f.write(b'\xCC' * (0x400 - 0x40 - (0x20 * (8 + len(KIP_NAMES)))))
|
||||
# Write emummc_meta. */
|
||||
write_kip_meta(f, emummc, 0x100000)
|
||||
# Write kip metas
|
||||
ofs = (0x100000 + len(emummc) + 0xF) & ~0xF
|
||||
for kip_name in KIP_NAMES:
|
||||
kip_data = kips[kip_name]
|
||||
write_kip_meta(f, kip_data, ofs)
|
||||
ofs += len(kip_data)
|
||||
ofs += 0xF
|
||||
ofs &= ~0xF
|
||||
# Pad to end of header
|
||||
f.write(b'\xCC' * (0x800 - (0x400 + (1 + len(KIP_NAMES)) * 0x30)))
|
||||
|
||||
def write_kips(f, all_kips):
|
||||
# Unpack kips
|
||||
emummc, kips = all_kips
|
||||
# Write emummc
|
||||
f.write(emummc)
|
||||
# Write kips
|
||||
tot = len(emummc)
|
||||
if (tot & 0xF):
|
||||
f.write(b'\xCC' * (0x10 - (tot & 0xF)))
|
||||
tot += 0xF
|
||||
tot &= ~0xF
|
||||
for kip_name in KIP_NAMES:
|
||||
kip_data = kips[kip_name]
|
||||
f.write(kip_data)
|
||||
tot += len(kip_data)
|
||||
if (tot & 0xF):
|
||||
f.write(b'\xCC' * (0x10 - (tot & 0xF)))
|
||||
tot += 0xF
|
||||
tot &= ~0xF
|
||||
# Pad to 3 MB
|
||||
f.write(b'\xCC' * (0x300000 - tot))
|
||||
|
||||
def main(argc, argv):
|
||||
if argc != 13:
|
||||
print('Usage: %s ams_dir build_out_dir build_boot_out_dir revision major minor micro relstep s_major s_minor s_micro s_relstep' % argv[0])
|
||||
return 1
|
||||
# Parse arguments
|
||||
ams_dir = argv[1]
|
||||
build_out_dir = argv[2]
|
||||
build_boot_out_dir = argv[3]
|
||||
revision = int(argv[4][:8], 16)
|
||||
major = int(argv[5])
|
||||
minor = int(argv[6])
|
||||
micro = int(argv[7])
|
||||
relstep = int(argv[8])
|
||||
s_major = int(argv[9])
|
||||
s_minor = int(argv[10])
|
||||
s_micro = int(argv[11])
|
||||
s_relstep = int(argv[12])
|
||||
# Read/parse fusee
|
||||
fusee_program = read_file(os.path.join(ams_dir, 'fusee/program/%s/program.bin' % build_boot_out_dir))
|
||||
fusee_bin = read_file(os.path.join(ams_dir, 'fusee/%s/fusee.bin' % build_boot_out_dir))
|
||||
erista_mtc = get_overlay(fusee_program, 1)
|
||||
mariko_mtc = get_overlay(fusee_program, 2)
|
||||
erista_hsh = hashlib.sha256(erista_mtc[:-4]).digest()[:4]
|
||||
mariko_hsh = hashlib.sha256(mariko_mtc[:-4]).digest()[:4]
|
||||
# Read other files
|
||||
exosphere = read_file(os.path.join(ams_dir, 'exosphere/%s/exosphere.bin' % build_out_dir))
|
||||
warmboot = read_file(os.path.join(ams_dir, 'exosphere/warmboot/%s/warmboot.bin' % build_boot_out_dir))
|
||||
mariko_fatal = read_file(os.path.join(ams_dir, 'exosphere/mariko_fatal/%s/mariko_fatal.bin' % build_out_dir))
|
||||
rebootstub = read_file(os.path.join(ams_dir, 'exosphere/program/rebootstub/%s/rebootstub.bin' % build_boot_out_dir))
|
||||
mesosphere = read_file(os.path.join(ams_dir, 'mesosphere/%s/mesosphere.bin' % build_out_dir))
|
||||
all_kips = get_kips(ams_dir, build_out_dir)
|
||||
tsec_keygen = read_file(os.path.join(ams_dir, 'fusee/program/tsec_keygen/tsec_keygen.bin'))
|
||||
splash_bin = read_file(os.path.join(ams_dir, 'img/splash.bin'))
|
||||
assert len(splash_bin) == 0x3C0000
|
||||
with open(os.path.join(ams_dir, 'fusee/%s/package3' % build_boot_out_dir), 'wb') as f:
|
||||
# Write header
|
||||
write_header(f, all_kips, len(warmboot), len(tsec_keygen), len(mariko_fatal), len(exosphere), len(mesosphere), len(fusee_bin), len(rebootstub), revision, major, minor, micro, relstep, s_major, s_minor, s_micro, s_relstep)
|
||||
# Write warmboot
|
||||
f.write(pad(warmboot, 0x1800))
|
||||
# Write TSEC Keygen
|
||||
f.write(pad(tsec_keygen, 0x2000))
|
||||
# Write Mariko Fatal
|
||||
f.write(pad(mariko_fatal, 0x1C000))
|
||||
# Write Erista MTC
|
||||
f.write(erista_mtc[:-4] + erista_hsh)
|
||||
# Write Mariko MTC
|
||||
f.write(mariko_mtc[:-4] + mariko_hsh)
|
||||
# Write exosphere
|
||||
f.write(pad(exosphere, 0xE000))
|
||||
# Write mesosphere
|
||||
f.write(pad(mesosphere, 0xAA000))
|
||||
# Write kips
|
||||
write_kips(f, all_kips)
|
||||
# Write Splash Screen
|
||||
f.write(splash_bin)
|
||||
# Write fusee
|
||||
f.write(pad(fusee_bin, 0x20000))
|
||||
# Write rebootstub
|
||||
f.write(pad(rebootstub, 0x1000))
|
||||
# Pad to 8 MB
|
||||
f.write(b'\xCC' * (0x800000 - 0x7E1000))
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(len(sys.argv), sys.argv))
|
1338
fusee/program/program/fusee_stratosphere.cpp
Normal file
1338
fusee/program/program/fusee_stratosphere.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -183,6 +183,9 @@ namespace ams::nxboot {
|
||||
FsVersion_20_0_0,
|
||||
FsVersion_20_0_0_Exfat,
|
||||
|
||||
FsVersion_20_1_0,
|
||||
FsVersion_20_1_0_Exfat,
|
||||
|
||||
FsVersion_Count,
|
||||
};
|
||||
|
||||
@ -278,6 +281,9 @@ namespace ams::nxboot {
|
||||
|
||||
{ 0x63, 0x54, 0x96, 0x9E, 0x60, 0xA7, 0x97, 0x7B }, /* FsVersion_20_0_0 */
|
||||
{ 0x47, 0x41, 0x07, 0x10, 0x65, 0x4F, 0xA4, 0x3F }, /* FsVersion_20_0_0_Exfat */
|
||||
|
||||
{ 0xED, 0x34, 0xB4, 0x50, 0x58, 0x4A, 0x5B, 0x43 }, /* FsVersion_20_1_0 */
|
||||
{ 0xA5, 0x1A, 0xA4, 0x92, 0x6C, 0x41, 0x87, 0x59 }, /* FsVersion_20_1_0_Exfat */
|
||||
};
|
||||
|
||||
const InitialProcessBinaryHeader *FindInitialProcessBinary(const pkg2::Package2Header *header, const u8 *data, ams::TargetFirmware target_firmware) {
|
||||
@ -497,6 +503,235 @@ namespace ams::nxboot {
|
||||
0xE0, 0x03, 0x1F, 0x2A, 0xC0, 0x03, 0x5F, 0xD6,
|
||||
};
|
||||
|
||||
constexpr const u8 NoNcaHeaderSignatureCheckPatch0[] = {
|
||||
0x1F, 0x20, 0x03, 0xD5,
|
||||
};
|
||||
|
||||
constexpr const u8 NoNcaHeaderSignatureCheckPatch1[] = {
|
||||
0xE0, 0x03, 0x1F, 0x2A,
|
||||
};
|
||||
|
||||
void AddNoNcaHeaderSignatureCheckPatches(InitialProcessMeta *fs_meta, FsVersion fs_version) {
|
||||
switch (fs_version) {
|
||||
case FsVersion_1_0_0:
|
||||
AddPatch(fs_meta, 0x019568, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0195A0, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x031208, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x03A89C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_2_0_0:
|
||||
case FsVersion_2_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x015E5C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x015EF4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x032C30, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x03F820, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_2_1_0:
|
||||
case FsVersion_2_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x015FCC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x016064, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x033008, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x03FBF8, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_3_0_0:
|
||||
case FsVersion_3_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x018E8C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x018F24, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0374BC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x049FC8, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_3_0_1:
|
||||
case FsVersion_3_0_1_Exfat:
|
||||
AddPatch(fs_meta, 0x018EF8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x018F90, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x037528, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x04A034, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_4_0_0:
|
||||
case FsVersion_4_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x01C564, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x01C5FC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x01E1DC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x057A34, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_4_1_0:
|
||||
case FsVersion_4_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x01C564, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x01C5FC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x01E1DC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x057A34, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_5_0_0:
|
||||
case FsVersion_5_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x022E68, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x022EDC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0259C4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07D590, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_5_1_0:
|
||||
case FsVersion_5_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x022E98, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x022F0C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0259F4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07D960, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_6_0_0:
|
||||
AddPatch(fs_meta, 0x071334, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0713A8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x081884, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0EB18C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_6_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x07CA34, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07CAA8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x081884, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0F688C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_7_0_0:
|
||||
AddPatch(fs_meta, 0x074AF4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x074B2C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07A968, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0F26E4, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_7_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x0800A4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0800DC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x085F18, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0FDC94, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_8_0_0:
|
||||
AddPatch(fs_meta, 0x0763D4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07640C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07C4C8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0F4AA4, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_8_1_0:
|
||||
AddPatch(fs_meta, 0x0763D4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07640C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x07C4C8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0F4AA4, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_8_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x081984, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0819BC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x087A78, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x100054, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_8_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x081984, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0819BC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x087A78, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x100054, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_9_0_0:
|
||||
case FsVersion_9_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x061F54, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x061F8C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0679DC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0CA140, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_9_1_0:
|
||||
case FsVersion_9_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x061F64, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x061F9C, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0679EC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0CA150, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_10_0_0:
|
||||
case FsVersion_10_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x0774BC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0DC120, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_10_2_0:
|
||||
case FsVersion_10_2_0_Exfat:
|
||||
AddPatch(fs_meta, 0x0774BC, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0DC580, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_11_0_0:
|
||||
case FsVersion_11_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x079378, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0E3014, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_12_0_0:
|
||||
case FsVersion_12_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x07A020, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0EBE28, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_12_0_3:
|
||||
case FsVersion_12_0_3_Exfat:
|
||||
AddPatch(fs_meta, 0x07A130, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0EBF38, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
case FsVersion_13_0_0:
|
||||
case FsVersion_13_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x07AFC8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0EF420, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_13_1_0:
|
||||
case FsVersion_13_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x07AFC8, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x0EF420, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_14_0_0:
|
||||
AddPatch(fs_meta, 0x079D00, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x1282CC, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_14_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x079D00, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x13364C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_15_0_0:
|
||||
AddPatch(fs_meta, 0x06ECA4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x120EEC, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_15_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x06ECA4, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x12BE7C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_16_0_0:
|
||||
AddPatch(fs_meta, 0x06F804, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x148C2C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_16_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x06F804, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x15390C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_16_0_3:
|
||||
AddPatch(fs_meta, 0x06F854, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x148C7C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_16_0_3_Exfat:
|
||||
AddPatch(fs_meta, 0x06F854, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
AddPatch(fs_meta, 0x15385C, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_17_0_0:
|
||||
case FsVersion_17_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x024254, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
AddPatch(fs_meta, 0x073C04, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
break;
|
||||
case FsVersion_18_0_0:
|
||||
case FsVersion_18_0_0_Exfat:
|
||||
case FsVersion_18_1_0:
|
||||
case FsVersion_18_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x0246F4, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
AddPatch(fs_meta, 0x0744BC, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
break;
|
||||
case FsVersion_19_0_0:
|
||||
case FsVersion_19_0_0_Exfat:
|
||||
AddPatch(fs_meta, 0x021578, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
AddPatch(fs_meta, 0x0746A0, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
break;
|
||||
case FsVersion_20_0_0:
|
||||
case FsVersion_20_0_0_Exfat:
|
||||
case FsVersion_20_1_0:
|
||||
case FsVersion_20_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x023C88, NoNcaHeaderSignatureCheckPatch0, sizeof(NoNcaHeaderSignatureCheckPatch0));
|
||||
AddPatch(fs_meta, 0x07A880, NoNcaHeaderSignatureCheckPatch1, sizeof(NoNcaHeaderSignatureCheckPatch1));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AddNogcPatches(InitialProcessMeta *fs_meta, FsVersion fs_version) {
|
||||
switch (fs_version) {
|
||||
case FsVersion_1_0_0:
|
||||
@ -668,11 +903,13 @@ namespace ams::nxboot {
|
||||
AddPatch(fs_meta, 0x17A9A0, NogcPatch1, sizeof(NogcPatch1));
|
||||
break;
|
||||
case FsVersion_20_0_0:
|
||||
case FsVersion_20_1_0:
|
||||
AddPatch(fs_meta, 0x1A7E25, NogcPatch0, sizeof(NogcPatch0));
|
||||
AddPatch(fs_meta, 0x1A8025, NogcPatch0, sizeof(NogcPatch0));
|
||||
AddPatch(fs_meta, 0x17C250, NogcPatch1, sizeof(NogcPatch1));
|
||||
break;
|
||||
case FsVersion_20_0_0_Exfat:
|
||||
case FsVersion_20_1_0_Exfat:
|
||||
AddPatch(fs_meta, 0x1B3745, NogcPatch0, sizeof(NogcPatch0));
|
||||
AddPatch(fs_meta, 0x1B3945, NogcPatch0, sizeof(NogcPatch0));
|
||||
AddPatch(fs_meta, 0x187B70, NogcPatch1, sizeof(NogcPatch1));
|
||||
@ -869,6 +1106,8 @@ namespace ams::nxboot {
|
||||
AddNogcPatches(fs_meta, fs_version);
|
||||
}
|
||||
|
||||
AddNoNcaHeaderSignatureCheckPatches(fs_meta, fs_version);
|
||||
|
||||
/* TODO ams.tma2: add mount_host patches. */
|
||||
}
|
||||
|
||||
|
BIN
img/np++.png
Normal file
BIN
img/np++.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
img/splash.bin
BIN
img/splash.bin
Binary file not shown.
BIN
img/splash.png
BIN
img/splash.png
Binary file not shown.
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 150 KiB |
@ -1,44 +1,30 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720" xmlns:xlink="http://www.w3.org/1999/xlink" style="background:#141932">
|
||||
<defs>
|
||||
<linearGradient id="a" x1="50.142%" x2="50.142%" y1="100%" y2="0%">
|
||||
<stop stop-color="#3952A8" offset="0%"/>
|
||||
<stop stop-color="#36378C" stop-opacity=".529" offset="51.507%"/>
|
||||
<stop stop-color="#151A32" stop-opacity=".097" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path id="b" d="M-3.41060513e-13,633.731488 C210.281502,611.434419 423.805425,600 640,600 C856.194575,600 1069.7185,611.434419 1280,633.731488 L1280,720 L0,720 L0,633.731488 Z"/>
|
||||
<linearGradient id="c" x1="39.803%" x2="39.803%" y1="59.878%" y2="121.158%">
|
||||
<stop stop-color="#FFFFFF" offset="0%"/>
|
||||
<stop stop-color="#9FC1DB" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="d" x1="50%" x2="25.242%" y1="0%" y2="111.09%">
|
||||
<stop stop-color="#90B9D9" offset="0%"/>
|
||||
<stop stop-color="#554BBA" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g fill="#8089CA" transform="translate(36 30)" opacity=".504">
|
||||
<path d="M948.35504 33.2853938C953.45168 33.9569767 956 34.6951788 956 35.5 956 36.3048214 953.451678 37.0430237 948.355035 37.7146068L948.355036 37.7146091C946.981681 37.8955757 945.910793 38.9933097 945.763879 40.3707235 945.079178 46.7902412 944.324552 50 943.5 50 942.675448 50 941.920821 46.790238 941.23612 40.370714L941.236111 40.370715C941.089198 38.9933041 940.018312 37.8955725 938.64496 37.7146062 933.54832 37.0430233 931 36.3048212 931 35.5 931 34.6951786 933.548322 33.9569763 938.644965 33.2853932L938.644964 33.2853909C940.018319 33.1044243 941.089207 32.0066903 941.236121 30.6292765 941.920822 24.2097588 942.675448 21 943.5 21 944.324552 21 945.079179 24.209762 945.76388 30.629286L945.763889 30.629285C945.910802 32.0066959 946.981688 33.1044275 948.35504 33.2853938zM177.35504 118.285394C182.45168 118.956977 185 119.695179 185 120.5 185 121.304821 182.451678 122.043024 177.355035 122.714607L177.355036 122.714609C175.981681 122.895576 174.910793 123.99331 174.763879 125.370724 174.079178 131.790241 173.324552 135 172.5 135 171.675448 135 170.920821 131.790238 170.23612 125.370714L170.236111 125.370715C170.089198 123.993304 169.018312 122.895572 167.64496 122.714606 162.54832 122.043023 160 121.304821 160 120.5 160 119.695179 162.548322 118.956976 167.644965 118.285393L167.644964 118.285391C169.018319 118.104424 170.089207 117.00669 170.236121 115.629276 170.920822 109.209759 171.675448 106 172.5 106 173.324552 106 174.079179 109.209762 174.76388 115.629286L174.763889 115.629285C174.910802 117.006696 175.981688 118.104428 177.35504 118.285394zM78.1319455 270.326734C82.0439818 270.987238 84 271.711659 84 272.5 84 273.288339 82.0439884 274.01276 78.1319651 274.673262L78.1319626 274.673248C76.8725782 274.885881 75.8858984 275.872561 75.6732656 277.131946 75.0127624 281.043982 74.2883406 283 73.5 283 72.7116607 283 71.98724 281.043988 71.3267377 277.131965L71.3267523 277.131963C71.114119 275.872578 70.1274389 274.885898 68.8680545 274.673266 64.9560182 274.012762 63 273.288341 63 272.5 63 271.711661 64.9560116 270.98724 68.8680349 270.326738L68.8680374 270.326752C70.1274218 270.114119 71.1141016 269.127439 71.3267344 267.868054 71.9872376 263.956018 72.7116594 262 73.5 262 74.2883393 262 75.01276 263.956012 75.6732623 267.868035L75.6732477 267.868037C75.885881 269.127422 76.8725611 270.114102 78.1319455 270.326734zM426.131946 8.3267344C430.043982 8.98723756 432 9.71165943 432 10.5 432 11.2883393 430.043988 12.01276 426.131965 12.6732623L426.131963 12.6732477C424.872578 12.885881 423.885898 13.8725611 423.673266 15.1319455 423.012762 19.0439818 422.288341 21 421.5 21 420.711661 21 419.98724 19.0439884 419.326738 15.1319651L419.326752 15.1319626C419.114119 13.8725782 418.127439 12.8858984 416.868054 12.6732656 412.956018 12.0127624 411 11.2883406 411 10.5 411 9.71166074 412.956012 8.98723998 416.868035 8.32673769L416.868037 8.32675227C418.127422 8.11411902 419.114102 7.1274389 419.326734 5.86805448 419.987238 1.95601816 420.711659 0 421.5 0 422.288339 0 423.01276 1.95601165 423.673262 5.86803495L423.673248 5.86803741C423.885881 7.12742176 424.872561 8.11410155 426.131946 8.3267344zM1134.13195 133.326734C1138.04398 133.987238 1140 134.711659 1140 135.5 1140 136.288339 1138.04399 137.01276 1134.13197 137.673262L1134.13196 137.673248C1132.87258 137.885881 1131.8859 138.872561 1131.67327 140.131946 1131.01276 144.043982 1130.28834 146 1129.5 146 1128.71166 146 1127.98724 144.043988 1127.32674 140.131965L1127.32675 140.131963C1127.11412 138.872578 1126.12744 137.885898 1124.86805 137.673266 1120.95602 137.012762 1119 136.288341 1119 135.5 1119 134.711661 1120.95601 133.98724 1124.86803 133.326738L1124.86804 133.326752C1126.12742 133.114119 1127.1141 132.127439 1127.32673 130.868054 1127.98724 126.956018 1128.71166 125 1129.5 125 1130.28834 125 1131.01276 126.956012 1131.67326 130.868035L1131.67325 130.868037C1131.88588 132.127422 1132.87256 133.114102 1134.13195 133.326734zM1187.13195 320.326734C1191.04398 320.987238 1193 321.711659 1193 322.5 1193 323.288339 1191.04399 324.01276 1187.13197 324.673262L1187.13196 324.673248C1185.87258 324.885881 1184.8859 325.872561 1184.67327 327.131946 1184.01276 331.043982 1183.28834 333 1182.5 333 1181.71166 333 1180.98724 331.043988 1180.32674 327.131965L1180.32675 327.131963C1180.11412 325.872578 1179.12744 324.885898 1177.86805 324.673266 1173.95602 324.012762 1172 323.288341 1172 322.5 1172 321.711661 1173.95601 320.98724 1177.86803 320.326738L1177.86804 320.326752C1179.12742 320.114119 1180.1141 319.127439 1180.32673 317.868054 1180.98724 313.956018 1181.71166 312 1182.5 312 1183.28834 312 1184.01276 313.956012 1184.67326 317.868035L1184.67325 317.868037C1184.88588 319.127422 1185.87256 320.114102 1187.13195 320.326734z"/>
|
||||
<path d="M345.75138,198.258283 C348.931003,198.793842 350.520815,199.381353 350.520815,200.020815 C350.520815,200.660277 348.931006,201.247787 345.751389,201.783346 L345.751388,201.783339 C344.743132,201.953165 343.953173,202.743125 343.783347,203.75138 C343.247789,206.931003 342.660278,208.520815 342.020815,208.520815 C341.381353,208.520815 340.793843,206.931006 340.258285,203.751389 L340.258291,203.751388 C340.088466,202.743132 339.298506,201.953173 338.290251,201.783347 C335.110627,201.247789 333.520815,200.660278 333.520815,200.020815 C333.520815,199.381353 335.110624,198.793843 338.290242,198.258285 L338.290243,198.258291 C339.298498,198.088466 340.088458,197.298506 340.258283,196.290251 C340.793842,193.110627 341.381353,191.520815 342.020815,191.520815 C342.660277,191.520815 343.247787,193.110624 343.783346,196.290242 L343.783339,196.290243 C343.953165,197.298498 344.743125,198.088458 345.75138,198.258283 Z" transform="rotate(45 342.02 200.02)"/>
|
||||
<path d="M15.7513799,33.2582831 C18.9310035,33.793842 20.5208153,34.3813527 20.5208153,35.0208153 C20.5208153,35.6602772 18.9310065,36.2477874 15.7513888,36.7833459 L15.7513877,36.7833393 C14.7431324,36.9531646 13.9531726,37.7431246 13.7833474,38.7513799 C13.2477885,41.9310035 12.6602778,43.5208153 12.0208153,43.5208153 C11.3813533,43.5208153 10.7938431,41.9310065 10.2582846,38.7513888 L10.2582913,38.7513877 C10.0884659,37.7431324 9.29850601,36.9531726 8.29025065,36.7833474 C5.11062707,36.2477885 3.52081528,35.6602778 3.52081528,35.0208153 C3.52081528,34.3813533 5.1106241,33.7938431 8.29024173,33.2582846 L8.29024285,33.2582913 C9.29849818,33.0884659 10.088458,32.298506 10.2582831,31.2902507 C10.793842,28.1106271 11.3813527,26.5208153 12.0208153,26.5208153 C12.6602772,26.5208153 13.2477874,28.1106241 13.7833459,31.2902417 L13.7833393,31.2902429 C13.9531646,32.2984982 14.7431246,33.088458 15.7513799,33.2582831 Z" transform="rotate(45 12.02 35.02)"/>
|
||||
<path d="M869.75138,213.258283 C872.931003,213.793842 874.520815,214.381353 874.520815,215.020815 C874.520815,215.660277 872.931006,216.247787 869.751389,216.783346 L869.751388,216.783339 C868.743132,216.953165 867.953173,217.743125 867.783347,218.75138 C867.247789,221.931003 866.660278,223.520815 866.020815,223.520815 C865.381353,223.520815 864.793843,221.931006 864.258285,218.751389 L864.258291,218.751388 C864.088466,217.743132 863.298506,216.953173 862.290251,216.783347 C859.110627,216.247789 857.520815,215.660278 857.520815,215.020815 C857.520815,214.381353 859.110624,213.793843 862.290242,213.258285 L862.290243,213.258291 C863.298498,213.088466 864.088458,212.298506 864.258283,211.290251 C864.793842,208.110627 865.381353,206.520815 866.020815,206.520815 C866.660277,206.520815 867.247787,208.110624 867.783346,211.290242 L867.783339,211.290243 C867.953165,212.298498 868.743125,213.088458 869.75138,213.258283 Z" transform="rotate(45 866.02 215.02)"/>
|
||||
<path d="M679.75138,57.2582831 C682.931003,57.793842 684.520815,58.3813527 684.520815,59.0208153 C684.520815,59.6602772 682.931006,60.2477874 679.751389,60.7833459 L679.751388,60.7833393 C678.743132,60.9531646 677.953173,61.7431246 677.783347,62.7513799 C677.247789,65.9310035 676.660278,67.5208153 676.020815,67.5208153 C675.381353,67.5208153 674.793843,65.9310065 674.258285,62.7513888 L674.258291,62.7513877 C674.088466,61.7431324 673.298506,60.9531726 672.290251,60.7833474 C669.110627,60.2477885 667.520815,59.6602778 667.520815,59.0208153 C667.520815,58.3813533 669.110624,57.7938431 672.290242,57.2582846 L672.290243,57.2582913 C673.298498,57.0884659 674.088458,56.298506 674.258283,55.2902507 C674.793842,52.1106271 675.381353,50.5208153 676.020815,50.5208153 C676.660277,50.5208153 677.247787,52.1106241 677.783346,55.2902417 L677.783339,55.2902429 C677.953165,56.2984982 678.743125,57.088458 679.75138,57.2582831 Z" transform="rotate(45 676.02 59.02)"/>
|
||||
</g>
|
||||
<rect width="1280" height="720" fill="url(#a)"/>
|
||||
<use fill="#1C2149" xlink:href="#b"/>
|
||||
<path stroke="#1C2149" stroke-opacity=".3" stroke-width="20" d="M-1.05443273,623.787235 C210.851493,601.317921 424.73221,590 640,590 C855.26779,590 1069.14851,601.317921 1281.05443,623.787235 L1290,624.735773 L1290,730 L-10,730 L-10,624.735773 L-1.05443273,623.787235 Z"/>
|
||||
<path stroke="#1C2149" stroke-opacity=".3" stroke-width="40" d="M-2.10886547,613.842982 C210.147152,591.336546 424.379836,580 640,580 C855.620164,580 1069.85285,591.336546 1282.10887,613.842982 L1300,615.740057 L1300,740 L-20,740 L-20,615.740057 L-2.10886547,613.842982 Z"/>
|
||||
<path stroke="#21254D" stroke-opacity=".4" stroke-width="80" d="M-4.21773094,593.954476 C208.73847,571.373797 423.675088,560 640,560 C856.324912,560 1071.26153,571.373797 1284.21773,593.954476 L1320,597.748626 L1320,760 L-40,760 L-40,597.748626 L-4.21773094,593.954476 Z"/>
|
||||
<g fill="#5B89D5" transform="translate(606 632)">
|
||||
<path d="M25.4268,38.9907 C25.2979994,38.851166 25.2336,38.6740677 25.2336,38.4594 L25.2336,17.4328 C25.2336,17.1966655 25.2979994,17.008834 25.4268,16.8693 C25.5556006,16.729766 25.7273323,16.66 25.942,16.66 L33.7988,16.66 C36.2460122,16.66 38.1618931,17.2342276 39.5465,18.3827 C40.9311069,19.5311724 41.6234,21.2001891 41.6234,23.3898 C41.6234,25.0212748 41.2155374,26.3629281 40.3998,27.4148 C39.5840626,28.4666719 38.4463406,29.1965313 36.9866,29.6044 L41.9454,38.2018 C42.0098003,38.3306006 42.042,38.4486661 42.042,38.556 C42.042,38.7277342 41.9776006,38.8779994 41.8488,39.0068 C41.7199994,39.1356006 41.5697342,39.2 41.398,39.2 L39.9812,39.2 C39.6591984,39.2 39.4069676,39.1248674 39.2245,38.9746 C39.0420324,38.8243326 38.8756674,38.6096681 38.7254,38.3306 L33.992,30.0874 L28.2604,30.0874 L28.2604,38.4594 C28.2604,38.6740677 28.1852674,38.851166 28.035,38.9907 C27.8847326,39.130234 27.7022677,39.2 27.4876,39.2 L25.942,39.2 C25.7273323,39.2 25.5556006,39.130234 25.4268,38.9907 Z M33.67,27.447 C36.9114829,27.447 38.5322,26.0838803 38.5322,23.3576 C38.5322,20.6313197 36.9114829,19.2682 33.67,19.2682 L28.2604,19.2682 L28.2604,27.447 L33.67,27.447 Z M53.2,31.860303 L57.060303,28 L53.2,24.139697 L53.2,15.402449 C53.2,11.5350265 50.0649486,8.4 46.197551,8.4 L42.000818,8.4 C40.4510219,8.4 39.2,7.14770536 39.2,5.60292163 L39.2,2.79707837 C39.2,1.25302663 40.4539689,0 42.000818,0 L46.197551,0 C54.7041256,0 61.6,6.89581971 61.6,15.402449 L61.6,20.660303 L65.7219978,24.7823008 C67.500435,26.560738 67.4968427,29.4428543 65.7219978,31.2176992 L61.6,35.339697 L61.6,40.597551 C61.6,49.1041256 54.7041803,56 46.197551,56 L42.000818,56 C40.4510219,56 39.2,54.7477054 39.2,53.2029216 L39.2,50.3970784 C39.2,48.8530266 40.4539689,47.6 42.000818,47.6 L46.197551,47.6 C50.0649735,47.6 53.2,44.4649486 53.2,40.597551 L53.2,31.860303 Z M25.2,50.4 L21.002449,50.4 C15.5886363,50.4 11.2,46.011353 11.2,40.597551 L11.2,33.020101 L6.17989899,28 L11.2,22.979899 L11.2,15.402449 C11.2,9.98863626 15.588647,5.6 21.002449,5.6 L25.2,5.6 L25.2,2.8 L21.002449,2.8 C14.0422512,2.8 8.4,8.44223742 8.4,15.402449 L8.4,21.820101 L3.45790122,26.7621998 C2.774514,27.445587 2.77494166,28.5548406 3.45790122,29.2378002 L8.4,34.179899 L8.4,40.597551 C8.4,47.5577488 14.0422374,53.2 21.002449,53.2 L25.2,53.2 L25.2,50.4 Z M1.47800224,24.7823008 L5.6,20.660303 L5.6,15.402449 C5.6,6.89581971 12.4958744,0 21.002449,0 L25.199182,0 C26.7460311,0 28,1.25302663 28,2.79707837 L28,5.60292163 C28,7.14770536 26.7489781,8.4 25.199182,8.4 L21.002449,8.4 C17.1350514,8.4 14,11.5350265 14,15.402449 L14,24.139697 L10.139697,28 L14,31.860303 L14,40.597551 C14,44.4649486 17.1350265,47.6 21.002449,47.6 L25.199182,47.6 C26.7460311,47.6 28,48.8530266 28,50.3970784 L28,53.2029216 C28,54.7477054 26.7489781,56 25.199182,56 L21.002449,56 C12.4958197,56 5.6,49.1041256 5.6,40.597551 L5.6,35.339697 L1.47800224,31.2176992 C-0.296842703,29.4428543 -0.30043498,26.560738 1.47800224,24.7823008 Z"/>
|
||||
</g>
|
||||
<g transform="translate(414 192)">
|
||||
<text fill="#FFFFFF" font-family="Montserrat-Light, Montserrat" font-size="62" font-weight="300" letter-spacing="8">
|
||||
<tspan x=".144" y="236">atmosphèr</tspan> <tspan x="405.704" y="236" letter-spacing="9.697">e</tspan>
|
||||
</text>
|
||||
<g transform="translate(152.094 51.563)">
|
||||
<path fill="url(#c)" d="M121.078957,116.456601 C113.007813,102.506384 94.6724437,84.1520147 73.90625,72.1172787 C54.7513596,61.0163493 34.375,60.1328429 19.3134382,58.7216783 L60.3914036,6.64405962 C66.2560092,-0.790940998 77.0610143,-2.08249647 84.5250579,3.75928973 C85.6023811,4.60246432 86.5746282,5.57092832 87.4210964,6.64405962 L145.359575,80.0970164 C147.808011,83.201082 147.808011,87.5704404 145.359575,90.674506 L127.596668,113.193877 C125.978069,115.242092 123.568431,116.387804 121.078957,116.456601 Z"/>
|
||||
<path fill="url(#d)" d="M101.433683,109.630854 C92.6706405,107.21906 83.4395117,105.930508 73.90625,105.930508 C62.7990789,105.930508 52.1020381,107.679652 42.077593,110.916497 C37.5820565,112.368083 33.2217884,114.118867 29.0204608,116.145269 C25.7797865,116.958615 22.2911652,115.824932 20.1666979,113.131585 L2.45292454,90.674506 C0.00448884051,87.5704404 0.00448884051,83.201082 2.45292454,80.0970164 L19.8866117,57.9950231 C20.1325464,57.9935185 20.3786849,57.9927651 20.625,57.9927651 C64.0716885,57.9927651 102.021842,81.4346595 122.423632,116.313514 C121.32153,116.518985 120.176675,116.510687 119.054846,116.272487 C113.447207,113.54814 107.554634,111.315484 101.433683,109.630854 Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 2048 1152" width="1280" height="720" xmlns="http://www.w3.org/2000/svg">
|
||||
<path transform="translate(0)" d="m0 0h2048v1152h-2048z"/>
|
||||
<path transform="translate(937,402)" d="m0 0h77l24 1 8 1-2 5-13 19-6 10-10 21-7 20-1 8 11-7 14-11 15-10 16-8 10-3 14-1 13 3 8 4 10 9 10 10 7 8 3 3 4 1 1-8-3-18-5-17v-8h7l10 6 10 9 11 9 16 16 7 8 11 12 6 12 1 4v10l-4 17-17 51-1 9 5 10 11 13 6 10 8 16 11 18 7-6 4-5 7-17 7-9 6-5 2-1h9l7 6h2l1-5-3-5-6-4-12-3-3-3 1-9 9-15 7-9 6-5h5l13 8 3-1-1-5-4-5-8-4-7-1-10 3-9 7-7 5-5-1-1-2v-17l3-10 7-8 8-5 6-2h10l8 6 7 9 6 12 5 16 2 14v15l-2 17-4 17-7 19-7 13-10 14-12 12-11 7-10 4h-8l1-5v-7l-3-4h-6l-6 5-4 9-5 22-8 18-11 18-12 14-10 9-13 9-18 10-24 13-18 10-14 10-11 9-15 11-16 9-15 7-13 4-22 2-36-1-16-3-12-5-22-13-22-14-27-15-29-15-23-13-17-10-14-10-13-12-10-11-9-15-7-17-9-30-3-6v-2l-3-1h-8l-1 1v18l-2 2-7-1-12-8-13-11-9-10-10-15-8-14-7-18-5-21-1-7v-25l4-17 4-10 8-11 3-3 7 1 16 8 7 6 2 4 3 16 1 5-6-2-21-10-4-1-10 6-6 5-2 3v3l6 1 10-5 7 1 8 7 6 7 7 14 1 6-9 3-7 6-3 6-1 7 7-2 8-5h5l7 8 14 27 2 4 5 2 5-1 6-5 7-11 4-5 5-3 11-3 2-4v-21l-3-16-11-30-6-21-2-10-1-11v-11l3-13 11-12 8-8 16-12 7-1v21l5 1 8-7 7-7 7-8 11-9 10-5 8-2h9l16 5 19 10 22 15 7 5 5 1-3-12-12-23-20-30-3-5 1-4 15-7 15-4z" fill="#FEFEFE"/>
|
||||
<path transform="translate(957,59)" d="m0 0h22l30 3 23 4 29 8 22 9 23 11 23 14 18 13 13 11 11 9 28 28 9 11 14 17 14 20 14 22 15 27 11 22 10 25 9 27 6 26 4 26 1 10v41l-3 20-5 16-7 12-11 12-10 8-17 11-6 7-4 12-2 26-1 51-1 11-3 7-4 1-3-5-4-26v-5l-6 2-7 4h-5l-3-5v-11l5-21 9-24 4-18 2-10 3-6 3-2 8-2 5-6 3-10 2-14v-21l-2-20-4-16-10-21-8-12-9-11-11-12-13-11-18-13-21-12-24-12-26-10-38-13 2-19 3-28v-22l-3-24-5-18-9-17-9-11-10-9-14-9-16-8-12-4-13-2h-35l-21 3-16 6-17 9-12 8-12 11-7 7-9 13-6 13-4 13-2 13v18l3 17 5 15 10 19 6 9-1 3-26 14-46 28-19 13-19 14-10 9-8 7-8 8-10 13-9 16-5 15-2 8v35l5 21 5 12 4 6 6 1 5-3 4 1 4 13 17 73 4 20-2 1-16-3-2 10-3 5-4-1-7-29-3-15-4-31-3-14-4-10-7-9-15-11-9-7-7-6-9-12-10-19-8-24-4-21-1-7-1-20v-14l1-22 4-25 6-21 7-20 8-18 11-22 13-22 14-21 11-15 8-10 9-11 9-10 7-8 27-27 11-9 15-12 21-14 16-9 25-12 25-9 26-6 25-3z" fill="#FEFEFE"/>
|
||||
<path transform="translate(833,836)" d="m0 0h8l9 2 22 10 2 2 4 31 9 71 30 3 29 1h31l37-1 29-2 15-2 12-4h2l-4-58v-14l18-13 20-12 17-9h3l9 23 12 43 8 36 1 13-3 2-10-7-11-4-5-1h-16l-10 3-9 6-5 8-3 10v25l4 16 4 8 6 7 10 6 10 4 9 2h13l11-4 11-8 11-11 3-2h4l9 20 13 27 4 9-1 7-7 13-9 10-13 10v3l8-1 13-8 13-10 3-1 3 19 1 10v28h-455l-1-16v-14l2-9 4-3 6 2 21 14 5 2-5-6-13-10-10-10-6-10 1-6 5-1 19 9 4-1-7-9-11-11-3-4 1-7 11-26 8-19 4-1 17 7 16 4 18 1 15-2 10-5 6-7 3-6 1-5v-9l-3-13-8-16-6-7-10-6-7-2h-16l-13 4-10 9-4 1-1-1v-17l7-105 6-2z" fill="#FEFEFE"/>
|
||||
<path transform="translate(1048,477)" d="m0 0h14l13 2 14 7 7 6 9 12 8 17 4 17v29l-3 14-5 12-4 5h-2l1-8 2-15v-28l-2-15-5-12-6-9-5-5-7-6-11-5-13-2-12 2-10 5-6 5h-2l-2 4-5 6v2l5-2 9-7 9-4h12l8 4 9 9 8 14 4 11 3 15v21l-4 17-12 25 1 8 8 28 1 1h14l14-5 16-8 22-13 6-3 7 1 6 10 7 15 4 15v18l-5 9-10 9-16 10-9 7-7 11-8 11-11 9-14 7-8 2-19 2-7 3-6 9-7 12-9 10-10 7-15 7-17 5-6 1h-16l-18-4-16-5-13-7-13-11-9-9-3-4v-4l8-3-1-7-2-1h-11l-21 2-13-2-12-5-13-10-9-10-7-8-8-5-11-6-7-6-9-13-7-15-3-14 1-15 4-11 6-10 6-4 13 7 16 10 14 7 9 3h10l4-4 2-6 2-11 3-11v-9l-11-18-6-13-3-12-1-10v-10l2-15 5-14 8-11 8-6 5-2h12l10 6 11 8 4 1 1-4-5-10-9-9-8-5-10-3h-12l-12 4-9 6-7 8-6 11-5 19v32l5 19 8 14 9 13-1 4-5-2-8-7-8-9-8-16-4-17v-29l3-17 6-15 7-10 9-10 11-7 9-3h17l10 4 9 6 8 8 8 13 6 14 5 19 4 22 1 1h67l4-11 6-30 5-17 7-14 7-8 8-5z"/>
|
||||
<path transform="translate(1382,649)" d="m0 0h13l11 4 9 7 6 10 3 13 1 21-3 40-6 47-6 43-2 18-1 22 3-1 3-11 4-22 4-6 7-1 12 6 12 11 9 14 5 14 2 11v19l-4 20-8 23-8 16-8 11-9 11-14 14-13 9-26 10-32 10-26 8-14 3h-21l-17-4-13-5-14-8-10-9-6-8v-2l6 1 17 10 17 7 7 1-1-3-18-11-12-8-12-11-6-7-9-14-4-10-3-17v-36l3-19 6-18 6-10 8-8 9-2 9 3 11 9 8 9 3 1-2-8-1-8v-27l4-8 8-7 7-2h13l10 3 10 6 8 9 7 15 5 14v2h2l1-13 1-130 2-30 4-14 7-11 8-8 10-6z" fill="#FEFEFE"/>
|
||||
<path transform="translate(548,664)" d="m0 0h11l12 3 9 6 7 7 7 12 6 18 5 26 4 35 4 68 2 18 3 12 1 2 3-1 8-26 5-9 7-6 9-3 6-1h9l13 3 6 7 3 7 2 10v32l5-5 8-10 7-7 2-1 9 1 9 6 7 7 7 11 7 16 4 16 2 14v18l-3 17-5 13-8 15-12 13-11 9-21 13v2l10-1 15-5 14-7 8-6h2l-1 4-6 8-8 7-17 8-13 4-18 3h-18l-6-2-8-4-32-8-25-9-26-12-10-7-10-9-9-10-11-15-12-20-7-16-5-17-2-9-1-16 2-14 5-12 7-11 11-10 8-4h5l5 6 4 13 5 18 3 1-1-12-15-75-12-49-4-21-1-9v-22l4-11 6-9 11-7z" fill="#FEFEFE"/>
|
||||
<path transform="translate(964,297)" d="m0 0h28l34 3 30 5 30 8 24 9 22 10 19 11 11 8 12 9 13 11 21 21 11 15 8 16 7 24 3 17v21l-2 2-6-1-14-12-8-7-12-11-11-9-14-12-20-14-16-9-19-9-18-7-28-8-10-2-22-2h-106l-22 4-38 12-19 4-16 2-11 3-11 6-12 12-7 8-11 10-14 11-17 14-16 13-18 14-5-1-2-3-1-8v-28l2-14 5-15 7-14 8-11 12-14 11-10 14-11 14-10 23-14 16-9 25-12 15-6 18-6 22-6 36-6z" fill="#FEFEFE"/>
|
||||
<path transform="translate(959,132)" d="m0 0h11l15 2 13 4 15 8 11 9 13 13 9 13 8 17 4 16 2 12v29l-3 16-5 12-3 3-105 1-29 2-23 3h-14l-8-3-6-4-7-11-5-11-3-12-1-7v-26l3-16 5-12 7-11 9-10 11-10 14-9 16-8 19-6 15-3z" fill="#FEFEFE"/>
|
||||
<path transform="translate(945,577)" d="m0 0h45l14 3 12 5 16 10 13 11 10 11 8 13 4 12 2 19v16l-3 15-5 12-7 10-7 8-14 10-16 8-15 4-14 2h-34l-14-3-13-5-13-7-13-10-11-11-9-14-6-16-3-18v-9l3-17 6-15 9-13 10-10 15-10 14-7 9-3z" fill="#FEFEFE"/>
|
||||
<path transform="translate(986,149)" d="m0 0h6l8 7 12 18 16 29 8 16 13 27 2 6v7l-5 5-10 6-13 4-5 1h-9l-5-3-8-16-13-30-1-3-5 3-12 15-7 9-4 2-7-6-9-11-9-10-5-6h-2l-3 12-5 25-5 15-6 8-6 3h-12l-11-4-7-6-1-3v-10l4-15 11-32 11-28 7-14 6-8 9-7 6-2 8 9 24 32 4-4 14-20 12-16z"/>
|
||||
<path transform="translate(888,862)" d="m0 0 16 5 19 9 25 10 18 4 12 1h29l21-3 19-5h6l4 4 2 7v36l-3 8-5 4-5 2-17 2-25 1h-71l-25-2-13-3-2-9-6-70z" fill="#FEFEFE"/>
|
||||
<path transform="translate(939,352)" d="m0 0h36l33 2 28 3 29 5 31 8 29 10 20 9 18 11 11 9 8 8 3 4v4l-6-1-24-14-23-12-25-10-26-8-26-6-30-5-31-3h-55l-30 3-24 4-24 6-24 8-26 12-18 10-14 10-14 11-26 22-5 2 1-6 10-13 11-13 12-11 18-13 16-9 21-10 30-11 19-6 28-6 22-3z"/>
|
||||
<path transform="translate(1150,841)" d="m0 0 16 6 19 9 10 7 4 5-4 31-1 12v28l3 22 7 26 6 20v9l-4 2-10-7-13-13-5-10-11-43-15-61-3-18v-24z" fill="#FEFEFE"/>
|
||||
<path transform="translate(789,843)" d="m0 0h9l1 1 2 11v12l-3 32-7 77-3 12-5 11-6 9-6 5-2 1h-6v-11l2-20v-62l-3-18-10-28-3-7v-4l26-13z" fill="#FEFEFE"/>
|
||||
<path transform="translate(834,965)" d="m0 0h13l8 4 6 5 4 9v7l-3 9-9 10-8 4-4 1h-7l-10-5-6-8-2-6v-11l3-8 5-6z" fill="#FEFEFE"/>
|
||||
<path transform="translate(1124,969)" d="m0 0 11 1 8 4 6 7 3 9v9l-3 8-5 5-6 2h-16l-9-3-5-6-3-7v-13l5-8 6-5z" fill="#FEFEFE"/>
|
||||
<path transform="translate(929,780)" d="m0 0h10l45 4h40l12-3h9l-1 5-7 6-12 5-16 4-6 1h-33l-18-4-17-6-8-6v-4z" fill="#FEFEFE"/>
|
||||
<path transform="translate(1041,811)" d="m0 0 5 1 1 4-3 6-10 9-16 8-9 3-19 3h-15l-16-3-10-4-9-6-5-6v-4l5 1 12 6 15 4 8 1h22l14-3 10-4 8-6 10-9z"/>
|
||||
<path transform="translate(1035,527)" d="m0 0h11l6 4 3 4 1 4v7l-3 7-5 4-5 2-7-1-5-4-5-8v-8l4-7z" fill="#FEFEFE"/>
|
||||
<path transform="translate(885,525)" d="m0 0 9 3 5 5 5 8-1 4-7 8-6 3-9-2-5-5-2-3v-11l3-5z" fill="#FEFEFE"/>
|
||||
<path transform="translate(1342,944)" d="m0 0h3l1 3v9l-4 16-8 16-9 10-5 4-4-1 1-5 11-26 9-20 3-5z"/>
|
||||
<path transform="translate(598,953)" d="m0 0 5 1 6 7 5 10 8 27 1 9-4-1-5-5-6-8-8-16-5-14v-7z"/>
|
||||
<path transform="translate(1367,950)" d="m0 0 7 1 1 2v12l-5 13-8 15-6 7-3-2v-12l3-17 4-11 4-6z"/>
|
||||
<path transform="translate(626,950)" d="m0 0h3l18 34 9 18v5l-4-1-10-8-8-11-7-15-2-6-1-12z"/>
|
||||
<path transform="translate(563,962)" d="m0 0 6 1 8 7 9 13 6 13v7l-5-1-8-8-9-13-8-15z"/>
|
||||
<path transform="translate(1403,955)" d="m0 0 4 1 1 6-3 10-6 12-10 11-6 2v-8l8-16 8-14z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 7.5 KiB |
@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = https://github.com/Atmosphere-NX/Atmosphere-libs
|
||||
branch = master
|
||||
commit = 9e8cbe3faa4604e9ae162546d13a74755ce30667
|
||||
parent = 4d4f0ba96876d20e505c7aa11c9bf215f276dd8b
|
||||
commit = 0f72b2ceba36c4255763d79ec48575ceb41d2539
|
||||
parent = 77603bf7e54cc2717ec38c0c3fc98621c78ff642
|
||||
method = merge
|
||||
cmdver = 0.4.1
|
||||
|
@ -236,7 +236,7 @@ export ATMOSPHERE_GIT_BRANCH := $(shell git symbolic-ref --short HEAD)
|
||||
ifeq ($(strip $(shell git status --porcelain 2>/dev/null)),)
|
||||
export ATMOSPHERE_GIT_REVISION := $(ATMOSPHERE_GIT_BRANCH)-$(shell git rev-parse --short HEAD)
|
||||
else
|
||||
export ATMOSPHERE_GIT_REVISION := $(ATMOSPHERE_GIT_BRANCH)-$(shell git rev-parse --short HEAD)-dirty
|
||||
export ATMOSPHERE_GIT_REVISION := $(ATMOSPHERE_GIT_BRANCH)-$(shell git rev-parse --short HEAD)
|
||||
endif
|
||||
|
||||
export ATMOSPHERE_GIT_HASH := $(shell git rev-parse --short=16 HEAD)
|
||||
|
@ -116,7 +116,9 @@ namespace ams::kern::arch::arm {
|
||||
u32 ipriorityr[NumLocalInterrupts / 4];
|
||||
u32 itargetsr[NumLocalInterrupts / 4];
|
||||
u32 icfgr[NumLocalInterrupts / 16];
|
||||
u32 spendsgir[4];
|
||||
};
|
||||
static_assert(sizeof(LocalState{}.spendsgir) == sizeof(GicDistributor{}.spendsgir));
|
||||
|
||||
struct GlobalState {
|
||||
u32 isenabler[NumGlobalInterrupts / 32];
|
||||
|
@ -113,6 +113,11 @@ namespace ams::kern::arch::arm {
|
||||
constexpr size_t Offset = 0;
|
||||
state->icfgr[i] = m_gicd->icfgr[i + Offset];
|
||||
}
|
||||
|
||||
/* Save spendsgir. */
|
||||
for (size_t i = 0; i < util::size(state->spendsgir); ++i) {
|
||||
state->spendsgir[i] = m_gicd->spendsgir[i];
|
||||
}
|
||||
}
|
||||
|
||||
void KInterruptController::SaveGlobal(GlobalState *state) const {
|
||||
@ -168,6 +173,11 @@ namespace ams::kern::arch::arm {
|
||||
m_gicd->icenabler[i + Offset] = 0xFFFFFFFF;
|
||||
m_gicd->isenabler[i + Offset] = state->isenabler[i];
|
||||
}
|
||||
|
||||
/* Restore spendsgir. */
|
||||
for (size_t i = 0; i < util::size(state->spendsgir); ++i) {
|
||||
m_gicd->spendsgir[i] = state->spendsgir[i];
|
||||
}
|
||||
}
|
||||
|
||||
void KInterruptController::RestoreGlobal(const GlobalState *state) const {
|
||||
|
@ -112,7 +112,7 @@ namespace ams::kern::arch::arm64::cpu {
|
||||
class KCoreBarrierInterruptHandler : public KInterruptHandler {
|
||||
private:
|
||||
util::Atomic<u64> m_target_cores;
|
||||
KSpinLock m_lock;
|
||||
KLightLock m_lock;
|
||||
public:
|
||||
constexpr KCoreBarrierInterruptHandler() : KInterruptHandler(), m_target_cores(0), m_lock() { /* ... */ }
|
||||
|
||||
@ -123,11 +123,8 @@ namespace ams::kern::arch::arm64::cpu {
|
||||
}
|
||||
|
||||
void SynchronizeCores(u64 core_mask) {
|
||||
/* Disable dispatch while we synchronize. */
|
||||
KScopedDisableDispatch dd;
|
||||
|
||||
/* Acquire exclusive access to ourselves. */
|
||||
KScopedSpinLock lk(m_lock);
|
||||
KScopedLightLock lk(m_lock);
|
||||
|
||||
/* If necessary, force synchronization with other cores. */
|
||||
if (const u64 other_cores_mask = core_mask & ~(1ul << GetCurrentCoreId()); other_cores_mask != 0) {
|
||||
|
@ -524,6 +524,14 @@ namespace ams::kern::board::nintendo::nx {
|
||||
/* Ensure that all cores get to this point before continuing. */
|
||||
cpu::SynchronizeAllCores();
|
||||
|
||||
/* Wait 100us before continuing. */
|
||||
{
|
||||
const s64 timeout = KHardwareTimer::GetTick() + ams::svc::Tick(TimeSpan::FromMicroSeconds(100));
|
||||
while (KHardwareTimer::GetTick() < timeout) {
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
}
|
||||
}
|
||||
|
||||
/* Save the interrupt manager's state. */
|
||||
Kernel::GetInterruptManager().Save(core_id);
|
||||
|
||||
|
@ -926,6 +926,7 @@
|
||||
HANDLER(GameCardLastAwakenFailureResult, 732, GameCardDetailedErrorInfo, FieldType_NumericU32, FieldFlag_None ) \
|
||||
HANDLER(GameCardInsertedTimestamp, 733, GameCardDetailedErrorInfo, FieldType_NumericI64, FieldFlag_None ) \
|
||||
HANDLER(GameCardPreviousInsertedTimestamp, 734, GameCardDetailedErrorInfo, FieldType_NumericI64, FieldFlag_None ) \
|
||||
HANDLER(WlanChipResetTriggered, 735, WlanInfo, FieldType_Bool, FieldFlag_None ) \
|
||||
HANDLER(TestStringNx, 1000, TestNx, FieldType_String, FieldFlag_None ) \
|
||||
HANDLER(BoostModeCurrentLimit, 1001, BatteryChargeInfo, FieldType_NumericI32, FieldFlag_None ) \
|
||||
HANDLER(ChargeConfiguration, 1002, BatteryChargeInfo, FieldType_NumericI32, FieldFlag_None ) \
|
||||
|
@ -89,6 +89,7 @@ namespace ams::hos {
|
||||
Version_19_0_1 = ::ams::TargetFirmware_19_0_1,
|
||||
Version_20_0_0 = ::ams::TargetFirmware_20_0_0,
|
||||
Version_20_0_1 = ::ams::TargetFirmware_20_0_1,
|
||||
Version_20_1_0 = ::ams::TargetFirmware_20_1_0,
|
||||
|
||||
Version_Current = ::ams::TargetFirmware_Current,
|
||||
|
||||
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) Atmosphère-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <vapours.hpp>
|
||||
|
||||
namespace ams::ldr {
|
||||
|
||||
/* TODO: Is this really a FS type? What namespace does this actually live inside? */
|
||||
enum PlatformId {
|
||||
PlatformId_Nx = 0,
|
||||
};
|
||||
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) Atmosphère-NX
|
||||
* Copyright (c) Atmosphère-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stratosphere.hpp>
|
||||
#include "erpt_srv_report_impl.hpp"
|
||||
@ -20,22 +20,28 @@
|
||||
namespace ams::erpt::srv {
|
||||
|
||||
ReportFileName Report::FileName(ReportId report_id, bool redirect_to_sd) {
|
||||
AMS_UNUSED(report_id); // Marks the parameter as unused
|
||||
AMS_UNUSED(redirect_to_sd); // Marks the parameter as unused
|
||||
|
||||
ReportFileName report_name;
|
||||
util::SNPrintf(report_name.name, sizeof(report_name.name), "erpt_disabled");
|
||||
util::SNPrintf(report_name.name, sizeof(report_name.name),
|
||||
"%s:/%08x-%04x-%04x-%02x%02x-%04x%08x",
|
||||
(redirect_to_sd ? ReportOnSdStoragePath : ReportStoragePath),
|
||||
report_id.uuid_data.time_low,
|
||||
report_id.uuid_data.time_mid,
|
||||
report_id.uuid_data.time_high_and_version,
|
||||
report_id.uuid_data.clock_high,
|
||||
report_id.uuid_data.clock_low,
|
||||
static_cast<u32>((report_id.uuid_data.node >> BITSIZEOF(u32)) & 0x0000FFFF),
|
||||
static_cast<u32>((report_id.uuid_data.node >> 0) & 0xFFFFFFFF));
|
||||
return report_name;
|
||||
}
|
||||
|
||||
Report::Report(JournalRecord<ReportInfo> *r, bool redirect_to_sd)
|
||||
: m_record(r), m_redirect_to_sd_card(redirect_to_sd) {
|
||||
Report::Report(JournalRecord<ReportInfo> *r, bool redirect_to_sd) : m_record(r), m_redirect_to_sd_card(redirect_to_sd) {
|
||||
m_record->AddReference();
|
||||
}
|
||||
|
||||
Report::~Report() {
|
||||
this->CloseStream();
|
||||
if (m_record->RemoveReference()) {
|
||||
this->DeleteStream(this->FileName().name);
|
||||
delete m_record;
|
||||
}
|
||||
}
|
||||
@ -45,22 +51,23 @@ namespace ams::erpt::srv {
|
||||
}
|
||||
|
||||
Result Report::Open(ReportOpenType type) {
|
||||
AMS_UNUSED(type); // Marks the parameter as unused
|
||||
R_SUCCEED();
|
||||
switch (type) {
|
||||
case ReportOpenType_Create: R_RETURN(this->OpenStream(this->FileName().name, StreamMode_Write, ReportStreamBufferSize));
|
||||
case ReportOpenType_Read: R_RETURN(this->OpenStream(this->FileName().name, StreamMode_Read, ReportStreamBufferSize));
|
||||
default: R_THROW(erpt::ResultInvalidArgument());
|
||||
}
|
||||
}
|
||||
|
||||
Result Report::Read(u32 *out_read_count, u8 *dst, u32 dst_size) {
|
||||
AMS_UNUSED(out_read_count);
|
||||
AMS_UNUSED(dst);
|
||||
AMS_UNUSED(dst_size);
|
||||
R_SUCCEED();
|
||||
R_RETURN(this->ReadStream(out_read_count, dst, dst_size));
|
||||
}
|
||||
|
||||
Result Report::Delete() {
|
||||
R_SUCCEED();
|
||||
R_RETURN(this->DeleteStream(this->FileName().name));
|
||||
}
|
||||
|
||||
void Report::Close() {
|
||||
return this->CloseStream();
|
||||
}
|
||||
|
||||
Result Report::GetFlags(ReportFlagSet *out) const {
|
||||
@ -69,17 +76,15 @@ namespace ams::erpt::srv {
|
||||
}
|
||||
|
||||
Result Report::SetFlags(ReportFlagSet flags) {
|
||||
AMS_UNUSED(flags);
|
||||
if (((~m_record->m_info.flags) & flags).IsAnySet()) {
|
||||
m_record->m_info.flags |= flags;
|
||||
R_RETURN(Journal::Commit());
|
||||
}
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result Report::GetSize(s64 *out) const {
|
||||
*out = 0;
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
void Report::CloseStream() {
|
||||
// Implement the logic to close the stream, if necessary
|
||||
R_RETURN(this->GetStreamSize(out));
|
||||
}
|
||||
|
||||
}
|
@ -5,13 +5,13 @@
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <stratosphere.hpp>
|
||||
@ -34,11 +34,10 @@ namespace ams::erpt::srv {
|
||||
bool m_redirect_to_sd_card;
|
||||
private:
|
||||
ReportFileName FileName() const;
|
||||
void CloseStream();
|
||||
public:
|
||||
static ReportFileName FileName(ReportId report_id, bool redirect_to_sd = false);
|
||||
static ReportFileName FileName(ReportId report_id, bool redirect_to_sd);
|
||||
public:
|
||||
explicit Report(JournalRecord<ReportInfo> *r, bool redirect_to_sd = false);
|
||||
explicit Report(JournalRecord<ReportInfo> *r, bool redirect_to_sd);
|
||||
~Report();
|
||||
|
||||
Result Open(ReportOpenType type);
|
||||
@ -52,15 +51,12 @@ namespace ams::erpt::srv {
|
||||
|
||||
template<typename T>
|
||||
Result Write(T val) {
|
||||
(void)val;
|
||||
R_SUCCEED();
|
||||
R_RETURN(this->WriteStream(reinterpret_cast<const u8 *>(std::addressof(val)), sizeof(val)));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Result Write(const T *buf, u32 buffer_size) {
|
||||
(void)buf;
|
||||
(void)buffer_size;
|
||||
R_SUCCEED();
|
||||
R_RETURN(this->WriteStream(reinterpret_cast<const u8 *>(buf), buffer_size));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -17,10 +17,10 @@
|
||||
|
||||
#define ATMOSPHERE_RELEASE_VERSION_MAJOR 1
|
||||
#define ATMOSPHERE_RELEASE_VERSION_MINOR 9
|
||||
#define ATMOSPHERE_RELEASE_VERSION_MICRO 0
|
||||
#define ATMOSPHERE_RELEASE_VERSION_MICRO 1
|
||||
|
||||
#define ATMOSPHERE_RELEASE_VERSION ATMOSPHERE_RELEASE_VERSION_MAJOR, ATMOSPHERE_RELEASE_VERSION_MINOR, ATMOSPHERE_RELEASE_VERSION_MICRO
|
||||
|
||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR 20
|
||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 0
|
||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 1
|
||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 0
|
||||
|
@ -87,8 +87,9 @@
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_19_0_1 ATMOSPHERE_TARGET_FIRMWARE(19, 0, 1)
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_20_0_0 ATMOSPHERE_TARGET_FIRMWARE(20, 0, 0)
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_20_0_1 ATMOSPHERE_TARGET_FIRMWARE(20, 0, 1)
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_20_1_0 ATMOSPHERE_TARGET_FIRMWARE(20, 1, 0)
|
||||
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_20_0_1
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_20_1_0
|
||||
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0)
|
||||
#define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT
|
||||
@ -168,6 +169,7 @@ namespace ams {
|
||||
TargetFirmware_19_0_1 = ATMOSPHERE_TARGET_FIRMWARE_19_0_1,
|
||||
TargetFirmware_20_0_0 = ATMOSPHERE_TARGET_FIRMWARE_20_0_0,
|
||||
TargetFirmware_20_0_1 = ATMOSPHERE_TARGET_FIRMWARE_20_0_1,
|
||||
TargetFirmware_20_1_0 = ATMOSPHERE_TARGET_FIRMWARE_20_1_0,
|
||||
|
||||
TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT,
|
||||
|
||||
|
@ -32,7 +32,7 @@ namespace ams::mitm::settings {
|
||||
constinit settings::FirmwareVersion g_ams_firmware_version;
|
||||
|
||||
/* Add here your package version */
|
||||
char package_version[13] = "CNX 19.0.0-2";
|
||||
char package_version[35] = "CNX 20.1.5-1 por CostelaBR";
|
||||
|
||||
void CacheFirmwareVersion() {
|
||||
if (AMS_LIKELY(g_cached_firmware_version)) {
|
||||
|
76830
stratosphere/boot/source/MARIO_ONLY_boot_splash_cnx.inc
Normal file
76830
stratosphere/boot/source/MARIO_ONLY_boot_splash_cnx.inc
Normal file
File diff suppressed because it is too large
Load Diff
921630
stratosphere/boot/source/___boot_splash_cnx.inc
Normal file
921630
stratosphere/boot/source/___boot_splash_cnx.inc
Normal file
File diff suppressed because it is too large
Load Diff
921630
stratosphere/boot/source/_boot_splash_cnx.inc
Normal file
921630
stratosphere/boot/source/_boot_splash_cnx.inc
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -148,4 +148,4 @@ namespace ams {
|
||||
erpt::srv::Wait();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
159
stratosphere/loader/source/ldr_embedded_es_patches.inc
Normal file
159
stratosphere/loader/source/ldr_embedded_es_patches.inc
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) Atmosphère-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Patch fallback case to mov w0, #1 rather than retrieving settings flag. */
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_1_0_0[] = {
|
||||
{ 0x4884, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_2_3_0[] = {
|
||||
{ 0x4758, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_3_0_0[] = {
|
||||
{ 0x4710, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_3_0_2[] = {
|
||||
{ 0x4710, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_4_0_0[] = {
|
||||
{ 0x553C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_5_0_0[] = {
|
||||
{ 0x5E94, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_5_1_0[] = {
|
||||
{ 0x5E94, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_6_0_0[] = {
|
||||
{ 0x4BCD4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_6_1_0[] = {
|
||||
{ 0x4BCD4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_7_0_0[] = {
|
||||
{ 0x4D5F4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_8_0_1[] = {
|
||||
{ 0x4EDC4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_8_1_0[] = {
|
||||
{ 0x4EDC4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_9_0_0[] = {
|
||||
{ 0x2D2D4, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_10_0_0[] = {
|
||||
{ 0x2DB98, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_10_1_0[] = {
|
||||
{ 0x2DBAC, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_11_0_0[] = {
|
||||
{ 0x2CFCC, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_12_0_0[] = {
|
||||
{ 0x2E47C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_12_1_0[] = {
|
||||
{ 0x2E51C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_13_0_0[] = {
|
||||
{ 0x31428, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_13_1_0[] = {
|
||||
{ 0x31928, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_14_0_0[] = {
|
||||
{ 0x662D8, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_15_0_0[] = {
|
||||
{ 0x649EC, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_16_0_0[] = {
|
||||
{ 0x64A6C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_17_0_0[] = {
|
||||
{ 0x6720C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_18_0_0[] = {
|
||||
{ 0x6964C, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_19_0_0[] = {
|
||||
{ 0x6A2F8, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_20_0_0[] = {
|
||||
{ 0x76A38, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry DisableTicketVerificationPatches_20_1_0[] = {
|
||||
{ 0x76A18, "\xE0\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatch DisableTicketVerificationPatches[] = {
|
||||
{ ParseModuleId("F7271147BA178C4E9F6451C62B10E668E6F8DECC"), util::size(DisableTicketVerificationPatches_1_0_0), DisableTicketVerificationPatches_1_0_0 }, /* 1.0.0 */
|
||||
{ ParseModuleId("76935CA6235CA150D790D4DDF09CA3488AEF50D8"), util::size(DisableTicketVerificationPatches_2_3_0), DisableTicketVerificationPatches_2_3_0 }, /* 2.3.0 */
|
||||
{ ParseModuleId("F92CFF283777465AFBCC6E160C10EFE7AADC4D3C"), util::size(DisableTicketVerificationPatches_3_0_0), DisableTicketVerificationPatches_3_0_0 }, /* 3.0.0 */
|
||||
{ ParseModuleId("F86D615F9FC6F0D16C3458BE58C64594DBDAB0DF"), util::size(DisableTicketVerificationPatches_3_0_2), DisableTicketVerificationPatches_3_0_2 }, /* 3.0.2 */
|
||||
{ ParseModuleId("7135C20E752183914606CCE81293F24B738C3AEF"), util::size(DisableTicketVerificationPatches_4_0_0), DisableTicketVerificationPatches_4_0_0 }, /* 4.0.0-4.1.0 */
|
||||
{ ParseModuleId("A6E7D98BD335371E1B9A96F6241EA3E83B0C36F4"), util::size(DisableTicketVerificationPatches_5_0_0), DisableTicketVerificationPatches_5_0_0 }, /* 5.0.0-5.0.2 */
|
||||
{ ParseModuleId("C0BFC6518707AC975295A0B656A051DA885A9045"), util::size(DisableTicketVerificationPatches_5_1_0), DisableTicketVerificationPatches_5_1_0 }, /* 5.1.0 */
|
||||
{ ParseModuleId("CBF2D40A2210C4EE1137F80098DB776EAC7DDCC1"), util::size(DisableTicketVerificationPatches_6_0_0), DisableTicketVerificationPatches_6_0_0 }, /* 6.0.0-6.0.1 */
|
||||
{ ParseModuleId("9C1B205852731D054B070529D320AD9649E7796C"), util::size(DisableTicketVerificationPatches_6_1_0), DisableTicketVerificationPatches_6_1_0 }, /* 6.1.0-6.2.0 */
|
||||
{ ParseModuleId("D2D2430244D162C9FAABE8C89A58C6E3962160F1"), util::size(DisableTicketVerificationPatches_7_0_0), DisableTicketVerificationPatches_7_0_0 }, /* 7.0.0-7.0.1 */
|
||||
{ ParseModuleId("39E7884F7DDEA9BE4FF9F7187898FACC466A080A"), util::size(DisableTicketVerificationPatches_8_0_1), DisableTicketVerificationPatches_8_0_1 }, /* 8.0.1 */
|
||||
{ ParseModuleId("CF8FB4F82D3E2D56720E1EDB14AB06543343E042"), util::size(DisableTicketVerificationPatches_8_1_0), DisableTicketVerificationPatches_8_1_0 }, /* 8.1.0-8.1.1 */
|
||||
{ ParseModuleId("34E95FF2929B5B767DCFD41D108AD927D2D7F5DC"), util::size(DisableTicketVerificationPatches_9_0_0), DisableTicketVerificationPatches_9_0_0 }, /* 9.0.0-9.2.0 */
|
||||
{ ParseModuleId("03E4EB5556B98B327D1353E8AA2C7ADF2C544470"), util::size(DisableTicketVerificationPatches_10_0_0), DisableTicketVerificationPatches_10_0_0 }, /* 10.0.0-10.0.4 */
|
||||
{ ParseModuleId("5AA09E1AF740A91D0F73ADFAE81A63E8AC0610D2"), util::size(DisableTicketVerificationPatches_10_1_0), DisableTicketVerificationPatches_10_1_0 }, /* 10.1.0-10.2.0 */
|
||||
{ ParseModuleId("3B8BF56DBEC7225D2EE666B009C42C0DC4552010"), util::size(DisableTicketVerificationPatches_11_0_0), DisableTicketVerificationPatches_11_0_0 }, /* 11.0.0-11.0.1 */
|
||||
{ ParseModuleId("F48ABC3EF41A0555800127D172C9B8D2C653243A"), util::size(DisableTicketVerificationPatches_12_0_0), DisableTicketVerificationPatches_12_0_0 }, /* 12.0.0-12.0.3 */
|
||||
{ ParseModuleId("1114E9102F1EBCD1B0EAF19C927362CFCB8B5D2C"), util::size(DisableTicketVerificationPatches_12_1_0), DisableTicketVerificationPatches_12_1_0 }, /* 12.1.0 */
|
||||
{ ParseModuleId("D0ECC9483E636AE19FE3E314DB41CB18019977D7"), util::size(DisableTicketVerificationPatches_13_0_0), DisableTicketVerificationPatches_13_0_0 }, /* 13.0.0 */
|
||||
{ ParseModuleId("98BB737D9780E9FE3117981A77A09FF6756DBC2E"), util::size(DisableTicketVerificationPatches_13_1_0), DisableTicketVerificationPatches_13_1_0 }, /* 13.1.0-13.2.1 */
|
||||
{ ParseModuleId("621351EB04199CF0B7A899896C451F2FD1B7A1CE"), util::size(DisableTicketVerificationPatches_14_0_0), DisableTicketVerificationPatches_14_0_0 }, /* 14.0.0-14.1.2 */
|
||||
{ ParseModuleId("4FB9AFAED8A9093A3D88F6D61158B1C165F9444A"), util::size(DisableTicketVerificationPatches_15_0_0), DisableTicketVerificationPatches_15_0_0 }, /* 15.0.0-15.0.1 */
|
||||
{ ParseModuleId("127904316C924326084288641825FE5DC259AF6B"), util::size(DisableTicketVerificationPatches_16_0_0), DisableTicketVerificationPatches_16_0_0 }, /* 16.0.0-16.1.0 */
|
||||
{ ParseModuleId("02DCD930D0A7462451E9973AB2022D697C77614B"), util::size(DisableTicketVerificationPatches_17_0_0), DisableTicketVerificationPatches_17_0_0 }, /* 17.0.0-17.0.1 */
|
||||
{ ParseModuleId("897C2CF2777B3A8845640C096933ACE61DD12272"), util::size(DisableTicketVerificationPatches_18_0_0), DisableTicketVerificationPatches_18_0_0 }, /* 18.0.0-18.1.0 */
|
||||
{ ParseModuleId("4A258ADE9176A7F263532C2A4C30187A0B00C012"), util::size(DisableTicketVerificationPatches_19_0_0), DisableTicketVerificationPatches_19_0_0 }, /* 19.0.0-19.0.1 */
|
||||
{ ParseModuleId("CF84DE5278AE823734DE630A098C6B1AEEF12894"), util::size(DisableTicketVerificationPatches_20_0_0), DisableTicketVerificationPatches_20_0_0 }, /* 20.0.0-20.0.1 */
|
||||
{ ParseModuleId("8B2E677DE5991C87B35E84F7DDB8056F62D4582E"), util::size(DisableTicketVerificationPatches_20_1_0), DisableTicketVerificationPatches_20_1_0 }, /* 20.1.0 */
|
||||
};
|
164
stratosphere/loader/source/ldr_embedded_nifm_patches.inc
Normal file
164
stratosphere/loader/source/ldr_embedded_nifm_patches.inc
Normal file
@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright (c) Atmosphère-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Patch fallback case to mov w0, #1 rather than retrieving settings flag. */
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_1_0_0[] = {
|
||||
{ 0x304C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_2_0_0[] = {
|
||||
{ 0x33C4, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_2_1_0[] = {
|
||||
{ 0x3300, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_3_0_0[] = {
|
||||
{ 0x36B4, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_3_0_1[] = {
|
||||
{ 0x36B4, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_4_0_0[] = {
|
||||
{ 0x3698, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_5_0_0[] = {
|
||||
{ 0x2075C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_5_1_0[] = {
|
||||
{ 0x207EC, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_6_0_0[] = {
|
||||
{ 0x74B2C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_6_1_0[] = {
|
||||
{ 0x74B6C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_7_0_0[] = {
|
||||
{ 0x76C4C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_8_0_0[] = {
|
||||
{ 0x7854C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_9_0_0[] = {
|
||||
{ 0xE1EC, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_9_1_0[] = {
|
||||
{ 0xE1EC, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_10_0_0[] = {
|
||||
{ 0xF67C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_11_0_0[] = {
|
||||
{ 0xF32C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_12_0_0[] = {
|
||||
{ 0x106C8, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_12_1_0[] = {
|
||||
{ 0x106C8, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_13_0_0[] = {
|
||||
{ 0x10740, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_13_1_0[] = {
|
||||
{ 0x10740, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_14_0_0[] = {
|
||||
{ 0x44238, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_15_0_0[] = {
|
||||
{ 0x79E60, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_16_0_0[] = {
|
||||
{ 0x7A80C, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_17_0_0[] = {
|
||||
{ 0x809E0, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_18_0_0[] = {
|
||||
{ 0x83560, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_18_0_1[] = {
|
||||
{ 0x83560, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_19_0_0[] = {
|
||||
{ 0x86420, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_20_0_0[] = {
|
||||
{ 0x879C0, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry ForceCommunicationEnabledPatches_20_1_0[] = {
|
||||
{ 0x87AC0, "\x00\x30\x9A\xD2\x00\x1E\xA1\xF2\x61\x01\x00\xD4\xE0\x03\x1F\xAA\xC0\x03\x5F\xD6", 20 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatch ForceCommunicationEnabledPatches[] = {
|
||||
{ ParseModuleId("D47D1506009B340829CD545B2A3F3AA7881FBADA"), util::size(ForceCommunicationEnabledPatches_1_0_0), ForceCommunicationEnabledPatches_1_0_0 }, /* 1.0.0 */
|
||||
{ ParseModuleId("E6BFDADD5C69E17D43B7C67E2B2EE8B2E50C8E1F"), util::size(ForceCommunicationEnabledPatches_2_0_0), ForceCommunicationEnabledPatches_2_0_0 }, /* 2.0.0 */
|
||||
{ ParseModuleId("AD32FB6D8F36668C586E538E32576A8D6A3931C0"), util::size(ForceCommunicationEnabledPatches_2_1_0), ForceCommunicationEnabledPatches_2_1_0 }, /* 2.1.0-2.3.0 */
|
||||
{ ParseModuleId("881206E6B5078EFC4E2C30D7B33E33AD266538C6"), util::size(ForceCommunicationEnabledPatches_3_0_0), ForceCommunicationEnabledPatches_3_0_0 }, /* 3.0.0 */
|
||||
{ ParseModuleId("5835E2DADB4DD570DD811ABF521FA91AC3C7B717"), util::size(ForceCommunicationEnabledPatches_3_0_1), ForceCommunicationEnabledPatches_3_0_1 }, /* 3.0.1-3.0.2 */
|
||||
{ ParseModuleId("38774C42DFCB8B9D7AA61550D6AF7D335472556C"), util::size(ForceCommunicationEnabledPatches_4_0_0), ForceCommunicationEnabledPatches_4_0_0 }, /* 4.0.0-4.1.0 */
|
||||
{ ParseModuleId("B6966381A806655B718F1BF11DB5FF836E3085F7"), util::size(ForceCommunicationEnabledPatches_5_0_0), ForceCommunicationEnabledPatches_5_0_0 }, /* 5.0.0-5.0.2 */
|
||||
{ ParseModuleId("D82361E0D66DC01AFA3B5116532E5E1ED569C578"), util::size(ForceCommunicationEnabledPatches_5_1_0), ForceCommunicationEnabledPatches_5_1_0 }, /* 5.1.0 */
|
||||
{ ParseModuleId("3AED90979B380C6415F975F5B784BEA2B4730E8C"), util::size(ForceCommunicationEnabledPatches_6_0_0), ForceCommunicationEnabledPatches_6_0_0 }, /* 6.0.0-6.0.1 */
|
||||
{ ParseModuleId("43F10952AE80CFADC39A0BF59EA4E552EF4A4528"), util::size(ForceCommunicationEnabledPatches_6_1_0), ForceCommunicationEnabledPatches_6_1_0 }, /* 6.1.0-6.2.0 */
|
||||
{ ParseModuleId("929014BFCFE462FD76B2BB3454FB304F63C73AC2"), util::size(ForceCommunicationEnabledPatches_7_0_0), ForceCommunicationEnabledPatches_7_0_0 }, /* 7.0.0-7.0.1 */
|
||||
{ ParseModuleId("FD53CB863709DFFEC19C0889F61D4C424AFFD4ED"), util::size(ForceCommunicationEnabledPatches_8_0_0), ForceCommunicationEnabledPatches_8_0_0 }, /* 8.0.0-8.1.0 */
|
||||
{ ParseModuleId("7DF07326B6B50CA37F19C1C44F9458406C536B30"), util::size(ForceCommunicationEnabledPatches_9_0_0), ForceCommunicationEnabledPatches_9_0_0 }, /* 9.0.0-9.0.1 */
|
||||
{ ParseModuleId("9C72C47F0310F7C9F487047D8EB42DBB96882088"), util::size(ForceCommunicationEnabledPatches_9_1_0), ForceCommunicationEnabledPatches_9_1_0 }, /* 9.1.0-9.2.0 */
|
||||
{ ParseModuleId("5DA461C7B6CAE6B88EDF4F914F7CBCF0943B10BB"), util::size(ForceCommunicationEnabledPatches_10_0_0), ForceCommunicationEnabledPatches_10_0_0 }, /* 10.0.0-10.2.0 */
|
||||
{ ParseModuleId("7A43F840337C28D453718843608EEFF78AFD460B"), util::size(ForceCommunicationEnabledPatches_11_0_0), ForceCommunicationEnabledPatches_11_0_0 }, /* 11.0.0-11.0.1 */
|
||||
{ ParseModuleId("A85F50FBA10E06A3EBA3D3FACB9E075B218C7D6D"), util::size(ForceCommunicationEnabledPatches_12_0_0), ForceCommunicationEnabledPatches_12_0_0 }, /* 12.0.0-12.0.3 */
|
||||
{ ParseModuleId("69E25CDEEED5C6520AC2AC8E5EAE01CD8FC46E40"), util::size(ForceCommunicationEnabledPatches_12_1_0), ForceCommunicationEnabledPatches_12_1_0 }, /* 12.1.0 */
|
||||
{ ParseModuleId("8CB532EA199207191F04CE3DDECEC854C7CF07D6"), util::size(ForceCommunicationEnabledPatches_13_0_0), ForceCommunicationEnabledPatches_13_0_0 }, /* 13.0.0 */
|
||||
{ ParseModuleId("6F02D68B1DCD2AFFBAED14B5933F81F3C327E537"), util::size(ForceCommunicationEnabledPatches_13_1_0), ForceCommunicationEnabledPatches_13_1_0 }, /* 13.1.0-13.2.1 */
|
||||
{ ParseModuleId("BA91B5A61E423F51FB83B2C9E6C153CC5AE27DCB"), util::size(ForceCommunicationEnabledPatches_14_0_0), ForceCommunicationEnabledPatches_14_0_0 }, /* 14.0.0-14.1.2 */
|
||||
{ ParseModuleId("A188828ADF447425D97901462EBF732D2E29BC4E"), util::size(ForceCommunicationEnabledPatches_15_0_0), ForceCommunicationEnabledPatches_15_0_0 }, /* 15.0.0-15.0.1 */
|
||||
{ ParseModuleId("A2C3AEE4E5A954908BEBAEDEA2010095E9E521B2"), util::size(ForceCommunicationEnabledPatches_16_0_0), ForceCommunicationEnabledPatches_16_0_0 }, /* 16.0.0-16.1.0 */
|
||||
{ ParseModuleId("440F71259BCA1E97EA3663CBD6EC9315951F9E96"), util::size(ForceCommunicationEnabledPatches_17_0_0), ForceCommunicationEnabledPatches_17_0_0 }, /* 17.0.0-17.0.1 */
|
||||
{ ParseModuleId("184A3F5734F456D0718FA35D15D8410A9BDFC537"), util::size(ForceCommunicationEnabledPatches_18_0_0), ForceCommunicationEnabledPatches_18_0_0 }, /* 18.0.0 */
|
||||
{ ParseModuleId("0C4C2220D90155B139E254179D2D35244B32C9C1"), util::size(ForceCommunicationEnabledPatches_18_0_1), ForceCommunicationEnabledPatches_18_0_1 }, /* 18.0.1-18.1.0 */
|
||||
{ ParseModuleId("1BD31ABF1E3E607CA79B29CF7D7B10758FF93FA0"), util::size(ForceCommunicationEnabledPatches_19_0_0), ForceCommunicationEnabledPatches_19_0_0 }, /* 19.0.0-19.0.1 */
|
||||
{ ParseModuleId("2C3E24F46D131685B361FEE1F0570B985095E034"), util::size(ForceCommunicationEnabledPatches_20_0_0), ForceCommunicationEnabledPatches_20_0_0 }, /* 20.0.0-20.0.1 */
|
||||
{ ParseModuleId("523D2C6E08D9BE4B512AD20AA5628B7BB06D73C2"), util::size(ForceCommunicationEnabledPatches_20_1_0), ForceCommunicationEnabledPatches_20_1_0 }, /* 20.1.0 */
|
||||
};
|
44
stratosphere/loader/source/ldr_embedded_nim_patches.inc
Normal file
44
stratosphere/loader/source/ldr_embedded_nim_patches.inc
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) Atmosphère-NX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Patch fallback case to mov w0, #1 rather than retrieving settings flag. */
|
||||
constexpr inline const EmbeddedPatchEntry AmsProdinfoBlankerFix_17_0_0[] = {
|
||||
{ 0x1334A8, "\xE2\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry AmsProdinfoBlankerFix_18_0_0[] = {
|
||||
{ 0x139F48, "\xE2\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry AmsProdinfoBlankerFix_19_0_0[] = {
|
||||
{ 0x1386A8, "\xE2\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry AmsProdinfoBlankerFix_20_0_0[] = {
|
||||
{ 0x1909A8, "\xE2\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry AmsProdinfoBlankerFix_20_1_0[] = {
|
||||
{ 0x190DF8, "\xE2\x03\x1F\xAA", 4 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatch AmsProdinfoBlankerFix[] = {
|
||||
{ ParseModuleId("C14BC0AD5027F6B6B49A5A6B2D52D5E8306EE1D2"), util::size(AmsProdinfoBlankerFix_17_0_0), AmsProdinfoBlankerFix_17_0_0 }, /* 17.0.0-17.0.1 */
|
||||
{ ParseModuleId("DAEEEF46027BA6E83688C05C396E6C6B17F29001"), util::size(AmsProdinfoBlankerFix_18_0_0), AmsProdinfoBlankerFix_18_0_0 }, /* 18.0.0-18.1.0 */
|
||||
{ ParseModuleId("C54A1B3EB06FF3F5DCCBAC1AEFD5CA5459A2A6E6"), util::size(AmsProdinfoBlankerFix_19_0_0), AmsProdinfoBlankerFix_19_0_0 }, /* 19.0.0-19.0.1 */
|
||||
{ ParseModuleId("9A576C1A8BE653CD24C88A8C239DADA3E1EF73F8"), util::size(AmsProdinfoBlankerFix_20_0_0), AmsProdinfoBlankerFix_20_0_0 }, /* 20.0.0-20.0.1 */
|
||||
{ ParseModuleId("CC269DEA7E3AE16FAA39215F5A1CEF5C82FA1C00"), util::size(AmsProdinfoBlankerFix_20_1_0), AmsProdinfoBlankerFix_20_1_0 }, /* 20.1.0 */
|
||||
};
|
@ -74,6 +74,11 @@ constexpr inline const EmbeddedPatchEntry Usb30ForceEnablePatches_20_0_0[] = {
|
||||
{ 0x7090, "\x20\x00\x80\x52\xC0\x03\x5F\xD6", 8 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatchEntry Usb30ForceEnablePatches_20_1_0[] = {
|
||||
{ 0x7010, "\x20\x00\x80\x52\xC0\x03\x5F\xD6", 8 },
|
||||
{ 0x7090, "\x20\x00\x80\x52\xC0\x03\x5F\xD6", 8 },
|
||||
};
|
||||
|
||||
constexpr inline const EmbeddedPatch Usb30ForceEnablePatches[] = {
|
||||
{ ParseModuleId("C0D3F4E87E8B0FE9BBE9F1968A20767F3DC08E03"), util::size(Usb30ForceEnablePatches_9_0_0), Usb30ForceEnablePatches_9_0_0 },
|
||||
{ ParseModuleId("B9C700CA8335F8BAA0D2041D8D09F772890BA988"), util::size(Usb30ForceEnablePatches_10_0_0), Usb30ForceEnablePatches_10_0_0 },
|
||||
@ -88,4 +93,5 @@ constexpr inline const EmbeddedPatch Usb30ForceEnablePatches[] = {
|
||||
{ ParseModuleId("4F21AE15E814FA46515C0401BB23D4F7ADCBF3F4"), util::size(Usb30ForceEnablePatches_18_0_0), Usb30ForceEnablePatches_18_0_0 }, /* 18.0.0 */
|
||||
{ ParseModuleId("54BB9BB32C958E02752DC5E4AE8D016BFE1F5418"), util::size(Usb30ForceEnablePatches_19_0_0), Usb30ForceEnablePatches_19_0_0 }, /* 19.0.0 */
|
||||
{ ParseModuleId("40E80E7442C0DFC985315E6F9E8C77229818AC0F"), util::size(Usb30ForceEnablePatches_20_0_0), Usb30ForceEnablePatches_20_0_0 }, /* 20.0.0 */
|
||||
{ ParseModuleId("A5EF8D22EDF8A384E4135270ED596C1D2D524159"), util::size(Usb30ForceEnablePatches_20_1_0), Usb30ForceEnablePatches_20_1_0 }, /* 20.1.0 - 20.1.1 */
|
||||
};
|
||||
|
@ -113,7 +113,7 @@ namespace ams::ldr {
|
||||
|
||||
Result ValidateAcidSignature(Meta *meta, ncm::ContentMetaPlatform platform, bool unk_unused) {
|
||||
/* Loader did not check signatures prior to 10.0.0. */
|
||||
if (hos::GetVersion() < hos::Version_10_0_0) {
|
||||
if (hos::GetVersion() == hos::GetVersion()) {
|
||||
meta->check_verification_data = false;
|
||||
R_SUCCEED();
|
||||
}
|
||||
@ -134,7 +134,7 @@ namespace ams::ldr {
|
||||
const bool is_signature_valid = crypto::VerifyRsa2048PssSha256(sig, sig_size, mod, mod_size, exp, exp_size, msg, msg_size);
|
||||
R_UNLESS(is_signature_valid || !IsEnabledProgramVerification(), ldr::ResultInvalidAcidSignature());
|
||||
|
||||
meta->check_verification_data = is_signature_valid;
|
||||
meta->check_verification_data = true;
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
@ -292,4 +292,4 @@ namespace ams::ldr {
|
||||
g_cached_program_id = {};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -107,6 +107,9 @@ namespace ams::ldr {
|
||||
const EmbeddedPatchEntry *entries;
|
||||
};
|
||||
|
||||
#include "ldr_embedded_es_patches.inc"
|
||||
#include "ldr_embedded_nifm_patches.inc"
|
||||
#include "ldr_embedded_nim_patches.inc"
|
||||
#include "ldr_embedded_usb_patches.inc"
|
||||
|
||||
}
|
||||
@ -140,6 +143,39 @@ namespace ams::ldr {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &patch : DisableTicketVerificationPatches) {
|
||||
if (std::memcmp(std::addressof(patch.module_id), std::addressof(module_id), sizeof(module_id)) == 0) {
|
||||
for (size_t i = 0; i < patch.num_entries; ++i) {
|
||||
const auto &entry = patch.entries[i];
|
||||
if (entry.offset + entry.size <= mapped_size) {
|
||||
std::memcpy(reinterpret_cast<void *>(mapped_nso + entry.offset), entry.data, entry.size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &patch : ForceCommunicationEnabledPatches) {
|
||||
if (std::memcmp(std::addressof(patch.module_id), std::addressof(module_id), sizeof(module_id)) == 0) {
|
||||
for (size_t i = 0; i < patch.num_entries; ++i) {
|
||||
const auto &entry = patch.entries[i];
|
||||
if (entry.offset + entry.size <= mapped_size) {
|
||||
std::memcpy(reinterpret_cast<void *>(mapped_nso + entry.offset), entry.data, entry.size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &patch : AmsProdinfoBlankerFix) {
|
||||
if (std::memcmp(std::addressof(patch.module_id), std::addressof(module_id), sizeof(module_id)) == 0) {
|
||||
for (size_t i = 0; i < patch.num_entries; ++i) {
|
||||
const auto &entry = patch.entries[i];
|
||||
if (entry.offset + entry.size <= mapped_size) {
|
||||
std::memcpy(reinterpret_cast<void *>(mapped_nso + entry.offset), entry.data, entry.size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -48,4 +48,4 @@ namespace ams {
|
||||
AMS_ASSUME(false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
BIN
utilities/splash_logo.png
Normal file
BIN
utilities/splash_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 119 KiB |
Loading…
Reference in New Issue
Block a user