From ea56cd4b15de03f5486fe91c0851c49138f0f963 Mon Sep 17 00:00:00 2001 From: Aldo Vargas Date: Tue, 27 Feb 2024 12:24:53 -0400 Subject: [PATCH] IRISMAN 4.91 - Added support for 4.91 (untested) --- Makefile | 2 +- include/payload475/payload_475.h | 4 +- include/payload475deh/payload_475deh.h | 4 +- include/payload481dex/payload_481dex.h | 4 +- source/controlfan.c | 24 +++++----- source/main.c | 8 ++-- source/main_mount.h | 2 +- source/main_payload.h | 66 ++++++++++++++++++++++++-- source/mount_game.h | 6 +-- source/payload475/payload_475.c | 43 +++++++++++------ source/payload475deh/payload_475deh.c | 34 ++++++++++++- source/payload480/payload_480.c | 17 ++++++- source/payload481dex/payload_481dex.c | 34 ++++++++++++- 13 files changed, 202 insertions(+), 46 deletions(-) diff --git a/Makefile b/Makefile index d58d999..437ca22 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ include $(PSL1GHT)/ppu_rules # aditional scetool flags (--self-ctrl-flags, --self-cap-flags...) SCETOOL_FLAGS += --self-ctrl-flags 4000000000000000000000000000000000000000000000000000000000000002 -SCETOOL_FLAGS += --self-cap-flags 00000000000000000000000000000000000000000000007B0000000100000000 +SCETOOL_FLAGS += --self-cap-flags 00000000000000000000000000000000000000000000007B0000000100002000 #--------------------------------------------------------------------------------- # TARGET is the name of the output diff --git a/include/payload475/payload_475.h b/include/payload475/payload_475.h index 075962a..e965140 100644 --- a/include/payload475/payload_475.h +++ b/include/payload475/payload_475.h @@ -21,7 +21,9 @@ extern int is_firm_485(void); extern int is_firm_486(void); extern int is_firm_487(void); extern int is_firm_488(void); -extern int is_firm_48X(void); +extern int is_firm_489(void); +extern int is_firm_490(void); +extern int is_firm_491(void); extern void set_bdvdemu_475(int current_payload); extern void load_payload_475(int mode); extern int is_payload_loaded_475(void); diff --git a/include/payload475deh/payload_475deh.h b/include/payload475deh/payload_475deh.h index ca4f0f9..cefe335 100644 --- a/include/payload475deh/payload_475deh.h +++ b/include/payload475deh/payload_475deh.h @@ -21,7 +21,9 @@ extern int is_firm_485deh(void); extern int is_firm_486deh(void); extern int is_firm_487deh(void); extern int is_firm_488deh(void); -extern int is_firm_48Xdeh(void); +extern int is_firm_489deh(void); +extern int is_firm_490deh(void); +extern int is_firm_49Xdeh(void); extern void set_bdvdemu_475deh(int current_payload); extern void load_payload_475deh(int mode); extern int is_payload_loaded_475deh(void); diff --git a/include/payload481dex/payload_481dex.h b/include/payload481dex/payload_481dex.h index 9ea4a0b..fd59ff3 100644 --- a/include/payload481dex/payload_481dex.h +++ b/include/payload481dex/payload_481dex.h @@ -18,7 +18,9 @@ extern int is_firm_485dex(void); extern int is_firm_486dex(void); extern int is_firm_487dex(void); extern int is_firm_488dex(void); -extern int is_firm_48Xdex(void); +extern int is_firm_489dex(void); +extern int is_firm_490dex(void); +extern int is_firm_49Xdex(void); extern void set_bdvdemu_481dex(int current_payload); extern void load_payload_481dex(int mode); extern int is_payload_loaded_481dex(void); diff --git a/source/controlfan.c b/source/controlfan.c index d14220b..fe0e416 100644 --- a/source/controlfan.c +++ b/source/controlfan.c @@ -433,7 +433,7 @@ int get_controlfan_offsets() // enables sys_set_leds sys386_offset = 0x800000000000A47CULL; - } else if((firmware == 0x475C) || (firmware == 0x476C) || (firmware == 0x478C) || (firmware == 0x481C) || (firmware == 0x482C) || (firmware == 0x483C) || (firmware == 0x484C) || (firmware == 0x485C) || (firmware == 0x486C) || (firmware == 0x487C) || (firmware == 0x488C) || (firmware == 0x489C)) { // firmware 4.75-4.89 cex + } else if((firmware == 0x475C) || (firmware == 0x476C) || (firmware == 0x478C) || (firmware == 0x481C) || (firmware == 0x482C) || (firmware == 0x483C) || (firmware == 0x484C) || (firmware == 0x485C) || (firmware == 0x486C) || (firmware == 0x487C) || (firmware == 0x488C) || (firmware == 0x489C) || (firmware == 0x491C)) { // firmware 4.75-4.91 cex // enables sys_game_get_temperature sys383_offset = 0x800000000000C6A8ULL; @@ -444,28 +444,28 @@ int get_controlfan_offsets() // enables sys_set_leds sys386_offset = 0x800000000000A3FCULL; - } else if((firmware == 0x475D) || (firmware == 0x476D) || (firmware == 0x478D) || (firmware == 0x481D) || (firmware == 0x482D) || (firmware == 0x483D) || (firmware == 0x484D) || (firmware == 0x485D) || (firmware == 0x486D) || (firmware == 0x487D) || (firmware == 0x488D) || (firmware == 0x489D) - || (firmware == 0x475E) || (firmware == 0x476E) || (firmware == 0x478E) || (firmware == 0x481E) || (firmware == 0x482E) || (firmware == 0x483E) || (firmware == 0x484E) || (firmware == 0x485E) || (firmware == 0x486E) || (firmware == 0x487E) || (firmware == 0x488E) || (firmware == 0x489E)) { // firmware 4.75-4.89 dex / deh + } else if((firmware == 0x480C) || (firmware == 0x490C)) { // firmware 4.80 cex / 4.90 cex // enables sys_game_get_temperature - sys383_offset = 0x800000000000C728ULL; + sys383_offset = 0x800000000000C6A4ULL; // enables sys_sm_get_fan_policy - sys409_offset = 0x8000000000009EB8ULL; + sys409_offset = 0x8000000000009E38ULL; // enables sys_sm_set_fan_policy - sys389_offset = 0x800000000000A3B4ULL; + sys389_offset = 0x800000000000A334ULL; // enables sys_set_leds - sys386_offset = 0x800000000000A47CULL; + sys386_offset = 0x800000000000A3FCULL; - } else if(firmware == 0x480C) { // firmware 4.80 cex + } else if((firmware == 0x475D) || (firmware == 0x476D) || (firmware == 0x478D) || (firmware == 0x481D) || (firmware == 0x482D) || (firmware == 0x483D) || (firmware == 0x484D) || (firmware == 0x485D) || (firmware == 0x486D) || (firmware == 0x487D) || (firmware == 0x488D) || (firmware == 0x489D) || (firmware == 0x490D) || (firmware == 0x491D) + || (firmware == 0x475E) || (firmware == 0x476E) || (firmware == 0x478E) || (firmware == 0x481E) || (firmware == 0x482E) || (firmware == 0x483E) || (firmware == 0x484E) || (firmware == 0x485E) || (firmware == 0x486E) || (firmware == 0x487E) || (firmware == 0x488E) || (firmware == 0x489E) || (firmware == 0x490E) || (firmware == 0x491E)) { // firmware 4.75-4.91 dex / deh // enables sys_game_get_temperature - sys383_offset = 0x800000000000C6A4ULL; + sys383_offset = 0x800000000000C728ULL; // enables sys_sm_get_fan_policy - sys409_offset = 0x8000000000009E38ULL; + sys409_offset = 0x8000000000009EB8ULL; // enables sys_sm_set_fan_policy - sys389_offset = 0x800000000000A334ULL; + sys389_offset = 0x800000000000A3B4ULL; // enables sys_set_leds - sys386_offset = 0x800000000000A3FCULL; + sys386_offset = 0x800000000000A47CULL; } else if((firmware == 0x480D) || (firmware == 0x480E)) { // firmware 4.80 dex / deh diff --git a/source/main.c b/source/main.c index 387f713..ce83691 100644 --- a/source/main.c +++ b/source/main.c @@ -2133,8 +2133,8 @@ void read_settings() char InstallMamba[2] = "1"; char LoadMambaAndQuit[2] = "0"; - spoof_version = 0x0489; - spoof_revision = 0x00010aad; //4.88 = 0x000109f5; // 4.87 = 0x000109a5; //4.86 = 0x00010938 // 4.85 = 0x0001091d + spoof_version = 0x0490; + spoof_revision = 0x00010b14; //4.89 = 0x00010aad, 4.88 = 0x000109f5; // 4.87 = 0x000109a5; //4.86 = 0x00010938 // 4.85 = 0x0001091d // set default values sprintf(covers_path, "%s/USRDIR/covers/", MM_PATH); @@ -2626,7 +2626,7 @@ s32 main(s32 argc, const char* argv[]) { bAllowNetGames = is_ps3hen || (sys8_mamba() == 0x666) || (get_vsh_plugin_slot_by_name("WWWD") > 0); - if(!bAllowNetGames) + //if(!bAllowNetGames) { int slot = get_vsh_plugin_free_slot(); @@ -9508,7 +9508,7 @@ void draw_gbloptions(float x, float y) if((old_pad & (BUTTON_SELECT | BUTTON_L2)) && file_exists("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self")) { - sysProcessExitSpawn2("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self", NULL, NULL, NULL, 0, 3071, SYS_PROCESS_SPAWN_STACK_SIZE_1M); + sysProcessExitSpawn2("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self", NULL, NULL, NULL, 0, 1200, SYS_PROCESS_SPAWN_STACK_SIZE_1M); exit(0); } else diff --git a/source/main_mount.h b/source/main_mount.h index e8597fb..e388120 100644 --- a/source/main_mount.h +++ b/source/main_mount.h @@ -280,7 +280,7 @@ { if((old_pad & (BUTTON_SELECT | BUTTON_L2)) && file_exists("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self")) { - sysProcessExitSpawn2("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self", NULL, NULL, NULL, 0, 3071, SYS_PROCESS_SPAWN_STACK_SIZE_1M); + sysProcessExitSpawn2("/dev_hdd0/game/HTSS00003/USRDIR/showtime.self", NULL, NULL, NULL, 0, 1200, SYS_PROCESS_SPAWN_STACK_SIZE_1M); return r; } else diff --git a/source/main_payload.h b/source/main_payload.h index 7f55c6a..dcb52e4 100644 --- a/source/main_payload.h +++ b/source/main_payload.h @@ -268,7 +268,7 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_475(); } - else if(is_firm_48X()) + else if(is_firm_489()) { firmware = 0x489C; //fw_ver = 0xBF04; @@ -277,6 +277,24 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_475(); } + else if(is_firm_490()) + { + firmware = 0x490C; + //fw_ver = 0x10b14; + off_idps = 0x80000000003E2E30ULL; + off_idps2 = 0x8000000000474AF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_480(); + } + else if(is_firm_491()) + { + firmware = 0x491C; + //fw_ver = 0x10b28; + off_idps = 0x80000000003E2E30ULL; + off_idps2 = 0x8000000000474AF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_475(); + } else if(is_firm_421dex()) { firmware = 0x421D; @@ -469,7 +487,7 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_481dex(); } - else if(is_firm_48Xdex()) + else if(is_firm_489dex()) { firmware = 0x489D; //fw_ver = 0xBF04; @@ -478,6 +496,24 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_481dex(); } + else if(is_firm_490dex()) + { + firmware = 0x490D; + //fw_ver = 0xBF04; + off_idps = 0x8000000000409A30ULL; + off_idps2 = 0x800000000049CAF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_481dex(); + } + else if(is_firm_49Xdex()) + { + firmware = 0x491D; + //fw_ver = 0xBF04; + off_idps = 0x8000000000409A30ULL; + off_idps2 = 0x800000000049CAF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_481dex(); + } else if(is_firm_460deh()) { firmware = 0x460E; @@ -604,7 +640,7 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_475deh(); } - else if(is_firm_48Xdeh()) + else if(is_firm_489deh()) { firmware = 0x489E; //fw_ver = 0xBF04; @@ -613,6 +649,24 @@ off_psid = off_idps2 + 0x18ULL; payload_mode = is_payload_loaded_475deh(); } + else if(is_firm_490deh()) + { + firmware = 0x490E; + //fw_ver = 0xBF04; + off_idps = 0x80000000004326B0ULL; + off_idps2 = 0x80000000004C4AF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_475deh(); + } + else if(is_firm_49Xdeh()) + { + firmware = 0x491E; + //fw_ver = 0xBF04; + off_idps = 0x80000000004326B0ULL; + off_idps2 = 0x80000000004C4AF4ULL; + off_psid = off_idps2 + 0x18ULL; + payload_mode = is_payload_loaded_475deh(); + } if(is_cobra_based()) use_cobra = true; @@ -1209,6 +1263,7 @@ case 0x487C: case 0x488C: case 0x489C: + case 0x491C: set_bdvdemu_475(payload_mode); switch(payload_mode) { @@ -1258,6 +1313,8 @@ case 0x487E: case 0x488E: case 0x489E: + case 0x490E: + case 0x491E: set_bdvdemu_475deh(payload_mode); switch(payload_mode) { @@ -1276,6 +1333,7 @@ } break; case 0x480C: + case 0x490C: set_bdvdemu_480(payload_mode); switch(payload_mode) { @@ -1338,6 +1396,8 @@ case 0x487D: case 0x488D: case 0x489D: + case 0x490D: + case 0x491D: set_bdvdemu_481dex(payload_mode); switch(payload_mode) { diff --git a/source/mount_game.h b/source/mount_game.h index 877bd9a..ac12811 100644 --- a/source/mount_game.h +++ b/source/mount_game.h @@ -303,7 +303,7 @@ void launch_showtime(bool playmode) fun_exit(); SaveGameList(); - sysProcessExitSpawn2((const char*)stself, NULL, NULL, NULL, 0, 3071, SYS_PROCESS_SPAWN_STACK_SIZE_1M); + sysProcessExitSpawn2((const char*)stself, NULL, NULL, NULL, 0, 1200, SYS_PROCESS_SPAWN_STACK_SIZE_1M); exit(0); } @@ -312,7 +312,7 @@ void launch_showtime(bool playmode) fun_exit(); SaveGameList(); - sysProcessExitSpawn2((const char*)MOVIAN, NULL, NULL, NULL, 0, 3071, SYS_PROCESS_SPAWN_STACK_SIZE_1M); + sysProcessExitSpawn2((const char*)MOVIAN, NULL, NULL, NULL, 0, 1200, SYS_PROCESS_SPAWN_STACK_SIZE_1M); exit(0); } @@ -321,7 +321,7 @@ void launch_showtime(bool playmode) fun_exit(); SaveGameList(); - sysProcessExitSpawn2((const char*)SHOWTIME, NULL, NULL, NULL, 0, 3071, SYS_PROCESS_SPAWN_STACK_SIZE_1M); + sysProcessExitSpawn2((const char*)SHOWTIME, NULL, NULL, NULL, 0, 1200, SYS_PROCESS_SPAWN_STACK_SIZE_1M); exit(0); } } diff --git a/source/payload475/payload_475.c b/source/payload475/payload_475.c index 8b73a38..02471ba 100644 --- a/source/payload475/payload_475.c +++ b/source/payload475/payload_475.c @@ -101,7 +101,7 @@ static inline void _poke32(u64 addr, uint32_t val) int is_firm_475(void) { - // TOC 4.75 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.75 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -116,7 +116,7 @@ int is_firm_475(void) int is_firm_476(void) { - // TOC 4.76 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.76 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc =peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -131,7 +131,7 @@ int is_firm_476(void) int is_firm_478(void) { - // TOC 4.78 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.78 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc =peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -146,7 +146,7 @@ int is_firm_478(void) int is_firm_481(void) { - // TOC 4.81 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.81 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -161,7 +161,7 @@ int is_firm_481(void) int is_firm_482(void) { - // TOC 4.82 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.82 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -176,7 +176,7 @@ int is_firm_482(void) int is_firm_483(void) { - // TOC 4.83 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.83 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -191,7 +191,7 @@ int is_firm_483(void) int is_firm_484(void) { - // TOC 4.84 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.84 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -206,7 +206,7 @@ int is_firm_484(void) int is_firm_485(void) { - // TOC 4.85 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.85 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -221,7 +221,7 @@ int is_firm_485(void) int is_firm_486(void) { - // TOC 4.86 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.86 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -236,7 +236,7 @@ int is_firm_486(void) int is_firm_487(void) { - // TOC 4.87 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.87 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -251,7 +251,7 @@ int is_firm_487(void) int is_firm_488(void) { - // TOC 4.88 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.88 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) @@ -264,14 +264,29 @@ int is_firm_488(void) } } -int is_firm_48X(void) +int is_firm_489(void) { - // TOC 4.89 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88) + // TOC 4.89 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBB0ULL) { - return (peekq(0x80000000002FCB68ULL) > 0x323032312F30342FULL); //timestamp: 2021/04/ + return (peekq(0x80000000002FCB68ULL) == 0x323032322F30322FULL); //timestamp: 2022/02/ + } + else + { + return 0; + } +} + +int is_firm_491(void) +{ + // TOC 4.91 (same as 4.75, 4.76, 4.78, 4.81, 4.82, 4.83, 4.84, 4.85, 4.86, 4.87, 4.88, 4.89, 4.91) + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x800000000034FBB0ULL) + { + return (peekq(0x80000000002FCB68ULL) >= 0x323032332F31322FULL); //timestamp: 2023/12/ } else { diff --git a/source/payload475deh/payload_475deh.c b/source/payload475deh/payload_475deh.c index 00c2a18..5e6a487 100644 --- a/source/payload475deh/payload_475deh.c +++ b/source/payload475deh/payload_475deh.c @@ -265,14 +265,44 @@ int is_firm_488deh(void) } } -int is_firm_48Xdeh(void) +int is_firm_489deh(void) { // TOC 4.89 deh u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000039D440ULL) { - return (peekq(0x8000000000344B70ULL) > 0x323032312F30342FULL); //timestamp: 2021/04/ + return (peekq(0x8000000000344B70ULL) > 0x323032312F30342FULL) && (peekq(0x8000000000344B70ULL) < 0x323032332F30332FULL); //timestamp: 2021/04/ - 2023/03/ + } + else + { + return 0; + } +} + +int is_firm_490deh(void) +{ + // TOC 4.90 deh + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x800000000039D440ULL) + { + return (peekq(0x8000000000344B70ULL) >= 0x323032332F30332FULL) && (peekq(0x8000000000344B70ULL) < 0x323032342F30322FULL); //timestamp: 2023/03/ - 2024/02/ + } + else + { + return 0; + } +} + +int is_firm_49Xdeh(void) +{ + // TOC 4.91 deh + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x800000000039D440ULL) + { + return (peekq(0x8000000000344B70ULL) >= 0x323032342F30322FULL); //timestamp: 2024/02/ } else { diff --git a/source/payload480/payload_480.c b/source/payload480/payload_480.c index f3981c6..8f2dd19 100644 --- a/source/payload480/payload_480.c +++ b/source/payload480/payload_480.c @@ -106,7 +106,22 @@ int is_firm_480(void) toc = peekq(0x8000000000003000ULL); if(toc == 0x800000000034FBA0ULL) { - return 1; + return (peekq(0x80000000002FCB58ULL) == 0x323031362F30332FULL); //timestamp: 2016/03/ + } + else + { + return 0; + } +} + +int is_firm_490(void) +{ + // TOC 4.90 (same as 4.80) + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x800000000034FBA0ULL) + { + return (peekq(0x80000000002FCB58ULL) == 0x323032322F31322FULL); //timestamp: 2022/12/ } else { diff --git a/source/payload481dex/payload_481dex.c b/source/payload481dex/payload_481dex.c index dc8cbc5..e100a7c 100644 --- a/source/payload481dex/payload_481dex.c +++ b/source/payload481dex/payload_481dex.c @@ -219,14 +219,44 @@ int is_firm_488dex(void) } } -int is_firm_48Xdex(void) +int is_firm_489dex(void) { // TOC 4.89 u64 toc; toc = peekq(0x8000000000003000ULL); if(toc == 0x80000000003759C0ULL) { - return (peekq(0x800000000031F028ULL) > 0x323032312F30342FULL); //timestamp: 2021/04/ + return (peekq(0x800000000031F028ULL) == 0x323032332F30312FULL); //timestamp: 2023/01/ + } + else + { + return 0; + } +} + +int is_firm_490dex(void) +{ + // TOC 4.90 + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x80000000003759C0ULL) + { + return (peekq(0x800000000031F028ULL) >= 0x323032332F30332FULL) && (peekq(0x800000000031F028ULL) < 0x323032342F30322FULL); //timestamp: 2023/03/ - 2024/02/ + } + else + { + return 0; + } +} + +int is_firm_49Xdex(void) +{ + // TOC 4.91 + u64 toc; + toc = peekq(0x8000000000003000ULL); + if(toc == 0x80000000003759C0ULL) + { + return (peekq(0x800000000031F028ULL) >= 0x323032342F30322FULL); //timestamp: 2024/02/ } else {