9 :
Disk(std::move(name_))
10 , nbSectors(size_t(-1))
15 void SectorBasedDisk::writeTrackImpl(
byte track,
byte side,
const RawTrack& input)
26 auto logicalSector =
physToLog(track, side, s.sector);
33 void SectorBasedDisk::readTrack(
byte track,
byte side,
RawTrack& output)
44 int num = track | (side << 8);
45 if (num == cachedTrackNum) {
46 output = cachedTrackData;
86 auto write = [&](
unsigned n,
byte value) {
87 repeat(n, [&] { output.write(idx++, value); });
100 output.write(idx++, 0xFE,
true);
101 output.write(idx++, track);
102 output.write(idx++, side);
103 output.write(idx++, j + 1);
104 output.write(idx++, 0x02);
105 word addrCrc = output.calcCrc(idx - 8, 8);
106 output.write(idx++, addrCrc >> 8);
107 output.write(idx++, addrCrc & 0xff);
115 auto logicalSector =
physToLog(track, side, j + 1);
118 for (
auto& r : buf.raw) output.write(idx++, r);
120 word dataCrc = output.calcCrc(idx - (512 + 4), 512 + 4);
121 output.write(idx++, dataCrc >> 8);
122 output.write(idx++, dataCrc & 0xff);
129 }
catch (MSXException& ) {
138 cachedTrackData = output;
147 size_t SectorBasedDisk::getNbSectorsImpl()
const
149 assert(nbSectors !=
size_t(-1));
154 assert(nbSectors ==
size_t(-1));
unsigned getSectorsPerTrack()
void setNbSides(unsigned num)
void setSectorsPerTrack(unsigned num)
virtual void detectGeometry()
size_t physToLog(byte track, byte side, byte sector)
void readBlock(int idx, std::span< byte > destination) const
Like memcpy() but copy from/to circular buffer.
std::vector< Sector > decodeAll() const
Get info on all sectors in this track.
static constexpr unsigned STANDARD_SIZE
virtual void checkCaches()
void readSector(size_t sector, SectorBuffer &buf)
size_t getNbSectors() const
virtual void flushCaches()
void writeSector(size_t sector, const SectorBuffer &buf)
void detectGeometry() override
void setNbSectors(size_t num)
void flushCaches() override
SectorBasedDisk(DiskName name)
This file implemented 3 utility functions:
uint16_t word
16 bit unsigned integer
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.
constexpr auto xrange(T e)