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