31 void reset(EmuTime::param time);
38 inline void sync(EmuTime::param time) {
41 void sync2(EmuTime::param time);
48 if (CMD && engineTime <= time) {
51 assert(engineTime > time);
61 [[nodiscard]]
inline byte getStatus(EmuTime::param time) {
62 if (time >= statusChangeTime) {
73 [[nodiscard]]
inline byte readColor(EmuTime::param time) {
81 if (!CMD) status &= 0x7F;
92 [[nodiscard]]
inline unsigned getBorderX(EmuTime::param time) {
102 void setCmdReg(
byte index,
byte value, EmuTime::param time);
110 [[nodiscard]]
byte peekCmdReg(
byte index)
const;
121 template<
typename Archive>
122 void serialize(Archive& ar,
unsigned version);
125 void executeCommand(EmuTime::param time);
127 void setStatusChangeTime(EmuTime::param
t);
128 void calcFinishTime(
unsigned NX,
unsigned NY,
unsigned ticksPerPixel);
130 void startAbrt(EmuTime::param time);
131 void startPoint(EmuTime::param time);
132 void startPset(EmuTime::param time);
133 void startSrch(EmuTime::param time);
134 void startLine(EmuTime::param time);
135 template<
typename Mode>
void startLmmv(EmuTime::param time);
136 template<
typename Mode>
void startLmmm(EmuTime::param time);
137 template<
typename Mode>
void startLmcm(EmuTime::param time);
138 template<
typename Mode>
void startLmmc(EmuTime::param time);
139 template<
typename Mode>
void startHmmv(EmuTime::param time);
140 template<
typename Mode>
void startHmmm(EmuTime::param time);
141 template<
typename Mode>
void startYmmm(EmuTime::param time);
142 template<
typename Mode>
void startHmmc(EmuTime::param time);
144 template<
typename Mode>
void executePoint(EmuTime::param limit);
145 template<
typename Mode,
typename LogOp>
void executePset(EmuTime::param limit);
146 template<
typename Mode>
void executeSrch(EmuTime::param limit);
147 template<
typename Mode,
typename LogOp>
void executeLine(EmuTime::param limit);
148 template<
typename Mode,
typename LogOp>
void executeLmmv(EmuTime::param limit);
149 template<
typename Mode,
typename LogOp>
void executeLmmm(EmuTime::param limit);
150 template<
typename Mode>
void executeLmcm(EmuTime::param limit);
151 template<
typename Mode,
typename LogOp>
void executeLmmc(EmuTime::param limit);
152 template<
typename Mode>
void executeHmmv(EmuTime::param limit);
153 template<
typename Mode>
void executeHmmm(EmuTime::param limit);
154 template<
typename Mode>
void executeYmmm(EmuTime::param limit);
155 template<
typename Mode>
void executeHmmc(EmuTime::param limit);
158 inline EmuTime getNextAccessSlot(EmuTime::param time)
const {
161 inline void nextAccessSlot(EmuTime::param time) {
162 engineTime = getNextAccessSlot(time);
170 engineTime = getNextAccessSlot(engineTime, delta);
172 inline VDPAccessSlots::Calculator getSlotCalculator(
173 EmuTime::param limit)
const {
179 void commandDone(EmuTime::param time);
183 void reportVdpCommand()
const;
193 BooleanSetting cmdTraceSetting;
194 TclCallback cmdInProgressCallback;
196 Probe<bool> executingProbe;
201 EmuTime engineTime{EmuTime::zero()};
208 EmuTime statusChangeTime{EmuTime::infinity()};
224 unsigned SX{0}, SY{0}, DX{0}, DY{0}, NX{0}, NY{0};
225 unsigned ASX{0}, ADX{0}, ANX{0};
227 byte COL{0}, ARG{0}, CMD{0};
245 bool transfer{
false};
249 const bool hasExtendedVRAM;
VDPAccessSlots::Calculator getAccessSlotCalculator(EmuTime::param time, EmuTime::param limit) const
Same as getAccessSlot(), but it can be much faster for repeated calls, e.g.