__int64 sub_54D090()
{
__int64 v1; // r3
__int64 v2; // r31
char *v3; // r11
_QWORD *v4; // r29
__int64 v5; // ctr
char *v6; // r31
unsigned int *v7; // r28
__int64 v8; // r9
const void *v9; // r3
__int64 v10; // r4
__int64 v11; // r3
unsigned int v12; // [sp+70h] [-820h] BYREF
unsigned int v13; // [sp+74h] [-81Ch]
__int64 v14; // [sp+78h] [-818h]
char v15; // [sp+80h] [-810h] BYREF
if ( !sub_5DBB68() )
return 0LL;
sub_5C0370(1LL, "ss2/isd.cpp", 0x46LL);
memset(&v12, 0LL, 0x800LL);
if ( dword_D3C288 == 2 )
{
v1 = boot_storage::read(&v12, 0x90800LL, 0x800LL);
v2 = v1;
}
else
{
if ( dword_D3C288 != 3 )
return 0LL;
v1 = boot_storage::read(&v12, 0x3F000LL, 0x800LL);
v2 = v1;
}
if ( v2 )
{
v9 = (const void *)sub_605B88();
printf("boot_storage::read error. ret=0x%08x s=%p\n", v2, v9);
return 0LL;
}
if ( v12 )
{
if ( v13 )
{
v3 = &v15;
v4 = 0LL;
v5 = v12 - 1 + 1LL;
v6 = 0LL;
v7 = 0LL;
if ( !v14 )
{
do
{
v8 = *((_QWORD *)v3 + 1);
if ( v8 == 1 )
{
v6 = (char *)&v12 + *(unsigned int *)v3;
}
else if ( v8 )
{
if ( v8 == 2 )
v7 = (unsigned int *)((char *)&v12 + *(unsigned int *)v3);
}
else
{
v4 = (_QWORD *)((char *)&v12 + *(unsigned int *)v3);
}
v3 += 0x10;
--v5;
}
while ( v5 );
if ( v6 )
{
printf("[INFO]: ISD: % 17s: %.12s\n", "BoardID", v6 + 0x38);
printf(
"[INFO]: ISD: % 17s: %02X%02X%02X%02X%02X%02X\n",
"CID",
(unsigned __int8)v6[0xA],
(unsigned __int8)v6[0xB],
(unsigned __int8)v6[0xC],
(unsigned __int8)v6[0xD],
(unsigned __int8)v6[0xE],
(unsigned __int8)v6[0xF]);
printf("[INFO]: ISD: % 17s: %.32s\n", "ECID", v6 + 0x10);
printf(
"[INFO]: ISD: CKP1 ManagementID: %08X%08X\n",
*((unsigned int *)v6 + 0x16),
*((unsigned int *)v6 + 0x17));
printf("[INFO]: ISD: CKP2 ManagementID: %04X\n", *((unsigned __int16 *)v6 + 0x28));
printf("[INFO]: ISD: BootLoaderVersion: %04X\n", *((unsigned __int16 *)v6 + 0x22));
printf("[INFO]: ISD: OSUpdaterVersion: %04X\n", *((unsigned __int16 *)v6 + 0x23));
printf("[INFO]: ISD: BoardDiagVersion: %04X\n", *((unsigned __int16 *)v6 + 0x24));
printf("[INFO]: ISD: ConfigBootVersion: %04X\n", *((unsigned __int16 *)v6 + 0x25));
v1 = printf("[INFO]: ISD: LibBootVersion: %04X\n", *((unsigned __int16 *)v6 + 0x29));
}
if ( v4 )
v1 = printf(
"[INFO]: ISD: % 17s: %02X:%02X:%02X:%02X:%02X:%02X\n",
"MAC Address",
HIBYTE(*v4),
(unsigned __int8)BYTE1(*v4),
(unsigned __int8)((unsigned __int16)WORD1(*v4) >> 8),
(unsigned __int8)BYTE3(*v4),
BYTE4(*v4),
(unsigned __int8)BYTE5(*v4));
if ( v7 )
v1 = printf("[INFO]: ISD: % 17s: %08X%08X%08X%08X\n", "WLAN", *v7, v7[1], v7[2], v7[3]);
v10 = 0xFFFFLL;
if ( dword_D3C288 == 2 )
{
v11 = sub_615598(v1, 0xFFFFLL);
v10 = sub_615800(v11);
}
printf("[INFO]: StarShip2 Revision: %4X\n", v10);
return 0LL;
}
}
}
sub_5C4F9C("Invalid ISD format. Display ISD failed.\n");
printf("pRomRegionHeader->m_region_num = %d\n", v12);
printf("pRomRegionHeader->m_region_size = %d\n", v13);
printf("pRomRegionHeader->reserved = %d\n", v14);
return 0LL;
}