Add default ISP information to flashrom
This commit is contained in:
parent
7d15e751d6
commit
aaf950d470
|
@ -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];
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue