示例#1
0
文件: D64Loader.cs 项目: melbcat/reko
 public bool ReadDirectorySector(LeImageReader rdr, List<ArchiveDirectoryEntry> entries)
 {
     byte nextDirTrack = 0;
     byte nextDirSector = 0;
     for (int i = 0; i < 8; ++i)
     {
         if (i == 0)
         {
             nextDirTrack = rdr.ReadByte();
             nextDirSector = rdr.ReadByte();
         }
         else
         {
             rdr.Seek(2);
         }
         var fileType = (FileType) rdr.ReadByte();
         var fileTrack = rdr.ReadByte();
         var fileSector = rdr.ReadByte();
         var sName = Encoding.ASCII.GetString(rdr.ReadBytes(16))
             .TrimEnd((char) 0xA0);
         var relTrack = rdr.ReadByte();
         var relSector = rdr.ReadByte();
         var rel = rdr.ReadByte();
         rdr.Seek(6);
         var sectorSize = rdr.ReadLeInt16();
         if ((fileType & FileType.FileTypeMask) != FileType.DEL)
         {
             entries.Add(new D64FileEntry(
                 sName,
                 RawImage, 
                 SectorOffset(fileTrack, fileSector), 
                 fileType));
         }
     }
     if (nextDirTrack != 0)
     {
         rdr.Offset = (uint) SectorOffset(nextDirTrack, nextDirSector);
         return true;
     }
     else
     {
         return false;
     }
 }
示例#2
0
 public Dictionary<int, string> LoadEntryNames()
 {
     var rdr = new LeImageReader(RawImage, this.lfaNew + this.offResidentNameTable);
     var dict = new Dictionary<int, string>();
     for (;;)
     {
         var cChar = rdr.ReadByte();
         if (cChar == 0)
             break;
         var abName = rdr.ReadBytes(cChar);
         var name = Encoding.ASCII.GetString(abName);
         int ordinal = rdr.ReadLeInt16();
         dict[ordinal] = name;
     }
     return dict;
 }
示例#3
0
        bool LoadSegment(NeSegment seg, LoadedImage loadedImage, ImageMap imageMap)
        {
            Array.Copy(
                RawImage,
                (uint)seg.DataOffset << this.cbFileAlignmentShift,
                loadedImage.Bytes,
                seg.LinearAddress - (int)loadedImage.BaseAddress.ToLinear(),
                seg.DataLength);
            var x = seg.Address.ToLinear();

            AccessMode access =
                (seg.Flags & 1) != 0
                    ? AccessMode.ReadWrite
                    : AccessMode.ReadExecute;
            imageMap.AddSegment(
                seg.Address,
                seg.Address.Selector.Value.ToString("X4"),
                access,
                seg.DataLength);

            var rdr = new LeImageReader(
                RawImage,
                seg.DataLength + ((uint)seg.DataOffset << this.cbFileAlignmentShift));
            int count = rdr.ReadLeInt16();
            return ApplyRelocations(rdr, count, seg);
        }
示例#4
0
 public string ReadResourceString(uint rva)
 {
     var rdr = new LeImageReader(imgLoaded, rva);
     var len = rdr.ReadLeInt16();
     var abStr = rdr.ReadBytes(len);
     return Encoding.ASCII.GetString(abStr);
 }