Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
 public List<Address> ReadExceptionRecords(Address addrLoad, uint rvaExceptionTable, uint sizeExceptionTable)
 {
     var rvaTableEnd = rvaExceptionTable + sizeExceptionTable;
     var functionStarts = new List<Address>();
     if (rvaExceptionTable == 0 || sizeExceptionTable == 0)
         return functionStarts;
     switch (machine)
     {
     default:
         Services.RequireService<IDiagnosticsService>()
             .Warn(new NullCodeLocation(Filename), "Exception table reading not supported for machine #{0}.", machine);
         break;
     case MACHINE_R4000:
         var rdr = new LeImageReader(this.imgLoaded.Bytes, rvaExceptionTable);
         while (rdr.Offset < rvaTableEnd)
         {
             var addr = Address.Ptr32(rdr.ReadLeUInt32());
             rdr.Seek(16);
             functionStarts.Add(addr);
         }
         break;
     }
     return functionStarts;
 }