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;
            }
        }