21 EmuTime::param time,
bool isWD1770);
23 void reset(EmuTime::param time);
26 [[nodiscard]] uint8_t
getTrackReg (EmuTime::param time)
const;
27 [[nodiscard]] uint8_t
getSectorReg(EmuTime::param time)
const;
28 [[nodiscard]] uint8_t
getDataReg (EmuTime::param time);
30 [[nodiscard]] uint8_t
peekStatusReg(EmuTime::param time)
const;
31 [[nodiscard]] uint8_t
peekTrackReg (EmuTime::param time)
const;
32 [[nodiscard]] uint8_t
peekSectorReg(EmuTime::param time)
const;
33 [[nodiscard]] uint8_t
peekDataReg (EmuTime::param time)
const;
36 void setTrackReg (uint8_t value, EmuTime::param time);
38 void setDataReg (uint8_t value, EmuTime::param time);
40 [[nodiscard]]
bool getIRQ (EmuTime::param time)
const;
41 [[nodiscard]]
bool getDTRQ(EmuTime::param time)
const;
43 [[nodiscard]]
bool peekIRQ (EmuTime::param time)
const;
44 [[nodiscard]]
bool peekDTRQ(EmuTime::param time)
const;
46 template<
typename Archive>
47 void serialize(Archive& ar,
unsigned version);
68 void executeUntil(EmuTime::param time)
override;
70 void startType1Cmd(EmuTime::param time);
72 void seek(EmuTime::param time);
73 void step(EmuTime::param time);
74 void seekNext(EmuTime::param time);
75 void endType1Cmd(EmuTime::param time);
77 void startType2Cmd (EmuTime::param time);
78 void type2Loaded (EmuTime::param time);
79 void type2Search (EmuTime::param time);
80 void type2NotFound (EmuTime::param time);
81 void type2Rotated (EmuTime::param time);
82 void startReadSector (EmuTime::param time);
83 void startWriteSector(EmuTime::param time);
84 void checkStartWrite (EmuTime::param time);
85 void preWriteSector (EmuTime::param time);
86 void writeSectorData (EmuTime::param time);
87 void postWriteSector (EmuTime::param time);
89 void startType3Cmd (EmuTime::param time);
90 void type3Loaded (EmuTime::param time);
91 void type3Rotated (EmuTime::param time);
92 void readAddressCmd (EmuTime::param time);
93 void readTrackCmd (EmuTime::param time);
94 void startWriteTrack (EmuTime::param time);
95 void writeTrackData (EmuTime::param time);
97 void startType4Cmd(EmuTime::param time);
99 void endCmd(EmuTime::param time);
101 void setDrqRate(
unsigned trackLength);
102 [[nodiscard]]
bool isReady()
const;
104 void schedule(
FSM state, EmuTime::param time);
116 EmuTime irqTime = EmuTime::infinity();
118 EmuTime pulse5 = EmuTime::infinity();
136 EmuTime hldTime = EmuTime::infinity();
138 RawTrack::Sector sectorInfo;
140 int dataAvailable = 0;
146 uint8_t commandReg = 0;
150 uint8_t dataOutReg = 0;
154 bool lastWasA1 =
false;
155 bool dataRegWritten =
false;
156 bool lastWasCRC =
false;