public void Save(string name, ushort startAddress, ushort length, IAddressMap mem) { var folder = CrossPlatformPathExtensions.ResolveCrossPlatformPart(WorkingDirectory); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } var combined = CrossPlatformPathExtensions.Combine(WorkingDirectory, name); var filename = Path.GetFullPath(combined); var buffer = new byte[length + 4]; buffer[0] = (byte)(startAddress & 0xff); buffer[1] = (byte)(startAddress >> 8); buffer[2] = (byte)(length & 0xff); buffer[3] = (byte)(length >> 8); for (var ix = 0; ix < length; ix++) { buffer[ix + 4] = mem.Read((ushort)(ix + startAddress)); } using (var file = File.Create(filename)) { file.Write(buffer, 0, length + 4); } }
private void LoadInternal(string name, IAddressMap mem, int overrideStartAddress = -1) { var combined = CrossPlatformPathExtensions.Combine(WorkingDirectory, name); var filename = Path.GetFullPath(combined); using (var file = File.OpenRead(filename)) { var address = file.ReadByte() + (256 * file.ReadByte()); var length = file.ReadByte() + (256 * file.ReadByte()); if (overrideStartAddress >= 0) { address = overrideStartAddress; } var byteCount = 0; while (byteCount < length) { mem.Write((ushort)(address + byteCount), (byte)file.ReadByte()); byteCount++; } } }