mirror of
https://github.com/modmii/SysCheck-ModMii-Edition.git
synced 2024-11-25 01:26:54 +01:00
-Added translations for "Homebrew Channel is not installed" message
-Improved timing between messages -Added support for GC/Classic controllers, and multiple remotes -Changed "HD Edition" to "HacksDen Edition" -Minor code cleanup
This commit is contained in:
parent
f7c14cb306
commit
bc08e18949
53
Makefile
53
Makefile
@ -17,9 +17,9 @@ include $(DEVKITPPC)/wii_rules
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := boot
|
||||
BUILD := build
|
||||
SOURCES := source source/gfx
|
||||
SOURCES := source
|
||||
DATA := data
|
||||
INCLUDES := include source/gfx
|
||||
INCLUDES := include
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
@ -134,28 +134,7 @@ $(OUTPUT).elf: $(OFILES)
|
||||
#---------------------------------------------------------------------------------
|
||||
# This rule links in binary data with the .jpg extension
|
||||
#---------------------------------------------------------------------------------
|
||||
%.jpg.o : %.jpg
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# This rule links in binary data with the .png extension
|
||||
#---------------------------------------------------------------------------------
|
||||
%.png.o : %.png
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# This rule links in binary data with the .ttf extension
|
||||
#---------------------------------------------------------------------------------
|
||||
%.ttf.o : %.ttf
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.wad.o : %.wad
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
@ -163,38 +142,10 @@ $(OUTPUT).elf: $(OFILES)
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.certs.o : %.certs
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.sys.o : %.sys
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.dat.o : %.dat
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.tmd.o : %.tmd
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.tik.o : %.tik
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.bin.o : %.bin
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.cert.o : %.cert
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
%.app.o : %.app
|
||||
@echo $(notdir $<)
|
||||
$(bin2o)
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
|
@ -31,6 +31,7 @@ const char* TXT_SysMenu;
|
||||
const char* TXT_SysMenu2;
|
||||
const char* TXT_SysMenu3;
|
||||
const char* TXT_HBF;
|
||||
const char* TXT_NO_HBC;
|
||||
const char* TXT_HBC;
|
||||
const char* TXT_HBC_NEW;
|
||||
const char* TXT_HBC_112;
|
||||
|
112
include/mload.h
112
include/mload.h
@ -1,18 +1,18 @@
|
||||
/* mload.c (for PPC) (c) 2009, Hermes
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that 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.
|
||||
This program is distributed in the hope that 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __MLOAD_H__
|
||||
@ -26,31 +26,31 @@
|
||||
#include <gccore.h>
|
||||
#include "unistd.h"
|
||||
|
||||
#define MLOAD_MLOAD_THREAD_ID 0x4D4C4400
|
||||
#define MLOAD_GET_IOS_BASE 0x4D4C4401
|
||||
#define MLOAD_MLOAD_THREAD_ID 0x4D4C4400
|
||||
#define MLOAD_GET_IOS_BASE 0x4D4C4401
|
||||
#define MLOAD_GET_MLOAD_VERSION 0x4D4C4402
|
||||
|
||||
#define MLOAD_LOAD_MODULE 0x4D4C4480
|
||||
#define MLOAD_RUN_MODULE 0x4D4C4481
|
||||
#define MLOAD_RUN_THREAD 0x4D4C4482
|
||||
#define MLOAD_LOAD_MODULE 0x4D4C4480
|
||||
#define MLOAD_RUN_MODULE 0x4D4C4481
|
||||
#define MLOAD_RUN_THREAD 0x4D4C4482
|
||||
|
||||
#define MLOAD_STOP_THREAD 0x4D4C4484
|
||||
#define MLOAD_CONTINUE_THREAD 0x4D4C4485
|
||||
#define MLOAD_STOP_THREAD 0x4D4C4484
|
||||
#define MLOAD_CONTINUE_THREAD 0x4D4C4485
|
||||
|
||||
#define MLOAD_GET_LOAD_BASE 0x4D4C4490
|
||||
#define MLOAD_MEMSET 0x4D4C4491
|
||||
#define MLOAD_GET_LOAD_BASE 0x4D4C4490
|
||||
#define MLOAD_MEMSET 0x4D4C4491
|
||||
|
||||
#define MLOAD_GET_EHCI_DATA 0x4D4C44A0
|
||||
#define MLOAD_GET_LOG 0x4D4C44A1
|
||||
#define MLOAD_GET_EHCI_DATA 0x4D4C44A0
|
||||
#define MLOAD_GET_LOG 0x4D4C44A1
|
||||
|
||||
#define MLOAD_SET_ES_IOCTLV 0x4D4C44B0
|
||||
#define MLOAD_SET_ES_IOCTLV 0x4D4C44B0
|
||||
|
||||
#define MLOAD_GETW 0x4D4C44C0
|
||||
#define MLOAD_GETH 0x4D4C44C1
|
||||
#define MLOAD_GETB 0x4D4C44C2
|
||||
#define MLOAD_SETW 0x4D4C44C3
|
||||
#define MLOAD_SETH 0x4D4C44C4
|
||||
#define MLOAD_SETB 0x4D4C44C5
|
||||
#define MLOAD_GETW 0x4D4C44C0
|
||||
#define MLOAD_GETH 0x4D4C44C1
|
||||
#define MLOAD_GETB 0x4D4C44C2
|
||||
#define MLOAD_SETW 0x4D4C44C3
|
||||
#define MLOAD_SETH 0x4D4C44C4
|
||||
#define MLOAD_SETB 0x4D4C44C5
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -63,42 +63,42 @@ extern "C" {
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 ident0;
|
||||
u32 ident1;
|
||||
u32 ident2;
|
||||
u32 ident3;
|
||||
u32 machinetype;
|
||||
u32 version;
|
||||
u32 entry;
|
||||
u32 phoff;
|
||||
u32 shoff;
|
||||
u32 flags;
|
||||
u16 ehsize;
|
||||
u16 phentsize;
|
||||
u16 phnum;
|
||||
u16 shentsize;
|
||||
u16 shnum;
|
||||
u16 shtrndx;
|
||||
u32 ident0;
|
||||
u32 ident1;
|
||||
u32 ident2;
|
||||
u32 ident3;
|
||||
u32 machinetype;
|
||||
u32 version;
|
||||
u32 entry;
|
||||
u32 phoff;
|
||||
u32 shoff;
|
||||
u32 flags;
|
||||
u16 ehsize;
|
||||
u16 phentsize;
|
||||
u16 phnum;
|
||||
u16 shentsize;
|
||||
u16 shnum;
|
||||
u16 shtrndx;
|
||||
} elfheader;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 type;
|
||||
u32 offset;
|
||||
u32 vaddr;
|
||||
u32 paddr;
|
||||
u32 filesz;
|
||||
u32 memsz;
|
||||
u32 flags;
|
||||
u32 align;
|
||||
u32 type;
|
||||
u32 offset;
|
||||
u32 vaddr;
|
||||
u32 paddr;
|
||||
u32 filesz;
|
||||
u32 memsz;
|
||||
u32 flags;
|
||||
u32 align;
|
||||
} elfphentry;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void *start;
|
||||
int prio;
|
||||
void *stack;
|
||||
int size_stack;
|
||||
void *start;
|
||||
int prio;
|
||||
void *stack;
|
||||
int size_stack;
|
||||
} data_elf;
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------*/
|
||||
|
@ -1,3 +1,6 @@
|
||||
#ifndef __SHA1_H__
|
||||
#define __SHA1_H__
|
||||
|
||||
typedef struct {
|
||||
unsigned long state[5];
|
||||
unsigned long count[2];
|
||||
@ -8,5 +11,6 @@ void SHA1Transform(unsigned long state[5], unsigned char buffer[64]);
|
||||
void SHA1Init(SHA1_CTX* context);
|
||||
void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len);
|
||||
void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
|
||||
|
||||
void SHA1(unsigned char *ptr, unsigned int size, unsigned char *outbuf);
|
||||
|
||||
#endif
|
@ -1,13 +1,16 @@
|
||||
#ifndef _TOOLS_H_
|
||||
#define _TOOLS_H_
|
||||
|
||||
#define AHB_ACCESS ((*(vu32*)0xcd800064 == 0xFFFFFFFF) ? 1 : 0)
|
||||
#include <ogc\lwp_watchdog.h>
|
||||
|
||||
#define AHB_ACCESS (*(vu32*)0xcd800064 == 0xFFFFFFFF)
|
||||
#define MEM_REG_BASE 0xd8b4000
|
||||
#define MEM_PROT (MEM_REG_BASE + 0x20a)
|
||||
#define HOLLYWOOD_VERSION (vu32*)0x80003138
|
||||
#define LOADER_STUB (vu32*)0x80001800
|
||||
#define IS_WII_U ((*(vu32*)(0xCd8005A0) >> 16 ) == 0xCAFE)
|
||||
#define MAX_ELEMENTS(x) ((sizeof((x))) / (sizeof((x)[0])))
|
||||
#define CheckTime(X,Y) while(!(ticks_to_millisecs(diff_ticks((X), gettick())) > (Y)))
|
||||
|
||||
// Turn upper and lower into a full title ID
|
||||
#define TITLE_ID(x,y) (((u64)(x) << 32) | (y))
|
||||
@ -19,6 +22,10 @@
|
||||
#define FULL_TITLE_ID(titleId) ((u32)(titleId))
|
||||
#define TITLE_ID2(titleId) ((u32)((titleId) >> 32))
|
||||
|
||||
// Values for DetectInput
|
||||
#define DI_BUTTONS_HELD 0
|
||||
#define DI_BUTTONS_DOWN 1
|
||||
|
||||
enum {
|
||||
APP_TITLE = 0,
|
||||
APP_IOS,
|
||||
@ -54,6 +61,16 @@ enum {
|
||||
HBF_THBF
|
||||
};
|
||||
|
||||
enum {
|
||||
TID_CBOOT2 = 252, // cBoot252
|
||||
TID_NANDEMU,
|
||||
TID_BOOTMII,
|
||||
TID_BC = 256,
|
||||
TID_MIOS,
|
||||
TID_NAND = 512,
|
||||
TID_WFS
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
s32 revision;
|
||||
bool isStub;
|
||||
@ -112,6 +129,7 @@ extern "C"
|
||||
#endif
|
||||
|
||||
// Prototypes
|
||||
u32 DetectInput(u8 DownOrHeld);
|
||||
char GetSysMenuRegion(u32 sysVersion);
|
||||
bool GetCertificates(void);
|
||||
u32 GetSysMenuVersion(void);
|
||||
|
@ -1,12 +1,12 @@
|
||||
#ifndef __TMDIDENT_H__
|
||||
#define __TMDIDENT_H__
|
||||
|
||||
#define base_number 122
|
||||
|
||||
typedef struct {
|
||||
u32 hashes[5];
|
||||
|
||||
u32 base;
|
||||
|
||||
char info[0x10];
|
||||
|
||||
} iosHashes;
|
||||
|
||||
typedef struct _iosinfo_t {
|
||||
@ -22,31 +22,31 @@ static iosHashes iosHash[base_number] = {
|
||||
// {hash, hash, hash, hash, hash}, Base, InfoText},
|
||||
{{0x20e60607, 0x4e02c484, 0x2bbc5758, 0xee2b40fc, 0x35a68b0a}, 38, "rev 13a" }, // cIOSrev13a
|
||||
{{0x620c57c7, 0xd155b67f, 0xa451e2ba, 0xfb5534d7, 0xaa457878}, 38, "rev 13b" }, // cIOSrev13b
|
||||
{{0x3c968e54, 0x9e915458, 0x9ecc3bda, 0x16d0a0d4, 0x8cac7917}, 37, "rev 18" }, // cIOS37 rev18
|
||||
{{0x3c968e54, 0x9e915458, 0x9ecc3bda, 0x16d0a0d4, 0x8cac7917}, 37, "rev 18" }, // cIOS37 rev18
|
||||
{{0xe811bca8, 0xe1df1e93, 0x779c40e6, 0x2006e807, 0xd4403b97}, 38, "rev 18" }, // cIOS38 rev18
|
||||
{{0x697676f0, 0x7a133b19, 0x881f512f, 0x2017b349, 0x6243c037}, 57, "rev 18" }, // cIOS57 rev18
|
||||
{{0x34ec540b, 0xd1fb5a5e, 0x4ae7f069, 0xd0a39b9a, 0xb1a1445f}, 60, "rev 18" }, // cIOS60 rev18
|
||||
{{0xd98a4dd9, 0xff426ddb, 0x1afebc55, 0x30f75489, 0x40b27ade}, 70, "rev 18" }, // cIOS70 rev18
|
||||
{{0x0a49cd80, 0x6f8f87ff, 0xac9a10aa, 0xefec9c1d, 0x676965b9}, 37, "rev 19" }, // cIOS37 rev19
|
||||
{{0x09179764, 0xeecf7f2e, 0x7631e504, 0x13b4b7aa, 0xca5fc1ab}, 38, "rev 19" }, // cIOS38 rev19
|
||||
{{0x6010d5cf, 0x396415b7, 0x3c3915e9, 0x83ded6e3, 0x8f418d54}, 57, "rev 19" }, // cIOS57 rev19
|
||||
{{0x589d6c4f, 0x6bcbd80a, 0xe768f258, 0xc53a322c, 0xd143f8cd}, 60, "rev 19" }, // cIOS60 rev19
|
||||
{{0x8969e0bf, 0x7f9b2391, 0x31ecfd88, 0x1c6f76eb, 0xf9418fe6}, 70, "rev 19" }, // cIOS70 rev19
|
||||
{{0x30aeadfe, 0x8b6ea668, 0x446578c7, 0x91f0832e, 0xb33c08ac}, 36, "rev 20" }, // cIOS36 rev20
|
||||
{{0xba0461a2, 0xaa26eed0, 0x482c1a7a, 0x59a97d94, 0xa607773e}, 37, "rev 20" }, // cIOS37 rev20
|
||||
{{0xb694a33e, 0xf5040583, 0x0d540460, 0x2a450f3c, 0x69a68148}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0xf6058710, 0xfe78a2d8, 0x44e6397f, 0x14a61501, 0x66c352cf}, 53, "rev 20" }, // cIOS53 rev20
|
||||
{{0xfa07fb10, 0x52ffb607, 0xcf1fc572, 0xf94ce42e, 0xa2f5b523}, 55, "rev 20" }, // cIOS55 rev20
|
||||
{{0xe30acf09, 0xbcc32544, 0x490aec18, 0xc276cee6, 0x5e5f6bab}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0x595ef1a3, 0x57d0cd99, 0x21b6bf6b, 0x432f6342, 0x605ae60d}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x687a2698, 0x3efe5a08, 0xc01f6ae3, 0x3d8a1637, 0xadab6d48}, 60, "rev 20" }, // cIOS60 rev20
|
||||
{{0xea6610e4, 0xa6beae66, 0x887be72d, 0x5da3415b, 0xa470523c}, 61, "rev 20" }, // cIOS61 rev20
|
||||
{{0x64e1af0e, 0xf7167fd7, 0x0c696306, 0xa2035b2d, 0x6047c736}, 70, "rev 20" }, // cIOS70 rev20
|
||||
{{0x0df93ca9, 0x833cf61f, 0xb3b79277, 0xf4c93cd2, 0xcd8eae17}, 80, "rev 20" }, // cIOS80 rev20
|
||||
{{0x06c7a8e2, 0x3485e466, 0xd9ba56b6, 0x27d1cf5f, 0x4d8e451c}, 38, "rev 18" }, // cIOS38 rev18+
|
||||
{{0x1ec125a0, 0xa04a6f60, 0xbd6f6faf, 0xbcb13d62, 0xe2a757b7}, 57, "rev 18" }, // cIOS57 rev18+
|
||||
{{0xdf89b1b8, 0x340a001c, 0x032bdf54, 0x8679b8cb, 0x1bfb3490}, 57, "rev 18" }, // cIOS57 rev18+
|
||||
{{0x2fd88e4b, 0xd47fa8f1, 0x1bd39d7e, 0x79f88f9d, 0xd1ab19d8}, 36, "rev 3351" }, // (c)IOS36 (IOS236)
|
||||
{{0x697676f0, 0x7a133b19, 0x881f512f, 0x2017b349, 0x6243c037}, 57, "rev 18" }, // cIOS57 rev18
|
||||
{{0x34ec540b, 0xd1fb5a5e, 0x4ae7f069, 0xd0a39b9a, 0xb1a1445f}, 60, "rev 18" }, // cIOS60 rev18
|
||||
{{0xd98a4dd9, 0xff426ddb, 0x1afebc55, 0x30f75489, 0x40b27ade}, 70, "rev 18" }, // cIOS70 rev18
|
||||
{{0x0a49cd80, 0x6f8f87ff, 0xac9a10aa, 0xefec9c1d, 0x676965b9}, 37, "rev 19" }, // cIOS37 rev19
|
||||
{{0x09179764, 0xeecf7f2e, 0x7631e504, 0x13b4b7aa, 0xca5fc1ab}, 38, "rev 19" }, // cIOS38 rev19
|
||||
{{0x6010d5cf, 0x396415b7, 0x3c3915e9, 0x83ded6e3, 0x8f418d54}, 57, "rev 19" }, // cIOS57 rev19
|
||||
{{0x589d6c4f, 0x6bcbd80a, 0xe768f258, 0xc53a322c, 0xd143f8cd}, 60, "rev 19" }, // cIOS60 rev19
|
||||
{{0x8969e0bf, 0x7f9b2391, 0x31ecfd88, 0x1c6f76eb, 0xf9418fe6}, 70, "rev 19" }, // cIOS70 rev19
|
||||
{{0x30aeadfe, 0x8b6ea668, 0x446578c7, 0x91f0832e, 0xb33c08ac}, 36, "rev 20" }, // cIOS36 rev20
|
||||
{{0xba0461a2, 0xaa26eed0, 0x482c1a7a, 0x59a97d94, 0xa607773e}, 37, "rev 20" }, // cIOS37 rev20
|
||||
{{0xb694a33e, 0xf5040583, 0x0d540460, 0x2a450f3c, 0x69a68148}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0xf6058710, 0xfe78a2d8, 0x44e6397f, 0x14a61501, 0x66c352cf}, 53, "rev 20" }, // cIOS53 rev20
|
||||
{{0xfa07fb10, 0x52ffb607, 0xcf1fc572, 0xf94ce42e, 0xa2f5b523}, 55, "rev 20" }, // cIOS55 rev20
|
||||
{{0xe30acf09, 0xbcc32544, 0x490aec18, 0xc276cee6, 0x5e5f6bab}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0x595ef1a3, 0x57d0cd99, 0x21b6bf6b, 0x432f6342, 0x605ae60d}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x687a2698, 0x3efe5a08, 0xc01f6ae3, 0x3d8a1637, 0xadab6d48}, 60, "rev 20" }, // cIOS60 rev20
|
||||
{{0xea6610e4, 0xa6beae66, 0x887be72d, 0x5da3415b, 0xa470523c}, 61, "rev 20" }, // cIOS61 rev20
|
||||
{{0x64e1af0e, 0xf7167fd7, 0x0c696306, 0xa2035b2d, 0x6047c736}, 70, "rev 20" }, // cIOS70 rev20
|
||||
{{0x0df93ca9, 0x833cf61f, 0xb3b79277, 0xf4c93cd2, 0xcd8eae17}, 80, "rev 20" }, // cIOS80 rev20
|
||||
{{0x06c7a8e2, 0x3485e466, 0xd9ba56b6, 0x27d1cf5f, 0x4d8e451c}, 38, "rev 18" }, // cIOS38 rev18+
|
||||
{{0x1ec125a0, 0xa04a6f60, 0xbd6f6faf, 0xbcb13d62, 0xe2a757b7}, 57, "rev 18" }, // cIOS57 rev18+
|
||||
{{0xdf89b1b8, 0x340a001c, 0x032bdf54, 0x8679b8cb, 0x1bfb3490}, 57, "rev 18" }, // cIOS57 rev18+
|
||||
{{0x2fd88e4b, 0xd47fa8f1, 0x1bd39d7e, 0x79f88f9d, 0xd1ab19d8}, 36, "rev 3351" }, // (c)IOS36 (IOS236)
|
||||
{{0x074dfb39, 0x90a5da61, 0x67488616, 0x68ccb747, 0x3a5b59b3}, 36, "rev 21" }, // IOS249 r21 Base: 36
|
||||
{{0x6956a016, 0x59542728, 0x8d2efade, 0xad8ed01e, 0xe7f9a780}, 37, "rev 21" }, // IOS249 r21 Base: 37
|
||||
{{0xdc8b23e6, 0x9d95fefe, 0xac10668a, 0x6891a729, 0x2bdfbca0}, 38, "rev 21" }, // IOS249 r21 Base: 38
|
||||
@ -59,87 +59,89 @@ static iosHashes iosHash[base_number] = {
|
||||
{{0xaf588570, 0x13955a32, 0x001296aa, 0x5f30e37f, 0x0be91316}, 61, "rev 21" }, // IOS249 r21 Base: 61
|
||||
{{0x50deaba2, 0x9328755c, 0x7c2deac8, 0x385ecb49, 0x65ea3b2b}, 70, "rev 21" }, // IOS249 r21 Base: 70
|
||||
{{0x811b6a0b, 0xe26b9419, 0x7ffd4930, 0xdccd6ed3, 0x6ea2cdd2}, 80, "rev 21" }, // IOS249 r21 Base: 80
|
||||
{{0xe40e13e0, 0xf0444cc0, 0x4fb40daa, 0x6487c3d8, 0x488879a2}, 38, "rev 17" }, // cIOS38 r17
|
||||
{{0xabcdd440, 0x24ed5dc1, 0x7b8c1799, 0xf8904659, 0x998cb370}, 38, "d2x-v2" }, // d2x-v2 r21 Base: 38
|
||||
{{0x841743a4, 0xf75ce640, 0xb91b2d6a, 0xccae31dd, 0xf5a507d7}, 57, "d2x-v2" }, // d2x-v2 r21 Base: 57
|
||||
{{0x80fb2483, 0x5357a521, 0xf9013063, 0xd1a60db6, 0xd8960d6c}, 56, "d2x-v2" }, // d2x-v2 r21 Base: 56
|
||||
{{0xac5e096d, 0x9715752b, 0x1607d4c1, 0x70380e84, 0xc3684eae}, 37, "d2x-v2" }, // d2x-v2 r21 Base: 37
|
||||
{{0xc9362096, 0xd39ffadd, 0x3395912d, 0x06f21da5, 0x4aed0679}, 58, "rev 21" }, // cIOS58 r21
|
||||
{{0x60345733, 0xdf1bf9a4, 0x20a72585, 0xea86cf66, 0x12b7df6a}, 57, "rev 21" }, // cIOS57 r21
|
||||
{{0x5f178a98, 0x4c4486ee, 0xcdb51ca7, 0xb0b172a0, 0x91ab0d2b}, 38, "rev 21" }, // cIOS38 r21
|
||||
{{0x115a5bc1, 0x28fd5a1f, 0xc5ca4b76, 0xd54d4016, 0x5f93e406}, 56, "rev 21" }, // cIOS56 r21
|
||||
{{0xd3198a49, 0xd4be48b6, 0x74c50488, 0xdf870e48, 0x91ed14a9}, 57, "rev 21" }, // cIOS57 r21
|
||||
{{0x3f0fa343, 0x68413800, 0xe31729a6, 0x1805e71e, 0x680f9add}, 37, "d2xv3" }, // d2x-v3 r21 Base: 37
|
||||
{{0xe40e13e0, 0xf0444cc0, 0x4fb40daa, 0x6487c3d8, 0x488879a2}, 38, "rev 17" }, // cIOS38 r17
|
||||
{{0xabcdd440, 0x24ed5dc1, 0x7b8c1799, 0xf8904659, 0x998cb370}, 38, "d2x-v2" }, // d2x-v2 r21 Base: 38
|
||||
{{0x841743a4, 0xf75ce640, 0xb91b2d6a, 0xccae31dd, 0xf5a507d7}, 57, "d2x-v2" }, // d2x-v2 r21 Base: 57
|
||||
{{0x80fb2483, 0x5357a521, 0xf9013063, 0xd1a60db6, 0xd8960d6c}, 56, "d2x-v2" }, // d2x-v2 r21 Base: 56
|
||||
{{0xac5e096d, 0x9715752b, 0x1607d4c1, 0x70380e84, 0xc3684eae}, 37, "d2x-v2" }, // d2x-v2 r21 Base: 37
|
||||
{{0xc9362096, 0xd39ffadd, 0x3395912d, 0x06f21da5, 0x4aed0679}, 58, "rev 21" }, // cIOS58 r21
|
||||
{{0x60345733, 0xdf1bf9a4, 0x20a72585, 0xea86cf66, 0x12b7df6a}, 57, "rev 21" }, // cIOS57 r21
|
||||
{{0x5f178a98, 0x4c4486ee, 0xcdb51ca7, 0xb0b172a0, 0x91ab0d2b}, 38, "rev 21" }, // cIOS38 r21
|
||||
{{0x115a5bc1, 0x28fd5a1f, 0xc5ca4b76, 0xd54d4016, 0x5f93e406}, 56, "rev 21" }, // cIOS56 r21
|
||||
{{0xd3198a49, 0xd4be48b6, 0x74c50488, 0xdf870e48, 0x91ed14a9}, 57, "rev 21" }, // cIOS57 r21
|
||||
{{0x3f0fa343, 0x68413800, 0xe31729a6, 0x1805e71e, 0x680f9add}, 37, "d2xv3" }, // d2x-v3 r21 Base: 37
|
||||
{{0xec25c714, 0xf63e6696, 0x10d6da7a, 0x4c331c64, 0xc3168ce6}, 38, "d2x-v3" }, // d2x-v3 r21 Base: 38
|
||||
{{0xce0b9786, 0x6720fa8a, 0x4c09b54e, 0x42982999, 0xd447208b}, 56, "d2x-v3" }, // d2x-v3 r21 Base: 56
|
||||
{{0xa24edf73, 0x572c5853, 0xcfe01a7e, 0x050afbf8, 0x6baa0d62}, 57, "d2x-v3" }, // d2x-v3 r21 Base: 57
|
||||
{{0x133c7710, 0x26d289de, 0x4622a841, 0xd32975d3, 0x35f87e31}, 58, "d2x-v3" }, // d2x-v3 r21 Base: 58
|
||||
{{0x65944f33, 0x11f578c4, 0x3fdb6015, 0x084a307f, 0xe7040d61}, 37, "d2x-v1" }, // d2x-v1 r21 Base: 37
|
||||
{{0x8371e0d3, 0xde2839d3, 0x0a116be3, 0xb8bdc04a, 0x6ed83a4e}, 38, "d2x-v1" }, // d2x-v1 r21 Base: 38
|
||||
{{0x38f9a0d4, 0x367e0808, 0xe2fff71b, 0x1263221a, 0x60bc29cb}, 56, "d2x-v1" }, // d2x-v1 r21 Base: 56
|
||||
{{0x09d79d2a, 0x73e3c439, 0x1c0b9e3b, 0x7909b59d, 0xfdd77f74}, 57, "d2x-v1" }, // d2x-v1 r21 Base: 57
|
||||
{{0x20ee9790, 0x22cf3b0a, 0x402c4620, 0x129ad758, 0x6c94386b}, 37, "d2x-v1" }, // d2x-v1 r65535 Base: 37
|
||||
{{0xc2b448f4, 0x9537e0d7, 0x5730372a, 0x0eef2790, 0x4096bc2b}, 38, "d2x-v1" }, // d2x-v1 r65535 Base: 38
|
||||
{{0xd6a2a8cd, 0x0b3c65df, 0x34791948, 0x04c6bbb8, 0xbd58fb77}, 56, "d2x-v1" }, // d2x-v1 r65535 Base: 56
|
||||
{{0x9d8c98fc, 0x189b531b, 0xdfff0981, 0xe3f78f60, 0xa004a6fc}, 57, "d2x-v1" }, // d2x-v1 r65535 Base: 57
|
||||
{{0x9daa8020, 0xf65bf973, 0x0b0ae31e, 0xcfcbc83f, 0x708ba2cc}, 37, "d2x-v2" }, // d2x-v2 r65535 Base: 37
|
||||
{{0x652b4055, 0xa57b8777, 0x217fc97e, 0x1dacd460, 0xd8795f57}, 38, "d2x-v2" }, // d2x-v2 r65535 Base: 38
|
||||
{{0x68fa7d61, 0x30ffd971, 0x83e1a056, 0x7e3c693b, 0xa18465ed}, 56, "d2x-v2" }, // d2x-v2 r65535 Base: 56
|
||||
{{0xb3437bbf, 0x832f21d8, 0x8bdad236, 0x98fdd32e, 0xbaff6e2c}, 57, "d2x-v2" }, // d2x-v2 r21 Base: 57
|
||||
{{0xc549172f, 0x13cd642a, 0xc09ab7f7, 0xbfa36d8b, 0x56e3c2d7}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0xce0b9786, 0x6720fa8a, 0x4c09b54e, 0x42982999, 0xd447208b}, 56, "d2x-v3" }, // d2x-v3 r21 Base: 56
|
||||
{{0xa24edf73, 0x572c5853, 0xcfe01a7e, 0x050afbf8, 0x6baa0d62}, 57, "d2x-v3" }, // d2x-v3 r21 Base: 57
|
||||
{{0x133c7710, 0x26d289de, 0x4622a841, 0xd32975d3, 0x35f87e31}, 58, "d2x-v3" }, // d2x-v3 r21 Base: 58
|
||||
{{0x65944f33, 0x11f578c4, 0x3fdb6015, 0x084a307f, 0xe7040d61}, 37, "d2x-v1" }, // d2x-v1 r21 Base: 37
|
||||
{{0x8371e0d3, 0xde2839d3, 0x0a116be3, 0xb8bdc04a, 0x6ed83a4e}, 38, "d2x-v1" }, // d2x-v1 r21 Base: 38
|
||||
{{0x38f9a0d4, 0x367e0808, 0xe2fff71b, 0x1263221a, 0x60bc29cb}, 56, "d2x-v1" }, // d2x-v1 r21 Base: 56
|
||||
{{0x09d79d2a, 0x73e3c439, 0x1c0b9e3b, 0x7909b59d, 0xfdd77f74}, 57, "d2x-v1" }, // d2x-v1 r21 Base: 57
|
||||
{{0x20ee9790, 0x22cf3b0a, 0x402c4620, 0x129ad758, 0x6c94386b}, 37, "d2x-v1" }, // d2x-v1 r65535 Base: 37
|
||||
{{0xc2b448f4, 0x9537e0d7, 0x5730372a, 0x0eef2790, 0x4096bc2b}, 38, "d2x-v1" }, // d2x-v1 r65535 Base: 38
|
||||
{{0xd6a2a8cd, 0x0b3c65df, 0x34791948, 0x04c6bbb8, 0xbd58fb77}, 56, "d2x-v1" }, // d2x-v1 r65535 Base: 56
|
||||
{{0x9d8c98fc, 0x189b531b, 0xdfff0981, 0xe3f78f60, 0xa004a6fc}, 57, "d2x-v1" }, // d2x-v1 r65535 Base: 57
|
||||
{{0x9daa8020, 0xf65bf973, 0x0b0ae31e, 0xcfcbc83f, 0x708ba2cc}, 37, "d2x-v2" }, // d2x-v2 r65535 Base: 37
|
||||
{{0x652b4055, 0xa57b8777, 0x217fc97e, 0x1dacd460, 0xd8795f57}, 38, "d2x-v2" }, // d2x-v2 r65535 Base: 38
|
||||
{{0x68fa7d61, 0x30ffd971, 0x83e1a056, 0x7e3c693b, 0xa18465ed}, 56, "d2x-v2" }, // d2x-v2 r65535 Base: 56
|
||||
{{0xb3437bbf, 0x832f21d8, 0x8bdad236, 0x98fdd32e, 0xbaff6e2c}, 57, "d2x-v2" }, // d2x-v2 r21 Base: 57
|
||||
{{0xc549172f, 0x13cd642a, 0xc09ab7f7, 0xbfa36d8b, 0x56e3c2d7}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0x8b64539a, 0x8f253b81, 0x02408620, 0x7377b5f9, 0xdbd70b6b}, 38, "d2x-v3" }, // d2x-v3 r65535 Base: 38
|
||||
{{0xa923319c, 0xbb6d25a8, 0xae8eab82, 0xa0376dc6, 0x11302999}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0xda1ff450, 0xe2710584, 0x44411c4d, 0xb7486df5, 0xfbcd67d7}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0x2d24fbca, 0xb8c075b3, 0x921f3b58, 0x8bcf0cf6, 0x5568cd1e}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x2bd8749e, 0xa0752f26, 0x480ba81e, 0xe2e90ece, 0x1b515c9d}, 36, "rev 3351" }, // (c)IOS36 (IOS236)
|
||||
{{0xff6154a5, 0xa368f31e, 0x99a685af, 0x9b19b571, 0x28badb20}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0xa923319c, 0xbb6d25a8, 0xae8eab82, 0xa0376dc6, 0x11302999}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0x5c7be813, 0xd814c8b2, 0x6f8785f4, 0xa964e276, 0x5a0fa6ce}, 38, "d2x-v3" }, // d2x-v3 r65535 Base: 38
|
||||
{{0xe32539ce, 0x43acc96c, 0x9b27dd23, 0x53b04172, 0x6f303a5c}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0xaa0688eb, 0x328e516d, 0x89bef8f7, 0xd1151bd8, 0x81af4db8}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x6a8376ab, 0xa466f9b6, 0x1403dfcf, 0x120fbe9e, 0x48e3acbe}, 80, "rev 21" }, // cIOS80 r21
|
||||
{{0x4db1be1e, 0xdb4d0c1c, 0x75900233, 0xeeae3fc6, 0x9bb86d3e}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0x86f60709, 0x2e580cba, 0x922cbed8, 0x28d053bd, 0xff378145}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0x7a7a0094, 0x2991ea1c, 0xaff02047, 0x6d1ffffc, 0x0c9e53a6}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x0facacb9, 0x34c2886c, 0x5b13b098, 0x2ae699e9, 0xec47d8ee}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0x90badb7b, 0xeef5196e, 0x5f32f59b, 0x29a98f2d, 0xc0e64260}, 38, "d2x-v3" }, // d2x-v3 r65535 Base: 38
|
||||
{{0x57671632, 0x131c0441, 0x78991fe3, 0x7d8b1baa, 0x99f597bf}, 38, "rev 17b" }, // cIOS38 rev17b
|
||||
{{0x5db466c0, 0xd04ada02, 0x4348dbca, 0x74729d0c, 0x3cb2c30c}, 80, "rev 6944" }, // IOS80 rev 6944
|
||||
{{0x0312f927, 0xabcc84db, 0x319bf5f9, 0xa7b5432c, 0x66b5fa47}, 30, "rev 2576" }, // IOS30 rev 2576
|
||||
{{0xac131d4c, 0xfa6e61a0, 0x170cc7c4, 0xa7cbbbc7, 0xa50c7c09}, 50, "rev 4889" }, // IOS50 rev 4889
|
||||
{{0xd18fed7b, 0x26b5bf56, 0xe59e0077, 0xa7d34fa4, 0xe53e5040}, 51, "rev 4633" }, // IOS51 rev 4633
|
||||
{{0xbe46b9ef, 0x00bc99f0, 0x8d40dc62, 0x5a1af1d9, 0xa9ad2960}, 60, "rev 6174" }, // IOS60 rev 6174
|
||||
{{0xc65c0e7b, 0xaa023c9a, 0x08e31648, 0x36d105ff, 0x37c490d4}, 70, "rev 6687" }, // IOS70 rev 6687
|
||||
{{0xc2e6bdf7, 0xdddfa3aa, 0x738c0637, 0xfd21ed87, 0xac4487df}, 11, "rev 10" }, // IOS11 rev 10
|
||||
{{0xf6ce3ce6, 0xb581c754, 0xa100b63e, 0xe59ea2ca, 0x8d4a53a9}, 20, "rev 12" }, // IOS70 rev 12
|
||||
{{0x9957b893, 0x158b1c82, 0xc0e2ee3c, 0xf024697b, 0x70349fd2}, 58, "d2x-v5a1" }, // d3x-v5alpha1 r65535 Base: 58
|
||||
{{0x666b6be7, 0x7ce68420, 0xe5390361, 0xd7b7fef3, 0xfab6fbb8}, 57, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 57
|
||||
{{0x0e5e820f, 0x7f7a995f, 0xfeadfb17, 0xa951b3f3, 0xc37df8f3}, 38, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 38
|
||||
{{0x1ffeb8d3, 0x73960032, 0xce2c7e7a, 0xb0edb2af, 0xa2edcaf6}, 56, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 56
|
||||
{{0xa6d6b431, 0xa17d4300, 0xb0545865, 0x178ba8ad, 0x9db775a8}, 37, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 37
|
||||
{{0x285bffe0, 0x423f5a42, 0x1245eb42, 0xbaf6a560, 0x24692cd6}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0xe9341b4d, 0x9e17a081, 0xae283e2c, 0x32cd9787, 0xe94731d2}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0x33123c8e, 0xe7c4092c, 0x3b373cd2, 0x5398e557, 0xa5083896}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0x62d422f1, 0x5d5634a2, 0xf558fd66, 0x2e5ade12, 0xea308923}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0xebb81264, 0xc41331bc, 0x7fe76c17, 0xcf400d15, 0x25035bec}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x7dd6a102, 0x91413451, 0xb3b460bc, 0xbf6dff97, 0x79407afa}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x651a74de, 0x7e624b0c, 0x15e582c5, 0x94ced058, 0x27a9e4b2}, 38, "rev 21" }, // cIOS38 rev21
|
||||
{{0x1e8e63dd, 0x897a4e34, 0x79aa9395, 0x6bd8167e, 0x515101ad}, 38, "rev 21" }, // cIOS38 rev21
|
||||
{{0x018699f6, 0x1886ee6c, 0xb4144505, 0x9a5ba565, 0x7f1659be}, 56, "rev 21" }, // cIOS56 rev21
|
||||
{{0x3876b3c9, 0x4d8db267, 0xcaa0c752, 0x63fb38f8, 0x2a0226a5}, 56, "rev 21" }, // cIOS56 rev21
|
||||
{{0x1b4fb650, 0x3aaf1665, 0xebfbc1cf, 0xfe52c3ad, 0x711989f0}, 57, "rev 21" }, // cIOS57 rev21
|
||||
{{0x57efc1dc, 0x02806212, 0x17239dee, 0x31c01423, 0x14340f3f}, 57, "rev 21" }, // cIOS57 rev21
|
||||
{{0xed1afef3, 0x37a084d7, 0xa7f84e81, 0xcaba017a, 0x7707963d}, 38, "d2x-v4" }, // d2x cIOS38 v4
|
||||
{{0xc79f7915, 0x0f3c7848, 0x0fd4dafb, 0x62b61ab8, 0x675d463f}, 38, "d2x-v4" }, // d2x cIOS38 v4
|
||||
{{0x5167c1fa, 0xcf54edcd, 0x6d688d62, 0x0387c1a7, 0xbcf109e6}, 56, "d2x-v4" }, // d2x cIOS56 v4
|
||||
{{0x697f935f, 0x25929794, 0x5dd16218, 0xa15dedc9, 0x0fe63ead}, 56, "d2x-v4" }, // d2x cIOS56 v4
|
||||
{{0x385567e3, 0xeaf6d36a, 0x874b1a03, 0xabc5e3d6, 0xa74da383}, 57, "d2x-v4" }, // d2x cIOS57 v4
|
||||
{{0x3110d72d, 0x96a9aa14, 0xa5d35afe, 0xb991f1e4, 0xc88a804b}, 57, "d2x-v4" }, // d2x cIOS57 v4
|
||||
{{0xfce5cb4d, 0x055ce1ab, 0xaba3a4b1, 0x7b298665, 0x0cafbcc6}, 80, "rev 6944" }, // IOS80 rev 6944
|
||||
{{0x95e2193d, 0x4e80e7ea, 0xb2ed6b5e, 0x8012d483, 0x129dc921}, 70, "rev 6687" }, // IOS70 rev 6687
|
||||
{{0xb7268554, 0x8a7194c4, 0x2a1d6039, 0x2271ace5, 0x62db98b9}, 60, "rev 6174" }, // IOS60 rev 6174
|
||||
{{0x1a3200ec, 0x7eaa20de, 0x69c02000, 0x496f2d01, 0x506a7824}, 50, "rev 4889" }, // IOS50 rev 4889
|
||||
{{0xea390bf6, 0x4b1f6640, 0xdb46f605, 0xb3c1f6fc, 0x62f173b9}, 30, "rev 2576" }, // IOS30 rev 2576
|
||||
{{0x97f4ad1a, 0x437842a8, 0x015435c7, 0xa2b25178, 0x3564265d}, 20, "rev 12" }, // IOS20 rev 212
|
||||
{{0xe42a9e18, 0xa967eb9c, 0x94769498, 0x917c9ab9, 0x6169e7ca}, 11, "rev 10" } // IOS11 rev 10
|
||||
{{0xa923319c, 0xbb6d25a8, 0xae8eab82, 0xa0376dc6, 0x11302999}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0xda1ff450, 0xe2710584, 0x44411c4d, 0xb7486df5, 0xfbcd67d7}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0x2d24fbca, 0xb8c075b3, 0x921f3b58, 0x8bcf0cf6, 0x5568cd1e}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x2bd8749e, 0xa0752f26, 0x480ba81e, 0xe2e90ece, 0x1b515c9d}, 36, "rev 3351" }, // (c)IOS36 (IOS236)
|
||||
{{0xff6154a5, 0xa368f31e, 0x99a685af, 0x9b19b571, 0x28badb20}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0xa923319c, 0xbb6d25a8, 0xae8eab82, 0xa0376dc6, 0x11302999}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0x5c7be813, 0xd814c8b2, 0x6f8785f4, 0xa964e276, 0x5a0fa6ce}, 38, "d2x-v3" }, // d2x-v3 r65535 Base: 38
|
||||
{{0xe32539ce, 0x43acc96c, 0x9b27dd23, 0x53b04172, 0x6f303a5c}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0xaa0688eb, 0x328e516d, 0x89bef8f7, 0xd1151bd8, 0x81af4db8}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x6a8376ab, 0xa466f9b6, 0x1403dfcf, 0x120fbe9e, 0x48e3acbe}, 80, "rev 21" }, // cIOS80 r21
|
||||
{{0x4db1be1e, 0xdb4d0c1c, 0x75900233, 0xeeae3fc6, 0x9bb86d3e}, 37, "d2x-v3" }, // d2x-v3 r65535 Base: 37
|
||||
{{0x86f60709, 0x2e580cba, 0x922cbed8, 0x28d053bd, 0xff378145}, 56, "d2x-v3" }, // d2x-v3 r65535 Base: 56
|
||||
{{0x7a7a0094, 0x2991ea1c, 0xaff02047, 0x6d1ffffc, 0x0c9e53a6}, 58, "d2x-v3" }, // d2x-v3 r65535 Base: 58
|
||||
{{0x0facacb9, 0x34c2886c, 0x5b13b098, 0x2ae699e9, 0xec47d8ee}, 57, "d2x-v3" }, // d2x-v3 r65535 Base: 57
|
||||
{{0x90badb7b, 0xeef5196e, 0x5f32f59b, 0x29a98f2d, 0xc0e64260}, 38, "d2x-v3" }, // d2x-v3 r65535 Base: 38
|
||||
{{0x57671632, 0x131c0441, 0x78991fe3, 0x7d8b1baa, 0x99f597bf}, 38, "rev 17b" }, // cIOS38 rev17b
|
||||
{{0x5db466c0, 0xd04ada02, 0x4348dbca, 0x74729d0c, 0x3cb2c30c}, 80, "rev 6944" }, // IOS80 rev 6944
|
||||
{{0x0312f927, 0xabcc84db, 0x319bf5f9, 0xa7b5432c, 0x66b5fa47}, 30, "rev 2576" }, // IOS30 rev 2576
|
||||
{{0xac131d4c, 0xfa6e61a0, 0x170cc7c4, 0xa7cbbbc7, 0xa50c7c09}, 50, "rev 4889" }, // IOS50 rev 4889
|
||||
{{0xd18fed7b, 0x26b5bf56, 0xe59e0077, 0xa7d34fa4, 0xe53e5040}, 51, "rev 4633" }, // IOS51 rev 4633
|
||||
{{0xbe46b9ef, 0x00bc99f0, 0x8d40dc62, 0x5a1af1d9, 0xa9ad2960}, 60, "rev 6174" }, // IOS60 rev 6174
|
||||
{{0xc65c0e7b, 0xaa023c9a, 0x08e31648, 0x36d105ff, 0x37c490d4}, 70, "rev 6687" }, // IOS70 rev 6687
|
||||
{{0xc2e6bdf7, 0xdddfa3aa, 0x738c0637, 0xfd21ed87, 0xac4487df}, 11, "rev 10" }, // IOS11 rev 10
|
||||
{{0xf6ce3ce6, 0xb581c754, 0xa100b63e, 0xe59ea2ca, 0x8d4a53a9}, 20, "rev 12" }, // IOS70 rev 12
|
||||
{{0x9957b893, 0x158b1c82, 0xc0e2ee3c, 0xf024697b, 0x70349fd2}, 58, "d2x-v5a1" }, // d3x-v5alpha1 r65535 Base: 58
|
||||
{{0x666b6be7, 0x7ce68420, 0xe5390361, 0xd7b7fef3, 0xfab6fbb8}, 57, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 57
|
||||
{{0x0e5e820f, 0x7f7a995f, 0xfeadfb17, 0xa951b3f3, 0xc37df8f3}, 38, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 38
|
||||
{{0x1ffeb8d3, 0x73960032, 0xce2c7e7a, 0xb0edb2af, 0xa2edcaf6}, 56, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 56
|
||||
{{0xa6d6b431, 0xa17d4300, 0xb0545865, 0x178ba8ad, 0x9db775a8}, 37, "d2x-v5a1" }, // d2x-v5alpha1 r65535 Base: 37
|
||||
{{0x285bffe0, 0x423f5a42, 0x1245eb42, 0xbaf6a560, 0x24692cd6}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0xe9341b4d, 0x9e17a081, 0xae283e2c, 0x32cd9787, 0xe94731d2}, 38, "rev 20" }, // cIOS38 rev20
|
||||
{{0x33123c8e, 0xe7c4092c, 0x3b373cd2, 0x5398e557, 0xa5083896}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0x62d422f1, 0x5d5634a2, 0xf558fd66, 0x2e5ade12, 0xea308923}, 56, "rev 20" }, // cIOS56 rev20
|
||||
{{0xebb81264, 0xc41331bc, 0x7fe76c17, 0xcf400d15, 0x25035bec}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x7dd6a102, 0x91413451, 0xb3b460bc, 0xbf6dff97, 0x79407afa}, 57, "rev 20" }, // cIOS57 rev20
|
||||
{{0x651a74de, 0x7e624b0c, 0x15e582c5, 0x94ced058, 0x27a9e4b2}, 38, "rev 21" }, // cIOS38 rev21
|
||||
{{0x1e8e63dd, 0x897a4e34, 0x79aa9395, 0x6bd8167e, 0x515101ad}, 38, "rev 21" }, // cIOS38 rev21
|
||||
{{0x018699f6, 0x1886ee6c, 0xb4144505, 0x9a5ba565, 0x7f1659be}, 56, "rev 21" }, // cIOS56 rev21
|
||||
{{0x3876b3c9, 0x4d8db267, 0xcaa0c752, 0x63fb38f8, 0x2a0226a5}, 56, "rev 21" }, // cIOS56 rev21
|
||||
{{0x1b4fb650, 0x3aaf1665, 0xebfbc1cf, 0xfe52c3ad, 0x711989f0}, 57, "rev 21" }, // cIOS57 rev21
|
||||
{{0x57efc1dc, 0x02806212, 0x17239dee, 0x31c01423, 0x14340f3f}, 57, "rev 21" }, // cIOS57 rev21
|
||||
{{0xed1afef3, 0x37a084d7, 0xa7f84e81, 0xcaba017a, 0x7707963d}, 38, "d2x-v4" }, // d2x cIOS38 v4
|
||||
{{0xc79f7915, 0x0f3c7848, 0x0fd4dafb, 0x62b61ab8, 0x675d463f}, 38, "d2x-v4" }, // d2x cIOS38 v4
|
||||
{{0x5167c1fa, 0xcf54edcd, 0x6d688d62, 0x0387c1a7, 0xbcf109e6}, 56, "d2x-v4" }, // d2x cIOS56 v4
|
||||
{{0x697f935f, 0x25929794, 0x5dd16218, 0xa15dedc9, 0x0fe63ead}, 56, "d2x-v4" }, // d2x cIOS56 v4
|
||||
{{0x385567e3, 0xeaf6d36a, 0x874b1a03, 0xabc5e3d6, 0xa74da383}, 57, "d2x-v4" }, // d2x cIOS57 v4
|
||||
{{0x3110d72d, 0x96a9aa14, 0xa5d35afe, 0xb991f1e4, 0xc88a804b}, 57, "d2x-v4" }, // d2x cIOS57 v4
|
||||
{{0xfce5cb4d, 0x055ce1ab, 0xaba3a4b1, 0x7b298665, 0x0cafbcc6}, 80, "rev 6944" }, // IOS80 rev 6944
|
||||
{{0x95e2193d, 0x4e80e7ea, 0xb2ed6b5e, 0x8012d483, 0x129dc921}, 70, "rev 6687" }, // IOS70 rev 6687
|
||||
{{0xb7268554, 0x8a7194c4, 0x2a1d6039, 0x2271ace5, 0x62db98b9}, 60, "rev 6174" }, // IOS60 rev 6174
|
||||
{{0x1a3200ec, 0x7eaa20de, 0x69c02000, 0x496f2d01, 0x506a7824}, 50, "rev 4889" }, // IOS50 rev 4889
|
||||
{{0xea390bf6, 0x4b1f6640, 0xdb46f605, 0xb3c1f6fc, 0x62f173b9}, 30, "rev 2576" }, // IOS30 rev 2576
|
||||
{{0x97f4ad1a, 0x437842a8, 0x015435c7, 0xa2b25178, 0x3564265d}, 20, "rev 12" }, // IOS20 rev 212
|
||||
{{0xe42a9e18, 0xa967eb9c, 0x94769498, 0x917c9ab9, 0x6169e7ca}, 11, "rev 10" } // IOS11 rev 10
|
||||
};
|
||||
|
||||
#endif
|
@ -5,24 +5,19 @@
|
||||
#include "languages.h"
|
||||
|
||||
|
||||
// CONF_LANG_JAPANESE
|
||||
// CONF_LANG_ENGLISH
|
||||
// CONF_LANG_GERMAN
|
||||
// CONF_LANG_FRENCH
|
||||
// CONF_LANG_SPANISH
|
||||
// CONF_LANG_ITALIAN
|
||||
// CONF_LANG_DUTCH
|
||||
// CONF_LANG_SIMP_CHINESE
|
||||
// CONF_LANG_TRAD_CHINESE
|
||||
// CONF_LANG_KOREAN
|
||||
|
||||
// !!! Doens't support special chars... !!!
|
||||
// !!! Doesn't support special chars... !!!
|
||||
// !!! Don't change the order of the parameters !!!
|
||||
|
||||
|
||||
int initLanguages(struct tm today)
|
||||
{
|
||||
TXT_AppVersion = "v2.2.1 HD Edition";
|
||||
TXT_AppVersion = "v2.2.1 HacksDen Edition";
|
||||
switch (CONF_GetLanguage())
|
||||
{
|
||||
case CONF_LANG_GERMAN:
|
||||
@ -50,6 +45,7 @@ int initLanguages(struct tm today)
|
||||
TXT_SysMenu = "Systemmenue %1.1f%c (v%d)";
|
||||
TXT_SysMenu2 = "Systemmenue %s%s (v%d)";
|
||||
TXT_SysMenu3 = "Systemmenue %1.1f%c (v%d, Info: v%d %s)";
|
||||
TXT_NO_HBC = "Homebrewkanal ist nicht installiert";
|
||||
TXT_HBF = "HomebrewFilter rev%d benutzt IOS58";
|
||||
TXT_HBC = "Homebrewkanal 1.0.%d benutzt IOS%d";
|
||||
TXT_HBC_NEW = "Homebrewkanal 1.1.0 benutzt IOS%d";
|
||||
@ -127,6 +123,7 @@ int initLanguages(struct tm today)
|
||||
TXT_SysMenu = "Menu Systeme %1.1f%c (v%d)";
|
||||
TXT_SysMenu2 = "Menu Systeme %s%s (v%d)";
|
||||
TXT_SysMenu3 = "Menu Systeme %1.1f%c (v%d, Info: v%d %s)";
|
||||
TXT_NO_HBC = "Chaine Homebrew n'est pas installé";
|
||||
TXT_HBC = "Chaine Homebrew 1.0.%d utilise IOS%d";
|
||||
TXT_HBC_NEW = "Chaine Homebrew 1.1.0 utilise IOS%d";
|
||||
TXT_HBC_112 = "Chaine Channel 1.1.%d utilise IOS%d";
|
||||
@ -202,6 +199,7 @@ int initLanguages(struct tm today)
|
||||
TXT_SysMenu = "Menu di sistema %1.1f%c (v%d)";
|
||||
TXT_SysMenu2 = "Menu di sistema %s%s (v%d)";
|
||||
TXT_SysMenu3 = "Menu di sistema %1.1f%c (v%d, Info: v%d %s)";
|
||||
TXT_NO_HBC = "Non è installato Canale Homebrew";
|
||||
TXT_HBC = "Canale Homebrew 1.0.%d appoggiato all'IOS%d";
|
||||
TXT_HBC_NEW = "Canale Homebrew 1.1.0 appoggiato all'IOS%d";
|
||||
TXT_HBC_112 = "Canale Homebrew 1.1.%d appoggiato all'IOS%d";
|
||||
@ -277,6 +275,7 @@ int initLanguages(struct tm today)
|
||||
TXT_SysMenu = "Menu de Sistema %1.1f%c (v%d)";
|
||||
TXT_SysMenu2 = "Menu de Sistema %s%s (v%d)";
|
||||
TXT_SysMenu3 = "Menu de Sistema %1.1f%c (v%d, Info: v%d %s)";
|
||||
TXT_NO_HBC = "No está instalado el Canal Homebrew";
|
||||
TXT_HBC = "Canal Homebrew 1.0.%d corriendo en IOS%d";
|
||||
TXT_HBC_NEW = "Canal Homebrew 1.1.0 corriendo en IOS%d";
|
||||
TXT_HBC_112 = "Canal Homebrew 1.1.%d corriendo en %d";
|
||||
@ -352,6 +351,7 @@ int initLanguages(struct tm today)
|
||||
TXT_SysMenu = "System Menu %1.1f%c (v%d)";
|
||||
TXT_SysMenu2 = "System Menu %s%s (v%d)";
|
||||
TXT_SysMenu3 = "System Menu %1.1f%c (v%d, Info: v%d %s)";
|
||||
TXT_NO_HBC = "Homebrew Channel is not installed";
|
||||
TXT_HBC = "Homebrew Channel 1.0.%d running on IOS%d";
|
||||
TXT_HBC_NEW = "Homebrew Channel 1.1.0 running on IOS%d";
|
||||
TXT_HBC_112 = "Homebrew Channel 1.1.%d running on IOS%d";
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <network.h>
|
||||
#include <ogc/machine/processor.h>
|
||||
#include <ogc/conf.h>
|
||||
#include <wiiuse/wpad.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "sys.h"
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <ogc/conf.h>
|
||||
#include <ogc/es.h>
|
||||
#include <ogc/ios.h>
|
||||
#include <ogc/pad.h>
|
||||
#include <wiiuse/wpad.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
@ -36,9 +37,8 @@
|
||||
|
||||
|
||||
extern bool geckoinit;
|
||||
|
||||
extern void __exception_setreload(int t);
|
||||
|
||||
static u64 current_time = 0;
|
||||
|
||||
int get_title_ios(u64 title) {
|
||||
s32 ret, fd;
|
||||
@ -101,8 +101,7 @@ bool getInfoFromContent(IOS *ios) {
|
||||
ret = read_file_from_nand(filepath, &buffer, &filesize);
|
||||
|
||||
iosinfo = (iosinfo_t *)(buffer);
|
||||
if (ret >= 0 && ios->titleID == 252 && ios->num_contents == 1) {
|
||||
//const char *checkStr = "bootcb2";
|
||||
if (ret >= 0 && ios->titleID == TID_CBOOT2 && ios->num_contents == 1) {
|
||||
int i;
|
||||
for (i = 0; i < filesize - sizeof("bootcb2")-1; i++)
|
||||
{
|
||||
@ -224,8 +223,9 @@ int main(int argc, char **argv)
|
||||
|
||||
// Get the console region
|
||||
printLoading(MSG_GetConsoleRegion);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
SystemInfo.systemRegion = CONF_GetRegion();
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
SystemInfo.shopcode = 0;
|
||||
if (!CONF_GetShopCode(&SystemInfo.shopcode)) {
|
||||
@ -236,12 +236,15 @@ int main(int argc, char **argv)
|
||||
|
||||
// Get the system menu version
|
||||
printLoading(MSG_GetSysMenuVer);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
SystemInfo.sysMenuVer = GetSysMenuVersion();
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
sysMenu systemmenu;
|
||||
|
||||
printLoading(MSG_GetHBCVer);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
|
||||
homebrew_t homebrew;
|
||||
homebrew.hbcversion = 0;
|
||||
homebrew.hbfversion = 0;
|
||||
@ -313,26 +316,31 @@ int main(int argc, char **argv)
|
||||
|
||||
SystemInfo.sysNinVersion = GetSysMenuNintendoVersion(SystemInfo.sysMenuVer);
|
||||
SystemInfo.sysMenuRegion = GetSysMenuRegion(SystemInfo.sysMenuVer);
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get the running IOS version and revision
|
||||
printLoading(MSG_GetRunningIOS);
|
||||
current_time = gettick();
|
||||
u32 runningIOS = IOS_GetVersion();
|
||||
u32 runningIOSRevision = IOS_GetRevision();
|
||||
printLoading(MSG_GetRunningIOS);
|
||||
usleep(200000);
|
||||
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get the console ID
|
||||
printLoading(MSG_GetConsoleID);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
SystemInfo.deviceID = GetDeviceID();
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get the boot2 version
|
||||
printLoading(MSG_GetBoot2);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
SystemInfo.boot2version = GetBoot2Version();
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get number of titles
|
||||
printLoading(MSG_GetNrOfTitles);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
|
||||
u32 tempTitles;
|
||||
if (ES_GetNumTitles(&tempTitles) < 0) {
|
||||
@ -354,10 +362,11 @@ int main(int argc, char **argv)
|
||||
deinitGUI();
|
||||
exit(1);
|
||||
}
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get list of titles
|
||||
printLoading(MSG_GetTitleList);
|
||||
usleep(200000);
|
||||
current_time = gettick();
|
||||
if (ES_GetTitles(titles, nbTitles) < 0) {
|
||||
printError(ERR_GetTitleList);
|
||||
sleep(5);
|
||||
@ -400,10 +409,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
SystemInfo.countIOS++;
|
||||
}
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Sort IOS titles
|
||||
printLoading(MSG_SortTitles);
|
||||
//usleep(200000);
|
||||
current_time = gettick();
|
||||
|
||||
u64 *newTitles = memalign(32, SystemInfo.countIOS*sizeof(u64));
|
||||
u32 cnt = 0;
|
||||
@ -419,7 +429,6 @@ int main(int argc, char **argv)
|
||||
|
||||
IOS ios[SystemInfo.countIOS];
|
||||
// ios Liste initialisieren
|
||||
//for (i = 0; i < countIOS; i++) {
|
||||
for (i = SystemInfo.countIOS; i--;) { // Should be slightly faster
|
||||
ios[i].infoContent = 0;
|
||||
ios[i].titleID = 0;
|
||||
@ -498,44 +507,40 @@ int main(int argc, char **argv)
|
||||
ios[i].isStub = true;
|
||||
else
|
||||
{
|
||||
ios[i].isStub = (ios[i].titleID != 256 && ios[i].titleID != 257 && ios[i].titleID != 512 && ios[i].titleID != 513 && titleSize < 0x100000);
|
||||
ios[i].isStub = (ios[i].titleID != TID_BC && ios[i].titleID != TID_MIOS && ios[i].titleID != TID_NAND && ios[i].titleID != TID_WFS && titleSize < 0x100000);
|
||||
if (ios[i].isStub) {
|
||||
gprintf("is stub\n");
|
||||
logfile("is stub\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!ios[i].isStub || ios[i].titleID == 252) {
|
||||
if (SystemInfo.nandAccess)
|
||||
if (!getInfoFromContent(&ios[i])) {
|
||||
// Hash des TMDs abrufen
|
||||
iosTMD->title_id = ((u64)(1) << 32) | 249;
|
||||
brute_tmd(iosTMD);
|
||||
if ((!ios[i].isStub || ios[i].titleID == TID_CBOOT2) && (SystemInfo.nandAccess) && (!getInfoFromContent(&ios[i]))) {
|
||||
// Hash des TMDs abrufen
|
||||
iosTMD->title_id = ((u64)(1) << 32) | 249;
|
||||
brute_tmd(iosTMD);
|
||||
|
||||
sha1 hash;
|
||||
SHA1((u8 *)iosTMDBuffer, tmdSize, hash);
|
||||
sha1 hash;
|
||||
SHA1((u8 *)iosTMDBuffer, tmdSize, hash);
|
||||
|
||||
sprintf(HashLogBuffer[lines], "IOS%d get_ios_base: \n%x %x %x %x, %x %x %x %x, %x %x %x %x, %x %x %x %x, %x %x %x %x\n", ios[i].titleID, (char)hash[0], (char)hash[1], (char)hash[2], (char)hash[3], (char)hash[4], (char)hash[5], (char)hash[6], (char)hash[7], (char)hash[8], (char)hash[9], (char)hash[10], (char)hash[11], (char)hash[12], (char)hash[13], (char)hash[14], (char)hash[15], (char)hash[16], (char)hash[17], (char)hash[18], (char)hash[19]);
|
||||
lines++;
|
||||
sprintf(HashLogBuffer[lines], "IOS%d base hash: \r\n%x %x %x %x, %x %x %x %x, %x %x %x %x, %x %x %x %x, %x %x %x %x\r\n", ios[i].titleID, hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7], hash[8], hash[9], hash[10], hash[11], hash[12], hash[13], hash[14], hash[15], hash[16], hash[17], hash[18], hash[19]);
|
||||
lines++;
|
||||
|
||||
for (j = 0;j < base_number;j++)
|
||||
{
|
||||
// Hashes berprfen
|
||||
if (memcmp((void *)hash, (u32 *)&iosHash[j].hashes, sizeof(sha1)) == 0)
|
||||
{
|
||||
if (ios[i].titleID != iosHash[j].base)
|
||||
ios[i].baseIOS = iosHash[j].base;
|
||||
strcpy(ios[i].info, iosHash[j].info);
|
||||
gprintf("is %s\n", ios[i].info);
|
||||
logfile("is %s\r\n", ios[i].info);
|
||||
}
|
||||
}
|
||||
for (j = 0;j < base_number;j++)
|
||||
{
|
||||
// Check hashes
|
||||
if (memcmp((void *)hash, (u32 *)&iosHash[j].hashes, sizeof(sha1)) == 0)
|
||||
{
|
||||
if (ios[i].titleID != iosHash[j].base)
|
||||
ios[i].baseIOS = iosHash[j].base;
|
||||
strcpy(ios[i].info, iosHash[j].info);
|
||||
gprintf("is %s\n", ios[i].info);
|
||||
logfile("is %s\r\n", ios[i].info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(iosTMDBuffer);
|
||||
|
||||
if (ios[i].titleID == 256 || ios[i].titleID == 257) SystemInfo.countBCMIOS++;
|
||||
if (ios[i].titleID == TID_BC || ios[i].titleID == TID_MIOS) SystemInfo.countBCMIOS++;
|
||||
|
||||
if (ios[i].isStub && !(iosTMD->title_version == 31338) && !(iosTMD->title_version == 65281) && !(iosTMD->title_version == 65535)) SystemInfo.countStubs++;
|
||||
}
|
||||
@ -575,7 +580,7 @@ int main(int argc, char **argv)
|
||||
// Try to identify the cIOS by the info put in by the installer/ModMii
|
||||
sysMenuInfoContent = *(u8 *)((u32)iosTMDBuffer+0x1E7);
|
||||
sprintf(filepath, "/title/%08x/%08x/content/%08x.app", 0x00000001, 2, sysMenuInfoContent);
|
||||
gprintf("/title/%08x/%08x/content/%08x.app\n", 0x00000001, 2, sysMenuInfoContent);
|
||||
gprintf(filepath);
|
||||
ret = read_file_from_nand(filepath, &buffer, &filesize);
|
||||
|
||||
sysInfo = (iosinfo_t *)(buffer);
|
||||
@ -583,7 +588,6 @@ int main(int argc, char **argv)
|
||||
{
|
||||
systemmenu.realRevision = sysInfo->version;
|
||||
systemmenu.hasInfo = true;
|
||||
//strcpy(systemmenu.info, sysInfo->name);
|
||||
sprintf(systemmenu.info, "%s%s", sysInfo->name, sysInfo->versionstring);
|
||||
if (buffer != NULL) free(buffer);
|
||||
} else {
|
||||
@ -597,10 +601,11 @@ int main(int argc, char **argv)
|
||||
|
||||
SystemInfo.countTitles = nbTitles;
|
||||
nbTitles = SystemInfo.countIOS;
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Get the certificates from the NAND
|
||||
printLoading(MSG_GetCertificates);
|
||||
usleep(200000);
|
||||
CheckTime(current_time, 200000);
|
||||
if (!GetCertificates()) {
|
||||
printError(ERR_GetCertificates);
|
||||
sleep(5);
|
||||
@ -610,6 +615,7 @@ int main(int argc, char **argv)
|
||||
|
||||
//Select an IOS to test
|
||||
WPAD_Init();
|
||||
PAD_Init();
|
||||
int selectedIOS = -1;
|
||||
u32 wpressed;
|
||||
time_t starttime;
|
||||
@ -620,9 +626,7 @@ int main(int argc, char **argv)
|
||||
bool completeReport = true;
|
||||
|
||||
while (difftime (time(NULL),starttime) < 15) {
|
||||
//while(1) {
|
||||
WPAD_ScanPads();
|
||||
wpressed = WPAD_ButtonsHeld(0);
|
||||
wpressed = DetectInput(DI_BUTTONS_HELD);
|
||||
usleep(50000);
|
||||
|
||||
if (wpressed & WPAD_BUTTON_RIGHT && selectedIOS < (nbTitles-1)){
|
||||
@ -633,10 +637,10 @@ int main(int argc, char **argv)
|
||||
|
||||
switch (titleID)
|
||||
{
|
||||
case 256:
|
||||
case TID_BC:
|
||||
sprintf(MSG_Buffer, "BC");
|
||||
break;
|
||||
case 257:
|
||||
case TID_MIOS:
|
||||
sprintf(MSG_Buffer, "MIOS");
|
||||
break;
|
||||
default:
|
||||
@ -655,10 +659,10 @@ int main(int argc, char **argv)
|
||||
|
||||
switch (titleID)
|
||||
{
|
||||
case 256:
|
||||
case TID_BC:
|
||||
sprintf(MSG_Buffer, "BC");
|
||||
break;
|
||||
case 257:
|
||||
case TID_MIOS:
|
||||
sprintf(MSG_Buffer, "MIOS");
|
||||
break;
|
||||
default:
|
||||
@ -706,14 +710,18 @@ int main(int argc, char **argv)
|
||||
{
|
||||
if (selectedIOS > -1) i = selectedIOS; //If specific IOS is selected
|
||||
|
||||
if (ios[i].titleID == 256) sprintf(MSG_Buffer2, "BC");
|
||||
else if (ios[i].titleID == 257) sprintf(MSG_Buffer2, "MIOS");
|
||||
if (ios[i].titleID == TID_BC) sprintf(MSG_Buffer2, "BC");
|
||||
else if (ios[i].titleID == TID_MIOS) sprintf(MSG_Buffer2, "MIOS");
|
||||
else sprintf(MSG_Buffer2, "IOS%d", ios[i].titleID);
|
||||
|
||||
sprintf(MSG_Buffer, MSG_TestingIOS, MSG_Buffer2);
|
||||
printLoadingBar(MSG_Buffer, (100.0/(nbTitles-1)*(i+1)));
|
||||
|
||||
if (ios[i].isStub || ios[i].titleID == 256 || ios[i].titleID == 257)
|
||||
if (ios[i].isStub ||
|
||||
ios[i].titleID == TID_BC ||
|
||||
ios[i].titleID == TID_MIOS ||
|
||||
ios[i].titleID == TID_NAND ||
|
||||
ios[i].titleID == TID_WFS)
|
||||
{
|
||||
ios[i].infoFakeSignature = false;
|
||||
ios[i].infoESIdentify = false;
|
||||
@ -770,7 +778,7 @@ int main(int argc, char **argv)
|
||||
NandStartup();
|
||||
int k = 0;
|
||||
for (k = 0; k < nbTitles; k++) {
|
||||
if ((ios[i].isStub || ios[i].titleID == 256 || ios[i].titleID == 257) && ios[i].titleID != 252) continue;
|
||||
if ((ios[i].isStub || ios[i].titleID == TID_BC || ios[i].titleID == TID_MIOS) && ios[i].titleID != TID_CBOOT2) continue;
|
||||
getInfoFromContent(&ios[k]);
|
||||
}
|
||||
NandShutdown();
|
||||
@ -796,8 +804,9 @@ int main(int argc, char **argv)
|
||||
usleep(200000);
|
||||
|
||||
//--Generate Report--
|
||||
current_time=gettick();
|
||||
printLoading(MSG_GenerateReport);
|
||||
usleep(200000);
|
||||
|
||||
|
||||
char ReportBuffer[200][100] = {{0}};
|
||||
|
||||
@ -975,7 +984,7 @@ int main(int argc, char **argv)
|
||||
sprintf(ReportBuffer[PRIILOADER], TXT_PreFiix);
|
||||
|
||||
if (homebrew.hbc == HBC_NONE || homebrew.hbcversion == 0)
|
||||
sprintf(ReportBuffer[HBC], "Homebrew Channel is not installed");
|
||||
sprintf(ReportBuffer[HBC], TXT_NO_HBC);
|
||||
else if (homebrew.hbcIOS == 0)
|
||||
sprintf(ReportBuffer[HBC], TXT_HBC_STUB);
|
||||
else if (homebrew.hbc == HBC_LULZ)
|
||||
@ -1004,9 +1013,9 @@ int main(int argc, char **argv)
|
||||
lineOffset = i + LAST;
|
||||
if (selectedIOS > -1) i = selectedIOS; //If specific IOS is selected
|
||||
|
||||
if (ios[i].titleID == 256) {
|
||||
if (ios[i].titleID == TID_BC) {
|
||||
sprintf(ReportBuffer[lineOffset], "BC v%d", ios[i].revision);
|
||||
} else if (ios[i].titleID == 257) {
|
||||
} else if (ios[i].titleID == TID_MIOS) {
|
||||
sprintf(ReportBuffer[lineOffset], "MIOS v%d%s", ios[i].revision, SystemInfo.miosInfo);
|
||||
} else if ((ios[i].titleID==222 || ios[i].titleID==224 || ios[i].titleID==223 || ios[i].titleID==202 || ios[i].titleID==225) && ios[i].baseIOS == 75) {
|
||||
sprintf(ReportBuffer[lineOffset], "IOS%d[38+37] (rev %d, Info: %s):", ios[i].titleID, ios[i].revision, ios[i].info);
|
||||
@ -1033,9 +1042,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
// Check BootMii As IOS (BootMii As IOS is installed on IOS254 rev 31338)
|
||||
if (ios[i].titleID == 254 && (ios[i].revision == 31338 || ios[i].revision == 65281))
|
||||
if (ios[i].titleID == TID_BOOTMII && (ios[i].revision == 31338 || ios[i].revision == 65281))
|
||||
strcat (ReportBuffer[lineOffset]," BootMii");
|
||||
else if (ios[i].titleID == 253 && ios[i].revision == 65535)
|
||||
else if (ios[i].titleID == TID_NANDEMU && ios[i].revision == 65535)
|
||||
strcat (ReportBuffer[lineOffset]," NANDEmu");
|
||||
else
|
||||
{
|
||||
@ -1045,7 +1054,7 @@ int main(int argc, char **argv)
|
||||
} else if (ios[i].isStub && strcmp(ios[i].info, "NULL") != 0) {
|
||||
gprintf("2. titleID: %d %s\n", ios[i].titleID, ios[i].info);
|
||||
strcat (ReportBuffer[lineOffset], ios[i].info);
|
||||
} else if(ios[i].titleID != 256 && ios[i].titleID != 257) {
|
||||
} else if(ios[i].titleID != TID_BC && ios[i].titleID != TID_MIOS) {
|
||||
if(ios[i].infoFakeSignature) strcat(ReportBuffer[lineOffset], TXT_Trucha);
|
||||
if(ios[i].infoESIdentify) strcat(ReportBuffer[lineOffset], TXT_ES);
|
||||
if(ios[i].infoFlashAccess) strcat(ReportBuffer[lineOffset], TXT_Flash);
|
||||
@ -1062,15 +1071,17 @@ int main(int argc, char **argv)
|
||||
|
||||
int NumLines = lineOffset+1;
|
||||
sprintf(ReportBuffer[NumLines], TXT_ReportDate);
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Mount the SD Card
|
||||
current_time=gettick();
|
||||
printLoading(MSG_MountSD);
|
||||
usleep(200000);
|
||||
MountSD();
|
||||
CheckTime(current_time, 200000);
|
||||
|
||||
// Initialise the FAT file system
|
||||
current_time=gettick();
|
||||
printLoading(MSG_InitFAT);
|
||||
usleep(200000);
|
||||
if (!fatInitDefault())
|
||||
{
|
||||
sprintf(MSG_Buffer, ERR_InitFAT);
|
||||
@ -1080,6 +1091,7 @@ int main(int argc, char **argv)
|
||||
} else {
|
||||
//chdir("/");
|
||||
// Create the report
|
||||
CheckTime(current_time, 200000);
|
||||
FILE *file = fopen(REPORT, "w");
|
||||
|
||||
if(!file)
|
||||
@ -1097,6 +1109,7 @@ int main(int argc, char **argv)
|
||||
fclose(file);
|
||||
|
||||
printEndSuccess(MSG_ReportSuccess);
|
||||
CheckTime(current_time, 200000);
|
||||
}
|
||||
|
||||
// Create hash log
|
||||
@ -1115,8 +1128,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
// Close the report
|
||||
fclose(file);
|
||||
|
||||
current_time=gettick();
|
||||
printEndSuccess(MSG_ReportSuccess);
|
||||
CheckTime(current_time, 200000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1125,8 +1139,7 @@ int main(int argc, char **argv)
|
||||
WPAD_Init();
|
||||
bool reportIsDisplayed = false;
|
||||
while (1) {
|
||||
WPAD_ScanPads();
|
||||
wpressed = WPAD_ButtonsHeld(0);
|
||||
wpressed = DetectInput(DI_BUTTONS_HELD);
|
||||
|
||||
// Return to the loader
|
||||
if (wpressed & WPAD_BUTTON_HOME) {
|
||||
|
@ -86,3 +86,66 @@ void NandShutdown(void)
|
||||
|
||||
NandInitialized = false;
|
||||
}
|
||||
|
||||
u32 DetectInput(u8 DownOrHeld) {
|
||||
u32 pressed = 0;
|
||||
u16 gcpressed = 0;
|
||||
VIDEO_WaitVSync();
|
||||
// Wii Remote (and Classic Controller) take precedence over GC to save time
|
||||
if (WPAD_ScanPads() > WPAD_ERR_NONE) // Scan the Wii remotes. If there any problems, skip checking buttons
|
||||
{
|
||||
if (DownOrHeld == DI_BUTTONS_DOWN) {
|
||||
pressed = WPAD_ButtonsDown(0) | WPAD_ButtonsDown(1) | WPAD_ButtonsDown(2) | WPAD_ButtonsDown(3); //Store pressed buttons
|
||||
} else {
|
||||
pressed = WPAD_ButtonsHeld(0) | WPAD_ButtonsHeld(1) | WPAD_ButtonsHeld(2) | WPAD_ButtonsHeld(3); //Store pressed buttons
|
||||
}
|
||||
|
||||
// Convert to wiimote values
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_ZR) pressed |= WPAD_BUTTON_PLUS;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_ZL) pressed |= WPAD_BUTTON_MINUS;
|
||||
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_PLUS) pressed |= WPAD_BUTTON_PLUS;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_MINUS) pressed |= WPAD_BUTTON_MINUS;
|
||||
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_A) pressed |= WPAD_BUTTON_A;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_B) pressed |= WPAD_BUTTON_B;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_X) pressed |= WPAD_BUTTON_2;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_Y) pressed |= WPAD_BUTTON_1;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_HOME) pressed |= WPAD_BUTTON_HOME;
|
||||
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_UP) pressed |= WPAD_BUTTON_UP;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_DOWN) pressed |= WPAD_BUTTON_DOWN;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_LEFT) pressed |= WPAD_BUTTON_LEFT;
|
||||
if (pressed & WPAD_CLASSIC_BUTTON_RIGHT) pressed |= WPAD_BUTTON_RIGHT;
|
||||
}
|
||||
|
||||
// Return Classic Controller and Wii Remote values
|
||||
if (pressed) return pressed;
|
||||
|
||||
// No buttons on the Wii remote or Classic Controller were pressed
|
||||
if (PAD_ScanPads() > PAD_ERR_NONE)
|
||||
{
|
||||
if (DownOrHeld == DI_BUTTONS_HELD) {
|
||||
gcpressed = PAD_ButtonsHeld(0) | PAD_ButtonsHeld(1) | PAD_ButtonsHeld(2) | PAD_ButtonsHeld(3); //Store pressed buttons
|
||||
} else {
|
||||
gcpressed = PAD_ButtonsDown(0) | PAD_ButtonsDown(1) | PAD_ButtonsDown(2) | PAD_ButtonsDown(3); //Store pressed buttons
|
||||
}
|
||||
|
||||
if (gcpressed) {
|
||||
// Button on GC controller was pressed
|
||||
if (gcpressed & PAD_TRIGGER_Z) pressed |= WPAD_NUNCHUK_BUTTON_Z;
|
||||
if (gcpressed & PAD_TRIGGER_R) pressed |= WPAD_BUTTON_PLUS;
|
||||
if (gcpressed & PAD_TRIGGER_L) pressed |= WPAD_BUTTON_MINUS;
|
||||
if (gcpressed & PAD_BUTTON_A) pressed |= WPAD_BUTTON_A;
|
||||
if (gcpressed & PAD_BUTTON_B) pressed |= WPAD_BUTTON_B;
|
||||
if (gcpressed & PAD_BUTTON_X) pressed |= WPAD_BUTTON_1;
|
||||
if (gcpressed & PAD_BUTTON_Y) pressed |= WPAD_BUTTON_2;
|
||||
if (gcpressed & PAD_BUTTON_MENU) pressed |= WPAD_BUTTON_HOME;
|
||||
if (gcpressed & PAD_BUTTON_UP) pressed |= WPAD_BUTTON_UP;
|
||||
if (gcpressed & PAD_BUTTON_LEFT) pressed |= WPAD_BUTTON_LEFT;
|
||||
if (gcpressed & PAD_BUTTON_DOWN) pressed |= WPAD_BUTTON_DOWN;
|
||||
if (gcpressed & PAD_BUTTON_RIGHT) pressed |= WPAD_BUTTON_RIGHT;
|
||||
}
|
||||
}
|
||||
return pressed;
|
||||
}
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include <malloc.h>
|
||||
#include <network.h>
|
||||
|
||||
|
||||
#include "update.h"
|
||||
#include "gecko.h"
|
||||
#include "http.h"
|
||||
|
@ -53,7 +53,7 @@ char *url_encode(char *str) {
|
||||
|
||||
void transmitSyscheck(char ReportBuffer[200][100], int *lines) {
|
||||
printLoadingBar(TXT_Upload, 0);
|
||||
gprintf("TempReport bauen\n");
|
||||
gprintf("TempReport built\n");
|
||||
|
||||
int i = 0;
|
||||
int strl = 0;
|
||||
@ -62,7 +62,7 @@ void transmitSyscheck(char ReportBuffer[200][100], int *lines) {
|
||||
strl += strlen(ReportBuffer[i]);
|
||||
strl += strlen("\n");
|
||||
}
|
||||
printLoadingBar(TXT_Upload, 5);
|
||||
printLoadingBar(TXT_Upload, 20);
|
||||
char tempReport[strl];
|
||||
memset(tempReport, 0, strl);
|
||||
for (i = 0; i <= *lines; i++) {
|
||||
@ -70,25 +70,24 @@ void transmitSyscheck(char ReportBuffer[200][100], int *lines) {
|
||||
strcat(tempReport, ReportBuffer[i]);
|
||||
strcat(tempReport, "\n");
|
||||
}
|
||||
printLoadingBar(TXT_Upload, 30);
|
||||
printLoadingBar(TXT_Upload, 40);
|
||||
|
||||
net_init();
|
||||
printLoadingBar(TXT_Upload, 60);
|
||||
gprintf("OK\n");
|
||||
char *encodedReport = url_encode(tempReport);
|
||||
char bufTransmit[18+strlen(encodedReport)];
|
||||
char password[12] = {0};
|
||||
//char password[12] = {0};
|
||||
gprintf("OK2\n");
|
||||
sprintf(bufTransmit, "password=%s&syscheck=%s", password, encodedReport);
|
||||
//sprintf(bufTransmit, "password=%s&syscheck=%s", password, encodedReport);
|
||||
sprintf(bufTransmit, "password=B277eNGp789a&syscheck=%s", encodedReport);
|
||||
gprintf("bufTransmit: %s ENDE len:%u\n", bufTransmit, strlen(bufTransmit));
|
||||
gprintf("OK3\n");
|
||||
char host[48] = {"\0"};
|
||||
char host[48];
|
||||
sprintf(host, "http://syscheck.softwii.de/syscheck_receiver.php");
|
||||
http_post(host, 1024, bufTransmit);
|
||||
printLoadingBar(TXT_Upload, 80);
|
||||
gprintf("OK4\n");
|
||||
|
||||
gprintf("\n");
|
||||
gprintf("OK4\n\n");
|
||||
|
||||
u32 http_status;
|
||||
u8* outbuf;
|
||||
@ -106,35 +105,21 @@ void transmitSyscheck(char ReportBuffer[200][100], int *lines) {
|
||||
free(outbuf);
|
||||
gprintf("len: %d, String: %s\n", lenght, ReportBuffer[*lines]);
|
||||
|
||||
u32 wpressed;
|
||||
//u32 wpressed;
|
||||
|
||||
if (!strncmp(ReportBuffer[*lines], "ERROR: ", 7)) {
|
||||
char temp[100];
|
||||
strncpy(temp, ReportBuffer[*lines]+7, 100);
|
||||
char temp[100] = {0};
|
||||
strncpy(temp, ReportBuffer[*lines]+7, sizeof(temp));
|
||||
printUploadError(temp);
|
||||
memset(ReportBuffer[*lines], 0, 100);
|
||||
(*lines)--;
|
||||
(*lines)--;
|
||||
while (1) {
|
||||
WPAD_ScanPads();
|
||||
wpressed = WPAD_ButtonsHeld(0);
|
||||
|
||||
if (wpressed & WPAD_BUTTON_A) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
printUploadSuccess(ReportBuffer[*lines]);
|
||||
while (1) {
|
||||
WPAD_ScanPads();
|
||||
wpressed = WPAD_ButtonsHeld(0);
|
||||
|
||||
if (wpressed & WPAD_BUTTON_A) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if (DetectInput(DI_BUTTONS_HELD) & WPAD_BUTTON_A) break;
|
||||
}
|
||||
free(encodedReport);
|
||||
net_deinit();
|
||||
}
|
Loading…
Reference in New Issue
Block a user