public void DisassembleBinaryLoadFile(BinaryLoadFile file, string destFileName) { StreamWriter sw = new StreamWriter(destFileName); StringBuilder s; BinaryLoadSegment seg = new BinaryLoadSegment(); for (int i = 0; i <= file.SegmentCount - 1; i++) { seg = file.Segment(i); s = new StringBuilder(); s.Append(string.Format("Segment {0}",i)); s.Append(string.Format(", Start Address: {0}" ,seg.StartAddress)); s.Append(string.Format(", End Address: {0}",seg.EndAddress)); sw.WriteLine(s.ToString()); sw.WriteLine(""); disAsm = new M6502DASM(seg.Data, seg.StartAddress); sw.Write(disAsm.Disassemble()); } sw.Close(); }
public BinaryLoadFile(byte[] data) { BinaryLoadSegment segment; int curAddress = 0; int curSegment = 1; if (data[0] != 0xff || data[1] != 0xff) throw new InvalidBinaryLoadFileException(); curAddress = 2; while (curAddress + 4 < data.Length) { segment = new BinaryLoadSegment(); segment.StartAddress = (data[curAddress + 1] * 256) + data[curAddress + 0]; segment.EndAddress = (data[curAddress + 3] * 256) + data[curAddress + 2]; if (segment.EndAddress < segment.StartAddress) { throw new InvalidBinaryLoadFileException("Segment " + curSegment.ToString() + ", end address less then start address."); } if (curAddress + segment.Length > data.Length) { throw new InvalidBinaryLoadFileException("Segment " + curSegment.ToString() + ", end address is beyond the end of the file."); } segment.AddData(data, curAddress + 4); _segments.Add(segment); curAddress = curAddress + segment.Length + 4; curSegment += 1; } }