mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 03:11:16 +00:00
Add error printing for issues with libraries
It will now show erros for the following: - Missing or old libsys_minerva.bso (DRAM training). - Missing libsys_lp0.bso (LP0 sleep mode). - Missing or old Nyx version
This commit is contained in:
parent
24d30a40f9
commit
c6e92311f9
11 changed files with 115 additions and 50 deletions
9
Makefile
9
Makefile
|
@ -8,11 +8,7 @@ include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
IPL_LOAD_ADDR := 0x40008000
|
IPL_LOAD_ADDR := 0x40008000
|
||||||
IPL_MAGIC := 0x43544349 #"ICTC"
|
IPL_MAGIC := 0x43544349 #"ICTC"
|
||||||
BLVERSION_MAJOR := 5
|
include ./Versions.inc
|
||||||
BLVERSION_MINOR := 1
|
|
||||||
BLVERSION_HOTFX := 0
|
|
||||||
|
|
||||||
BL_RESERVED := 0
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
@ -60,7 +56,8 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
CUSTOMDEFINES := -DIPL_LOAD_ADDR=$(IPL_LOAD_ADDR) -DBL_MAGIC=$(IPL_MAGIC)
|
CUSTOMDEFINES := -DIPL_LOAD_ADDR=$(IPL_LOAD_ADDR) -DBL_MAGIC=$(IPL_MAGIC)
|
||||||
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BL_RESERVED)
|
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BLVERSION_RSVD)
|
||||||
|
CUSTOMDEFINES += -DNYX_VER_MJ=$(NYXVERSION_MAJOR) -DNYX_VER_MN=$(NYXVERSION_MINOR) -DNYX_VER_HF=$(NYXVERSION_HOTFX) -DNYX_RESERVED=$(NYXVERSION_RSVD)
|
||||||
#CUSTOMDEFINES += -DMENU_LOGO_ENABLE
|
#CUSTOMDEFINES += -DMENU_LOGO_ENABLE
|
||||||
|
|
||||||
# 0: UART_A, 1: UART_B.
|
# 0: UART_A, 1: UART_B.
|
||||||
|
|
11
Versions.inc
Normal file
11
Versions.inc
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# IPL Version.
|
||||||
|
BLVERSION_MAJOR := 5
|
||||||
|
BLVERSION_MINOR := 1
|
||||||
|
BLVERSION_HOTFX := 0
|
||||||
|
BLVERSION_RSVD := 0
|
||||||
|
|
||||||
|
# Nyx Version.
|
||||||
|
NYXVERSION_MAJOR := 0
|
||||||
|
NYXVERSION_MINOR := 8
|
||||||
|
NYXVERSION_HOTFX := 3
|
||||||
|
NYXVERSION_RSVD := 0
|
|
@ -40,11 +40,6 @@ typedef struct _hekate_config
|
||||||
u32 errors;
|
u32 errors;
|
||||||
} hekate_config;
|
} hekate_config;
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
ERR_LIBSYS_LP0 = (1 << 0),
|
|
||||||
} hsysmodule_t;
|
|
||||||
|
|
||||||
void set_default_configuration();
|
void set_default_configuration();
|
||||||
int create_config_entry();
|
int create_config_entry();
|
||||||
void config_autoboot();
|
void config_autoboot();
|
||||||
|
|
|
@ -157,13 +157,9 @@ void *tui_do_menu(menu_t *menu)
|
||||||
gfx_con_setcol(0xFFCCCCCC, 1, 0xFF1B1B1B);
|
gfx_con_setcol(0xFFCCCCCC, 1, 0xFF1B1B1B);
|
||||||
gfx_putc('\n');
|
gfx_putc('\n');
|
||||||
|
|
||||||
// Print erros, help and battery status.
|
// Print errors, help and battery status.
|
||||||
gfx_con_setpos(0, h_cfg.errors ? 1111 : 1127);
|
gfx_con_setpos(0, 1127);
|
||||||
gfx_printf("%k Warning: %k", 0xFF800000, 0xFF555555);
|
gfx_printf("%k Warning: %k Nyx is missing!", 0xFF800000, 0xFF555555);
|
||||||
if (h_cfg.errors & ERR_LIBSYS_LP0)
|
|
||||||
gfx_printf("Sleep mode library is missing!\n");
|
|
||||||
gfx_printf(" Nyx is missing!\n");
|
|
||||||
|
|
||||||
gfx_con_setpos(0, 1191);
|
gfx_con_setpos(0, 1191);
|
||||||
gfx_printf("%k VOL: Move up/down\n PWR: Select option%k", 0xFF555555, 0xFFCCCCCC);
|
gfx_printf("%k VOL: Move up/down\n PWR: Select option%k", 0xFF555555, 0xFFCCCCCC);
|
||||||
|
|
||||||
|
|
|
@ -678,6 +678,8 @@ out:
|
||||||
btn_wait();
|
btn_wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define NYX_VER_OFF 0x9C
|
||||||
|
|
||||||
void nyx_load_run()
|
void nyx_load_run()
|
||||||
{
|
{
|
||||||
sd_mount();
|
sd_mount();
|
||||||
|
@ -688,6 +690,9 @@ void nyx_load_run()
|
||||||
|
|
||||||
sd_unmount();
|
sd_unmount();
|
||||||
|
|
||||||
|
u32 expected_nyx_ver = ((NYX_VER_MJ + '0') << 24) | ((NYX_VER_MN + '0') << 16) | ((NYX_VER_HF + '0') << 8);
|
||||||
|
u32 nyx_ver = byte_swap_32(*(u32 *)(nyx + NYX_VER_OFF));
|
||||||
|
|
||||||
gfx_clear_grey(0x1B);
|
gfx_clear_grey(0x1B);
|
||||||
u8 *BOOTLOGO = (void *)malloc(0x4000);
|
u8 *BOOTLOGO = (void *)malloc(0x4000);
|
||||||
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
|
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
|
||||||
|
@ -695,16 +700,29 @@ void nyx_load_run()
|
||||||
free(BOOTLOGO);
|
free(BOOTLOGO);
|
||||||
display_backlight_brightness(h_cfg.backlight, 1000);
|
display_backlight_brightness(h_cfg.backlight, 1000);
|
||||||
|
|
||||||
|
// Check if Nyx version is old.
|
||||||
|
if (nyx_ver < expected_nyx_ver)
|
||||||
|
{
|
||||||
|
h_cfg.errors |= ERR_SYSOLD_NYX;
|
||||||
|
|
||||||
|
gfx_con_setpos(0, 0);
|
||||||
|
WPRINTF("Old Nyx GUI found! There will be dragons!\n");
|
||||||
|
WPRINTF("\nUpdate your bootloader folder!\n\n");
|
||||||
|
WPRINTF("Press any key...");
|
||||||
|
|
||||||
|
msleep(2000);
|
||||||
|
btn_wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
nyx_str->info.errors = h_cfg.errors;
|
||||||
nyx_str->cfg = 0;
|
nyx_str->cfg = 0;
|
||||||
if (b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
if (b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
||||||
{
|
{
|
||||||
b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_DUMP);
|
b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_DUMP);
|
||||||
nyx_str->cfg |= NYX_CFG_DUMP;
|
nyx_str->cfg |= NYX_CFG_DUMP;
|
||||||
}
|
}
|
||||||
if (nyx_str->mtc_cfg.mtc_table)
|
|
||||||
nyx_str->cfg |= NYX_CFG_MINERVA;
|
|
||||||
|
|
||||||
nyx_str->version = ipl_ver.version - 0x303030;
|
nyx_str->version = ipl_ver.version - 0x303030; // Convert ASCII to numbers.
|
||||||
|
|
||||||
//memcpy((u8 *)nyx_str->irama, (void *)IRAM_BASE, 0x8000);
|
//memcpy((u8 *)nyx_str->irama, (void *)IRAM_BASE, 0x8000);
|
||||||
volatile reloc_meta_t *reloc = (reloc_meta_t *)(IPL_LOAD_ADDR + RELOC_META_OFF);
|
volatile reloc_meta_t *reloc = (reloc_meta_t *)(IPL_LOAD_ADDR + RELOC_META_OFF);
|
||||||
|
@ -749,7 +767,7 @@ static ini_sec_t *get_ini_sec_from_id(ini_sec_t *ini_sec, char **bootlogoCustomE
|
||||||
return cfg_sec;
|
return cfg_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void auto_launch_firmware()
|
static void _auto_launch_firmware()
|
||||||
{
|
{
|
||||||
if(b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
if(b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
||||||
{
|
{
|
||||||
|
@ -1019,7 +1037,7 @@ skip_list:
|
||||||
hos_launch(cfg_sec);
|
hos_launch(cfg_sec);
|
||||||
|
|
||||||
EPRINTF("\nFailed to launch HOS!");
|
EPRINTF("\nFailed to launch HOS!");
|
||||||
gfx_printf("\nPress any key and try again...\n");
|
gfx_printf("\nPress any key...\n");
|
||||||
msleep(500);
|
msleep(500);
|
||||||
btn_wait();
|
btn_wait();
|
||||||
}
|
}
|
||||||
|
@ -1038,7 +1056,7 @@ out:
|
||||||
sd_unmount();
|
sd_unmount();
|
||||||
}
|
}
|
||||||
|
|
||||||
void patched_rcm_protection()
|
static void _patched_rcm_protection()
|
||||||
{
|
{
|
||||||
sdmmc_storage_t storage;
|
sdmmc_storage_t storage;
|
||||||
sdmmc_t sdmmc;
|
sdmmc_t sdmmc;
|
||||||
|
@ -1080,7 +1098,28 @@ void patched_rcm_protection()
|
||||||
sdmmc_storage_end(&storage);
|
sdmmc_storage_end(&storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void about()
|
static void _show_errors()
|
||||||
|
{
|
||||||
|
if (h_cfg.errors)
|
||||||
|
{
|
||||||
|
gfx_clear_grey(0x1B);
|
||||||
|
gfx_con_setpos(0, 0);
|
||||||
|
display_backlight_brightness(h_cfg.backlight, 1000);
|
||||||
|
|
||||||
|
if (h_cfg.errors & ERR_LIBSYS_LP0)
|
||||||
|
WPRINTF("Missing LP0 (sleep mode) library!\n");
|
||||||
|
if (h_cfg.errors & ERR_SYSOLD_MTC)
|
||||||
|
WPRINTF("Missing or old Minerva library!\n");
|
||||||
|
|
||||||
|
WPRINTF("\nUpdate your bootloader folder!\n\n");
|
||||||
|
WPRINTF("Press any key...");
|
||||||
|
|
||||||
|
msleep(2000);
|
||||||
|
btn_wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _about()
|
||||||
{
|
{
|
||||||
static const char credits[] =
|
static const char credits[] =
|
||||||
"\nhekate (c) 2018 naehrwert, st4rk\n\n"
|
"\nhekate (c) 2018 naehrwert, st4rk\n\n"
|
||||||
|
@ -1228,7 +1267,7 @@ ment_t ment_top[] = {
|
||||||
MDEF_HANDLER("Reboot (RCM)", reboot_rcm),
|
MDEF_HANDLER("Reboot (RCM)", reboot_rcm),
|
||||||
MDEF_HANDLER("Power off", power_off),
|
MDEF_HANDLER("Power off", power_off),
|
||||||
MDEF_CAPTION("---------------", 0xFF444444),
|
MDEF_CAPTION("---------------", 0xFF444444),
|
||||||
MDEF_HANDLER("About", about),
|
MDEF_HANDLER("About", _about),
|
||||||
MDEF_END()
|
MDEF_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1262,7 +1301,8 @@ void ipl_main()
|
||||||
h_cfg.errors |= ERR_LIBSYS_LP0;
|
h_cfg.errors |= ERR_LIBSYS_LP0;
|
||||||
|
|
||||||
// Train DRAM and switch to max frequency.
|
// Train DRAM and switch to max frequency.
|
||||||
minerva_init();
|
if (minerva_init())
|
||||||
|
h_cfg.errors |= ERR_SYSOLD_MTC;
|
||||||
|
|
||||||
display_init();
|
display_init();
|
||||||
|
|
||||||
|
@ -1286,13 +1326,16 @@ void ipl_main()
|
||||||
secmon_exo_check_panic();
|
secmon_exo_check_panic();
|
||||||
|
|
||||||
// Check if RCM is patched and protect from a possible brick.
|
// Check if RCM is patched and protect from a possible brick.
|
||||||
patched_rcm_protection();
|
_patched_rcm_protection();
|
||||||
|
|
||||||
// Load emuMMC configuration from SD.
|
// Load emuMMC configuration from SD.
|
||||||
emummc_load_cfg();
|
emummc_load_cfg();
|
||||||
|
|
||||||
|
// Show library errors.
|
||||||
|
_show_errors();
|
||||||
|
|
||||||
// Load saved configuration and auto boot if enabled.
|
// Load saved configuration and auto boot if enabled.
|
||||||
auto_launch_firmware();
|
_auto_launch_firmware();
|
||||||
|
|
||||||
minerva_change_freq(FREQ_800);
|
minerva_change_freq(FREQ_800);
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,17 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "../mem/minerva.h"
|
#include "../mem/minerva.h"
|
||||||
|
|
||||||
#define NYX_CFG_DUMP (1 << 7)
|
typedef enum
|
||||||
#define NYX_CFG_MINERVA (1 << 8)
|
{
|
||||||
|
NYX_CFG_DUMP = (1 << 7),
|
||||||
|
} nyx_cfg_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ERR_LIBSYS_LP0 = (1 << 0),
|
||||||
|
ERR_SYSOLD_NYX = (1 << 1),
|
||||||
|
ERR_SYSOLD_MTC = (1 << 2),
|
||||||
|
} hekate_errors_t;
|
||||||
|
|
||||||
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
||||||
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
||||||
|
@ -33,13 +42,20 @@ typedef struct _cfg_op_t
|
||||||
u32 val;
|
u32 val;
|
||||||
} cfg_op_t;
|
} cfg_op_t;
|
||||||
|
|
||||||
|
typedef struct _nyx_info_t
|
||||||
|
{
|
||||||
|
u32 rsvd;
|
||||||
|
u32 errors;
|
||||||
|
} nyx_info_t;
|
||||||
|
|
||||||
typedef struct _nyx_storage_t
|
typedef struct _nyx_storage_t
|
||||||
{
|
{
|
||||||
u32 version;
|
u32 version;
|
||||||
u32 cfg;
|
u32 cfg;
|
||||||
u8 irama[0x8000];
|
u8 irama[0x8000];
|
||||||
u8 hekate[0x30000];
|
u8 hekate[0x30000];
|
||||||
u8 rsvd[0x800000];
|
u8 rsvd[0x800000 - sizeof(nyx_info_t)];
|
||||||
|
nyx_info_t info;
|
||||||
mtc_config_t mtc_cfg;
|
mtc_config_t mtc_cfg;
|
||||||
emc_table_t mtc_table;
|
emc_table_t mtc_table;
|
||||||
} nyx_storage_t;
|
} nyx_storage_t;
|
||||||
|
|
10
nyx/Makefile
10
nyx/Makefile
|
@ -8,11 +8,7 @@ include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
NYX_LOAD_ADDR := 0x81000000
|
NYX_LOAD_ADDR := 0x81000000
|
||||||
NYX_MAGIC := 0x43544347 #"GCTC"
|
NYX_MAGIC := 0x43544347 #"GCTC"
|
||||||
BLVERSION_MAJOR := 0
|
include ./../Versions.inc
|
||||||
BLVERSION_MINOR := 8
|
|
||||||
BLVERSION_HOTFX := 3
|
|
||||||
|
|
||||||
BL_RESERVED := 0
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
@ -72,8 +68,8 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
CUSTOMDEFINES += -DNYX_LOAD_ADDR=$(NYX_LOAD_ADDR) -DBL_MAGIC=$(NYX_MAGIC)
|
CUSTOMDEFINES += -DNYX_LOAD_ADDR=$(NYX_LOAD_ADDR) -DNYX_MAGIC=$(NYX_MAGIC)
|
||||||
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BL_RESERVED)
|
CUSTOMDEFINES += -DNYX_VER_MJ=$(NYXVERSION_MAJOR) -DNYX_VER_MN=$(NYXVERSION_MINOR) -DNYX_VER_HF=$(NYXVERSION_HOTFX) -DNYX_RESERVED=$(NYXVERSION_RSVD)
|
||||||
|
|
||||||
# 0: UART_A, 1: UART_B.
|
# 0: UART_A, 1: UART_B.
|
||||||
#CUSTOMDEFINES += -DDEBUG_UART_PORT=1
|
#CUSTOMDEFINES += -DDEBUG_UART_PORT=1
|
||||||
|
|
|
@ -40,11 +40,6 @@ typedef struct _hekate_config
|
||||||
u32 errors;
|
u32 errors;
|
||||||
} hekate_config;
|
} hekate_config;
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
ERR_LIBSYS_LP0 = (1 << 0),
|
|
||||||
} hsysmodule_t;
|
|
||||||
|
|
||||||
void set_default_configuration();
|
void set_default_configuration();
|
||||||
int create_config_entry();
|
int create_config_entry();
|
||||||
|
|
||||||
|
|
|
@ -757,7 +757,7 @@ static void _create_tab_about(lv_theme_t * th, lv_obj_t * parent)
|
||||||
lv_obj_align(ctcaer_img, lbl_octopus, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, LV_DPI * 2 / 3);
|
lv_obj_align(ctcaer_img, lbl_octopus, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, LV_DPI * 2 / 3);
|
||||||
|
|
||||||
char version[32];
|
char version[32];
|
||||||
s_printf(version, "Nyx v%d.%d.%d", BL_VER_MJ, BL_VER_MN, BL_VER_HF);
|
s_printf(version, "Nyx v%d.%d.%d", NYX_VER_MJ, NYX_VER_MN, NYX_VER_HF);
|
||||||
lv_obj_t * lbl_ver = lv_label_create(parent, NULL);
|
lv_obj_t * lbl_ver = lv_label_create(parent, NULL);
|
||||||
lv_obj_align(lbl_ver, ctcaer_img, LV_ALIGN_OUT_BOTTOM_RIGHT, -LV_DPI / 20, LV_DPI / 4);
|
lv_obj_align(lbl_ver, ctcaer_img, LV_ALIGN_OUT_BOTTOM_RIGHT, -LV_DPI / 20, LV_DPI / 4);
|
||||||
lv_ta_set_style(lbl_ver, LV_TA_STYLE_BG, &monospace_text);
|
lv_ta_set_style(lbl_ver, LV_TA_STYLE_BG, &monospace_text);
|
||||||
|
|
|
@ -63,8 +63,8 @@ u8 *Kc_MENU_LOGO;
|
||||||
hekate_config h_cfg;
|
hekate_config h_cfg;
|
||||||
|
|
||||||
const volatile ipl_ver_meta_t __attribute__((section ("._ipl_version"))) ipl_ver = {
|
const volatile ipl_ver_meta_t __attribute__((section ("._ipl_version"))) ipl_ver = {
|
||||||
.magic = BL_MAGIC,
|
.magic = NYX_MAGIC,
|
||||||
.version = (BL_VER_MJ + '0') | ((BL_VER_MN + '0') << 8) | ((BL_VER_HF + '0') << 16),
|
.version = (NYX_VER_MJ + '0') | ((NYX_VER_MN + '0') << 8) | ((NYX_VER_HF + '0') << 16),
|
||||||
.rsvd0 = 0,
|
.rsvd0 = 0,
|
||||||
.rsvd1 = 0
|
.rsvd1 = 0
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,8 +21,17 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "../mem/minerva.h"
|
#include "../mem/minerva.h"
|
||||||
|
|
||||||
#define NYX_CFG_DUMP (1 << 7)
|
typedef enum
|
||||||
#define NYX_CFG_MINERVA (1 << 8)
|
{
|
||||||
|
NYX_CFG_DUMP = (1 << 7),
|
||||||
|
} nyx_cfg_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ERR_LIBSYS_LP0 = (1 << 0),
|
||||||
|
ERR_SYSOLD_NYX = (1 << 1),
|
||||||
|
ERR_SYSOLD_MTC = (1 << 2),
|
||||||
|
} hekate_errors_t;
|
||||||
|
|
||||||
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
||||||
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
||||||
|
@ -33,13 +42,20 @@ typedef struct _cfg_op_t
|
||||||
u32 val;
|
u32 val;
|
||||||
} cfg_op_t;
|
} cfg_op_t;
|
||||||
|
|
||||||
|
typedef struct _nyx_info_t
|
||||||
|
{
|
||||||
|
u32 rsvd;
|
||||||
|
u32 errors;
|
||||||
|
} nyx_info_t;
|
||||||
|
|
||||||
typedef struct _nyx_storage_t
|
typedef struct _nyx_storage_t
|
||||||
{
|
{
|
||||||
u32 version;
|
u32 version;
|
||||||
u32 cfg;
|
u32 cfg;
|
||||||
u8 irama[0x8000];
|
u8 irama[0x8000];
|
||||||
u8 hekate[0x30000];
|
u8 hekate[0x30000];
|
||||||
u8 rsvd[0x800000];
|
u8 rsvd[0x800000 - sizeof(nyx_info_t)];
|
||||||
|
nyx_info_t info;
|
||||||
mtc_config_t mtc_cfg;
|
mtc_config_t mtc_cfg;
|
||||||
emc_table_t mtc_table;
|
emc_table_t mtc_table;
|
||||||
} nyx_storage_t;
|
} nyx_storage_t;
|
||||||
|
|
Loading…
Reference in a new issue