char platform_id[8]; // syscall 387. sys_sm_get_system_info
uint8_t product_code_eid0 = pscode[3]; // syscall 867. sys_ss_appliance_info_manager -> get_ps_code. 6th byte of IDPS
uint8_t product_sub_code_eid0 = pscode[5]; // syscall 867. sys_ss_appliance_info_manager -> get_ps_code. 8th byte of IDPS
uint8_t product_code_eid5 = 0; // ? readed from flash ?
uint8_t product_sub_code_eid5 = 0; // ? readed from flash ?
uint32_t hdd_size = 100; // ? needed to find CECH slims and superslims internal storage capacity suffix (A=Small, B=Medium, C=Big)
char region_dev[1] = 'Z'; // ? needed to find DECH, DECHS, DECH-S, DECR development region suffix (A=America, J=Japan)
uint8_t vsh_target = 0; // ? needed to find DECHS, DECH-S vshtgt=S. vsh::GetReleaseTarget(void) https://www.psdevwiki.com/ps3/VSH_Exports#vshmain ?
struct ps3model {
char board[8] = 'UNK-XXX';
// Retail | Debug | AV Tool | Arcade | Tool | Tool Proto
char prefix[4] = 'UNKN'; // CECH CECH | DECH DECH | DECH DECH | GECR | DECR | DEH
char hyphen[1] = '-'; // CECH CECH- | DECH DECH- | DECH DECH- | GECR- | DECR- | DEH-
char vshtgt[1] = ' '; // CECH CECH- | DECH DECH- | DECHS DECH-S | GECR- | DECR- | DEH-R
char series[2] = 'xx'; // CECHA CECH-43 | DECHA DECH-25 | DECHSA DECH-S25 | GECR-25 | DECR-14 | DEH-R10
char region[2] = 'xx'; // CECHA01 CECH-4314 | DECHA00 DECH-2500 | DECHSA00 DECH-S2500 | GECR-2500 | DECR-1400 | DEH-R1030
char suffix[4] = ' '; // CECHA01 CECH-4314A/B/C | DECHA00A/J DECH-2500A/J | DECHSA00A/J DECH-S2500A/J | GECR-2500 | DECR-1400A/J | DEH-R1030A/J
char report[32] = 'Unknown';
};
void find_ps3model(uint8_t product_code, uint8_t product_sub_code) {
switch (hwinfo.platform_id) {
case 'Cok14':
ps3model.board = 'COK-001';
ps3model.series = '10'; // GECR-1000 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
if (product_sub_code == 1) {
ps3model.series = 'A'; // CECHAxx (CEX, SHOP), DECHA00A/J (DEX, CEX2DEX), DECHSA00A/J (AVTOOL)
} else {
ps3model.series = 'B'; // CECHBxx (CEX, SHOP), DECHB00A/J (DEX, CEX2DEX), DECHSB00A/J (AVTOOL)
}
}
break;
case 'CokB10':
ps3model.board = 'COK-002';
ps3model.series = '11'; // GECR-1100 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
if (product_sub_code == 3) {
ps3model.series = 'C'; // CECHCxx (CEX, SHOP), DECHC00A/J (DEX, CEX2DEX), DECHSC00A/J (AVTOOL)
} else {
ps3model.series = 'E'; // CECHExx (CEX, SHOP), DECHE00A/J (DEX, CEX2DEX), DECHSE00A/J (AVTOOL)
}
}
break;
case 'CokC12':
ps3model.board = 'SEM-001';
ps3model.series = '12'; // GECR-1200 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
ps3model.series = 'G'; // CECHGxx (CEX, SHOP), DECHG00A/J (DEX, CEX2DEX), DECHSG00A/J (AVTOOL)
}
break;
case 'CokD10':
ps3model.board = 'DIA-001';
ps3model.series = '13'; // GECR-1300 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
ps3model.series = 'H'; // CECHHxx (CEX, SHOP), DECHH00A/J (DEX, CEX2DEX), DECHSH00A/J (AVTOOL)
}
break;
case 'CokE10':
ps3model.board = 'DIA-002';
ps3model.series = '14'; // GECR-1400 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
// ps3model.series = 'J'; // CECHJxx (CEX, SHOP), DECHJ00A/J (DEX, CEX2DEX), DECHSJ00A/J (AVTOOL)
// ps3model.series = 'K'; // CECHKxx (CEX, SHOP), DECHK00A/J (DEX, CEX2DEX), DECHSK00A/J (AVTOOL)
}
break;
case 'CokF10':
ps3model.board = 'VER-001';
ps3model.series = '15'; // GECR-1500 (ARC, CEX2ARC)
if (product_code != 0xA0) {
ps3model.hyphen = ' ';
// ps3model.series = 'L'; // CECHLxx (CEX, SHOP), DECHL00A/J (DEX, CEX2DEX), DECHSL00A/J (AVTOOL)
// ps3model.series = 'M'; // CECHMxx (CEX, SHOP), DECHM00A/J (DEX, CEX2DEX), DECHSM00A/J (AVTOOL)
// ps3model.series = 'P'; // CECHPxx (CEX, SHOP), DECHP00A/J (DEX, CEX2DEX), DECHSP00A/J (AVTOOL)
// ps3model.series = 'Q'; // CECHQxx (CEX, SHOP), DECHQ00A/J (DEX, CEX2DEX), DECHSQ00A/J (AVTOOL)
}
break;
case 'CokG11':
ps3model.board = 'DYN-001';
ps3model.series = '20'; // DECH-2000A/J (DEX, CEX2DEX), DECH-S2000A/J (AVTOOL), GECR-2000 (ARC, CEX2ARC)
if (hdd_size = 120) {
ps3model.suffix = 'A'; // CECH-20xxA (CEX, SHOP)
} else if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-20xxB (CEX, SHOP)
} else {
ps3model.suffix = 'A/B'; // CECH-20xxA/B (CEX, SHOP)
}
break;
case 'CokH11':
ps3model.board = 'SUR-001';
ps3model.series = '21'; // DECH-2100A/J (DEX, CEX2DEX), DECH-S2100A/J (AVTOOL), GECR-2100 (ARC, CEX2ARC)
if (hdd_size = 120) {
ps3model.suffix = 'A'; // CECH-21xxA (CEX, SHOP)
} else if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-21xxB (CEX, SHOP)
} else {
ps3model.suffix = 'A/B'; // CECH-21xxA/B (CEX, SHOP)
}
break;
case 'CokJ13':
ps3model.board = 'JTP-001';
ps3model.series = '25'; // DECH-2500A/J (DEX, CEX2DEX), DECH-S2500A/J (AVTOOL), GECR-2500 (ARC, CEX2ARC)
if (hdd_size = 160) {
ps3model.suffix = 'A'; // CECH-25xxA (CEX, SHOP)
} else if (hdd_size = 320) {
ps3model.suffix = 'B'; // CECH-25xxB (CEX, SHOP)
} else {
ps3model.suffix = 'A/B'; // CECH-25xxA/B (CEX, SHOP)
}
break;
case 'CokJ20':
ps3model.board = 'JSD-001';
ps3model.series = '25'; // DECH-2500A/J (DEX, CEX2DEX), DECH-S2500A/J (AVTOOL), GECR-2500 (ARC, CEX2ARC)
if (hdd_size = 160) {
ps3model.suffix = 'A'; // CECH-25xxA (CEX, SHOP)
} else if (hdd_size = 320) {
ps3model.suffix = 'B'; // CECH-25xxB (CEX, SHOP)
} else {
ps3model.suffix = 'A/B'; // CECH-25xxA/B (CEX, SHOP)
}
break;
case 'CokK10':
ps3model.board = 'KTE-001';
ps3model.series = '30'; // DECH-3000A/J (DEX, CEX2DEX), DECH-S3000A/J (AVTOOL), GECR-3000 (ARC, CEX2ARC)
if (hdd_size = 160) {
ps3model.suffix = 'A'; // CECH-30xxA (CEX, SHOP)
} else if (hdd_size = 320) {
ps3model.suffix = 'B'; // CECH-30xxB (CEX, SHOP)
} else {
ps3model.suffix = 'A/B'; // CECH-30xxA/B (CEX, SHOP)
}
break;
case 'CokM10':
ps3model.board = 'MPX-001';
ps3model.series = '40'; // DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-40xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-40xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-40xxB/C (CEX, SHOP)
}
break;
case 'CokM20':
ps3model.board = 'MSX-001';
ps3model.series = '40'; // DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-40xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-40xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-40xxB/C (CEX, SHOP)
}
break;
case 'CokM30':
ps3model.board = 'MPX-001';
ps3model.series = '40'; // CECH-40xxA (CEX, SHOP), DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
/*
case 'CokM40':
ps3model.board = 'MSX-001';
ps3model.series = '40'; // CECH-40xxA (CEX, SHOP), DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
*/
case 'CokN10':
ps3model.board = 'NPX-001';
ps3model.series = '40'; // DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-40xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-40xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-40xxB/C (CEX, SHOP)
}
break;
/*
case 'CokN30':
ps3model.board = 'NPX-001';
ps3model.series = '40'; // CECH-40xxA (CEX, SHOP), DECH-4000A/J (DEX, CEX2DEX), DECH-S4000A/J (AVTOOL), GECR-4000 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
*/
case 'CokP10':
ps3model.board = 'PQX-001';
ps3model.series = '42'; // DECH-4200A/J (DEX, CEX2DEX), DECH-S4200A/J (AVTOOL), GECR-4200 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-42xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-42xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-42xxB/C (CEX, SHOP)
}
break;
case 'cokP20':
ps3model.board = 'PPX-001';
ps3model.series = '42'; // DECH-4200A/J (DEX, CEX2DEX), DECH-S4200A/J (AVTOOL), GECR-4200 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-42xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-42xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-42xxB/C (CEX, SHOP)
}
break;
case 'CokP30':
ps3model.board = 'PQX-001';
ps3model.series = '42'; // CECH-42xxA (CEX, SHOP), DECH-4200A/J (DEX, CEX2DEX), DECH-S4200A/J (AVTOOL), GECR-4200 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
case 'CokP40':
ps3model.board = 'PPX-001';
ps3model.series = '42'; // CECH-42xxA (CEX, SHOP), DECH-4200A/J (DEX, CEX2DEX), DECH-S4200A/J (AVTOOL), GECR-4200 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
case 'cokR10':
ps3model.board = 'RTX-001';
ps3model.series = '43'; // DECH-4300A/J (DEX, CEX2DEX), DECH-S4300A/J (AVTOOL), GECR-4300 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-43xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-43xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-43xxB/C (CEX, SHOP)
}
break;
case 'cokR20':
ps3model.board = 'REX-001';
ps3model.series = '43'; // DECH-4300A/J (DEX, CEX2DEX), DECH-S4300A/J (AVTOOL), GECR-4300 (ARC, CEX2ARC)
if (hdd_size = 250) {
ps3model.suffix = 'B'; // CECH-43xxB (CEX, SHOP)
} else if (hdd_size = 500) {
ps3model.suffix = 'C'; // CECH-43xxC (CEX, SHOP)
} else {
ps3model.suffix = 'B/C'; // CECH-43xxB/C (CEX, SHOP)
}
break;
/*
case 'cokR30':
ps3model.board = 'RTX-001';
ps3model.series = '43'; // CECH-43xxA (CEX, SHOP), DECH-4300A/J (DEX, CEX2DEX), DECH-S4300A/J (AVTOOL), GECR-4300 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
*/
case 'cokR40':
ps3model.board = 'REX-001';
ps3model.series = '43'; // CECH-43xxA (CEX, SHOP), DECH-4300A/J (DEX, CEX2DEX), DECH-S4300A/J (AVTOOL), GECR-4300 (ARC, CEX2ARC)
ps3model.suffix = 'A';
break;
case 'Deb01':
ps3model.board = 'DEB-001';
ps3model.series = '14'; // DECR-1400A/J (TOOL)
break;
case 'Cyt3.2':
ps3model.board = 'TMU-520';
ps3model.series = '10'; // DECR-1000A/J (TOOL) or DEH-R1040 (TOOL PROTO)
break;
case 'Cyt3.1':
ps3model.board = 'TMU-520';
ps3model.series = '10'; // DEH-R1030 (TOOL PROTO)
break;
/*
case 'Cyt2.2':
ps3model.board = 'TMU-510';
ps3model.series = '10'; // DEH-R1000, DEH-R1010, DEH-R1020 (TOOL PROTO)
break;
*/
}
switch (product_code) {
case '83':
ps3model.prefix = 'CECH';
ps3model.region = '00';
ps3model.report = 'Japan';
break;
case '84':
ps3model.prefix = 'CECH';
ps3model.region = '01';
ps3model.report = 'United States';
break;
case '85':
ps3model.prefix = 'CECH';
ps3model.region = '04';
ps3model.report = 'Europe';
break;
case '86':
ps3model.prefix = 'CECH';
ps3model.region = '05';
ps3model.report = 'Korea';
break;
case '87':
ps3model.prefix = 'CECH';
ps3model.region = '03';
ps3model.report = 'United Kingdom';
break;
case '88':
ps3model.prefix = 'CECH';
ps3model.region = '11';
ps3model.report = 'Mexico';
break;
case '89':
ps3model.prefix = 'CECH';
ps3model.region = '02';
ps3model.report = 'Australia';
break;
case '8A':
ps3model.prefix = 'CECH';
ps3model.region = '06';
ps3model.report = 'South Asia';
break;
case '8B':
ps3model.prefix = 'CECH';
ps3model.region = '07';
ps3model.report = 'Taiwan';
break;
case '8C':
ps3model.prefix = 'CECH';
ps3model.region = '08';
ps3model.report = 'Russia';
break;
case '8E':
ps3model.prefix = 'CECH';
ps3model.region = '12';
ps3model.report = 'Hong Kong';
break;
case '8F':
ps3model.prefix = 'CECH';
ps3model.region = '14';
ps3model.report = 'Brazil';
break;
case '82':
ps3model.prefix = 'DECH';
if (vsh_target == 0x34) {
ps3model.vshtgt = 'S'; // DECHSx00A/J (AVTOOL fat), DECH-Sxx00A/J (AVTOOL slim and superslim)
}
ps3model.region = '00';
if (region_dev = A) {
ps3model.suffix = 'A';
ps3model.report = 'America';
} else if (region_dev = J) {
ps3model.suffix = 'J';
ps3model.report = 'Japan';
} else {
ps3model.suffix = 'A/J';
ps3model.report = 'America/Japan';
}
break;
case '81':
ps3model.prefix = 'DECR';
ps3model.region = '00';
if (strcmp(hwinfo.platform_id, 'Cyt3.1') == 0) {
ps3model.prefix = 'DEH';
ps3model.vshtgt = 'R'; // DEH-R1030, dirtyhack, R is not a VSH target
ps3model.region = '30'; // DEH-R1030, dirtyhack, 30 is not a region
}
if (region_dev = A) {
ps3model.suffix = 'A';
ps3model.report = 'America';
} else if (region_dev = J) {
ps3model.suffix = 'J';
ps3model.report = 'Japan';
} else {
ps3model.suffix = 'A/J';
ps3model.report = 'America/Japan';
}
break;
case 'A0':
ps3model.prefix = 'GECR';
ps3model.region = '00';
ps3model.suffix = ' ';
ps3model.report = 'Namco Arcade System';
break;
}
}
void print_ps3model(char title) {
if (strcmp(hwinfo.platform_id, 'CokE10') == 0 && product_code != 0xA0) {
fprintf(fp, "%s %s%sJ%s/K%s (%s)\n", title, ps3model.prefix, ps3model.vshtgt, ps3model.region, ps3model.region, ps3model.report);
} else if (strcmp(hwinfo.platform_id, 'CokF10') == 0 && product_code != 0xA0) {
fprintf(fp, "%s %s%sL%s/M%s/P%s/Q%s (%s)\n", title, ps3model.prefix, ps3model.vshtgt, ps3model.region, ps3model.region, ps3model.region, ps3model.region, ps3model.report);
} else {
fprintf(fp, "%s %s%s%s%s%s%s (%s)\n", title, ps3model.prefix, ps3model.hyphen, ps3model.vshtgt, ps3model.series, ps3model.region, ps3model.suffix, ps3model.report);
}
}
void compare_ps3model() {
uint8_t product_code = product_code_eid0;
uint8_t product_sub_code = product_sub_code_eid0;
char title[24] = 'PS3 Model Name:';
if (product_code_eid0 == product_code_eid5 && product_sub_code_eid0 == product_sub_code_eid5) {
find_ps3model(product_code, product_sub_code);
print_ps3model(title);
} else {
title = 'PS3 Model Name (EID0):';
find_ps3model(product_code, product_sub_code);
print_ps3model(title);
title = 'PS3 Model Name (EID5):';
product_code = product_code_eid5;
product_sub_code = product_sub_code_eid5;
find_ps3model(product_code, product_sub_code);
print_ps3model(title);
}
fprintf(fp, "Motherboard Name: %s\n", ps3model.board);
}