Exemple #1
0
 public static void PrintCFIInfo(CFIInfo cfi)
 {
     Console.WriteLine($"Primary Algorithm Command Set and Control Interface ID Code: {cfi.PrimaryAlgorithmCommandSet:X4}h");
     Console.WriteLine($"Alternative Algorithm Command Set and Control Interface ID Code: {cfi.AlternativeAlgorithmCommandSet:X4}h");
     Console.WriteLine($"Vcc Logic Supply Minimum Program / Erase voltage: {cfi.VccLogicSupplyMinimumProgramErase:F1}v");
     Console.WriteLine($"Vcc Logic Supply Maximum Program / Erase voltage: {cfi.VccLogicSupplyMaximumProgramErase:F1}v");
     Console.WriteLine($"Vpp [Programming] Supply Minimum Program / Erase voltage: {cfi.VppSupplyMinimumProgramErasevoltage:F1}v");
     Console.WriteLine($"Vpp [Programming] Supply Maximum Program / Erase voltage: {cfi.VppSupplyMaximumProgramErasevoltage:F1}v");
     Console.WriteLine($"Typical timeout per single byte/word/D-word program: {cfi.TypicalTimeoutPerSingleProgram}us");
     Console.WriteLine($"Typical timeout for maximum-size multi-byte program: {cfi.TypicalTimeoutForMaximumSizeMultiByteProgram}us");
     Console.WriteLine($"Typical timeout per individual block erase: {cfi.TypicalTimeoutPerIndividualBlockErase}ms");
     Console.WriteLine($"Typical timeout for full chip erase: {cfi.TypicalTimeoutForFullChipErase}ms");
     Console.WriteLine($"Maximum timeout per single byte/word/D-word program: {cfi.MaximumTimeoutPerSingleProgram}us");
     Console.WriteLine($"Maximum timeout for maximum-size multi-byte program: {cfi.MaximumTimeoutForMaximumSizeMultiByteProgram}us");
     Console.WriteLine($"Maximum timeout per individual block erase: {cfi.MaximumTimeoutPerIndividualBlockErase}ms");
     Console.WriteLine($"Maximum timeout for full chip erase: {cfi.MaximumTimeoutForFullChipErase}ms");
     Console.WriteLine($"Device size: {cfi.DeviceSize / 1024 / 1024} MByte / {cfi.DeviceSize / 1024 / 1024 * 8} Mbit");
     Console.WriteLine($"Flash device interface: {cfi.FlashDeviceInterfaceCodeDescription.ToString().Replace("_", " ")}");
     Console.WriteLine($"Maximum number of bytes in multi-byte program: {cfi.MaximumNumberOfBytesInMultiProgram}");
     for (int eraseBlockRegion = 0; eraseBlockRegion < cfi.EraseBlockRegionsInfo.Count; eraseBlockRegion++)
     {
         Console.WriteLine($"Erase block region #{eraseBlockRegion + 1}:");
         Console.WriteLine($" - Sectors size: {cfi.EraseBlockRegionsInfo[eraseBlockRegion].SizeOfBlocks} Bytes");
         Console.WriteLine($" - Sectors count: {cfi.EraseBlockRegionsInfo[eraseBlockRegion].NumberOfBlocks}");
     }
 }
Exemple #2
0
 public static CFIInfo GetCFIInfo(FamicomDumperConnection dumper)
 {
     try
     {
         dumper.WriteCpu(0x8AAA, 0x98); // CFI mode
         var cfiRaw = dumper.ReadCpu(0x8000, 0x100);
         if (cfiRaw[0x20] != 0x51 || cfiRaw[0x22] != 0x52 || cfiRaw[0x24] != 0x59)
         {
             throw new IOException("Can't enter CFI mode. Invalid flash memory? Broken cartridge? Is it inserted?");
         }
         var cfi = new CFIInfo(cfiRaw, CFIInfo.ParseMode.Every2Bytes);
         return(cfi);
     }
     finally
     {
         dumper.WriteCpu(0x8000, 0xF0);
     }
 }