示例#1
0
        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);
            }
        }
示例#2
0
        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++;
                }
            }
        }