Add default ISP information to flashrom

This commit is contained in:
Flyinghead 2019-08-14 20:05:42 +02:00
parent 7d15e751d6
commit aaf950d470
2 changed files with 88 additions and 0 deletions

View File

@ -197,6 +197,9 @@ struct SRamChip : MemChip
// flash logical blocks
#define FLASH_USER_SYSCFG 0x05
#define FLASH_USER_INET 0x80
#define FLASH_USER_ISP1 0xC0
#define FLASH_USER_ISP2 0xC6
struct flash_syscfg_block {
u16 block_id;
@ -211,6 +214,25 @@ struct flash_syscfg_block {
u8 reserved[50];
};
struct flash_isp1_block {
u16 block_id;
u8 _unknown[4];
char sega[4];
char username[28];
char password[16];
char phone[8];
u16 crc;
};
struct flash_isp2_block {
u16 block_id;
char sega[4];
char username[28];
char password[16];
char phone[12];
u16 crc;
};
// header block in block-allocated partition
struct flash_header_block {
char magic[16];

View File

@ -39,6 +39,70 @@ static std::string getRomPrefix()
}
}
static void add_isp_to_nvmem(DCFlashChip *flash)
{
u8 block[64];
if (!flash->ReadBlock(FLASH_PT_USER, FLASH_USER_INET, block))
{
memset(block, 0, sizeof(block));
strcpy((char *)block + 2, "PWBrowser");
block[12] = 0x1c;
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_INET, block);
memset(block, 0, sizeof(block));
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_INET + 1, block);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_INET + 2, block);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_INET + 3, block);
memset(block + 27, 0xFF, sizeof(block) - 27);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_INET + 4, block);
memset(block, 0xFF, sizeof(block));
for (u32 i = FLASH_USER_INET + 5; i <= 0xbf; i++)
flash->WriteBlock(FLASH_PT_USER, i, block);
flash_isp1_block isp1;
memset(&isp1, 0, sizeof(isp1));
isp1._unknown[0] = 0xFF;
isp1._unknown[1] = 0xFE;
isp1._unknown[2] = 0xFF;
isp1._unknown[3] = 0xFF;
memcpy(isp1.sega, "SEGA", 4);
strcpy(isp1.username, "flycast1");
strcpy(isp1.password, "password");
strcpy(isp1.phone, "1234567");
if (flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1, &isp1) != 1)
WARN_LOG(FLASHROM, "Failed to save ISP information to flash RAM");
memset(block, 0xFF, sizeof(block));
block[34] = 0;
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1 + 1, block);
memset(block, 0xFF, sizeof(block));
block[9] = 0;
memset(block + 49, 0, 13);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1 + 2, block);
memset(block, 0xFF, sizeof(block));
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1 + 3, block);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1 + 4, block);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP1 + 5, block);
flash_isp2_block isp2;
memset(&isp2, 0, sizeof(isp2));
memcpy(isp2.sega, "SEGA", 4);
strcpy(isp2.username, "flycast2");
strcpy(isp2.password, "password");
strcpy(isp2.phone, "1234567");
if (flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP2, &isp2) != 1)
WARN_LOG(FLASHROM, "Failed to save ISP information to flash RAM");
u8 block[64];
memset(block, 0xFF, sizeof(block));
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP2 + 1, block);
block[9] = 0;
memset(block + 49, 0, 13);
flash->WriteBlock(FLASH_PT_USER, FLASH_USER_ISP2 + 2, block);
for (u32 i = FLASH_USER_ISP2 + 3; i <= 0xEA; i++)
flash->WriteBlock(FLASH_PT_USER, i, block);
}
}
static bool nvmem_load(const string& root)
{
bool rc;
@ -92,6 +156,8 @@ static bool nvmem_load(const string& root)
if (static_cast<DCFlashChip*>(sys_nvmem)->WriteBlock(FLASH_PT_USER, FLASH_USER_SYSCFG, &syscfg) != 1)
WARN_LOG(FLASHROM, "Failed to save time and language to flash RAM");
add_isp_to_nvmem(static_cast<DCFlashChip*>(sys_nvmem));
}
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)