private void DumpClusterNecRom(IKW1281Dialog kwp1281) { if (_controllerAddress != (int)ControllerAddress.Cluster) { Logger.WriteLine("Only supported for cluster"); return; } var dumpFileName = _filename ?? "cluster_nec_rom_dump.bin"; const byte blockSize = 16; Logger.WriteLine($"Saving cluster NEC ROM to {dumpFileName}"); bool succeeded = true; using (var fs = File.Create(dumpFileName, blockSize, FileOptions.WriteThrough)) { { for (int address = 0; address < 65536; address += blockSize) { var blockBytes = kwp1281.CustomReadNecRom((ushort)address, blockSize); if (blockBytes == null) { blockBytes = Enumerable.Repeat((byte)0, blockSize).ToList(); succeeded = false; } else if (blockBytes.Count < blockSize) { blockBytes.AddRange(Enumerable.Repeat((byte)0, blockSize - blockBytes.Count)); succeeded = false; } fs.Write(blockBytes.ToArray(), 0, blockBytes.Count); fs.Flush(); } } } if (!succeeded) { Logger.WriteLine(); Logger.WriteLine("**********************************************************************"); Logger.WriteLine("*** Warning: Some bytes could not be read and were replaced with 0 ***"); Logger.WriteLine("**********************************************************************"); Logger.WriteLine(); } }