public void WriteFirmware(bool TransferVIN = true) { firmware_image = new SCP_FLASH_IMAGE(RomSize._216k); firmware_image.SCTBINImage = System.IO.File.ReadAllBytes("read.bin"); if (IVFERHandshake()) { if (ProbeMemLayout() != firmware_image.FlashSize) { throw new Exception("Loaded firmware image does not match target hardware!"); } SCP_VIN_Parser PCM_VIN = new SCP_VIN_Parser(ReadVINBlock()); //Write Vin to disk if (TransferVIN) { firmware_image.VIN.PATS_Key = PCM_VIN.PATS_Key; firmware_image.VIN.VIN = PCM_VIN.VIN; } EraseFlash(); switch (firmware_image.FlashSize) { case RomSize._88k: ProgramBank(0x12000, firmware_image.GetBank(1)); ProgramBank(0x82000, firmware_image.GetBank(8)); break; case RomSize._112k: ProgramBank(0x12000, firmware_image.GetBank(1)); ProgramBank(0x82000, firmware_image.GetBank(8)); break; case RomSize._216k: ProgramBank(0x02000, firmware_image.GetBank(0)); ProgramBank(0x12000, firmware_image.GetBank(1)); ProgramBank(0x92000, firmware_image.GetBank(9)); ProgramBank(0x82000, firmware_image.GetBank(8)); break; } if (!Checksum()) { throw new Exception("Checksum of firmware write failed!"); } } }
public SCP_FLASH_IMAGE(RomSize FlashSize) { switch (FlashSize) { case RomSize._88k: bank1 = new byte[0x8000]; break; case RomSize._112k: bank1 = new byte[0xE000]; break; case RomSize._216k: bank1 = new byte[0xC000]; break; default: throw new ArgumentOutOfRangeException("Invalid romsize when constructing SCP_FLASH_IMAGE"); } flash_size = FlashSize; vin = new SCP_VIN_Parser(); }