18#include "SubComponent.h"
32 Pulse() : cycles(0) { };
33 Pulse(i32 value) : cycles(value) { };
35 util::Time delay()
const;
38class Datasette final :
public SubComponent,
public Inspectable<DatasetteInfo> {
40 Descriptions descriptions = {{
43 .description =
"Datasette"
46 ConfigOptions options = {
53 DatasetteConfig config = { };
70 Pulse *pulses =
nullptr;
93 i64 nextRisingEdge = 0;
96 i64 nextFallingEdge = 0;
105 Datasette(C64 &ref) : SubComponent(ref) { };
108 void alloc(isize capacity);
111 Datasette& operator= (
const Datasette& other);
121 void serialize(T& worker)
132 if (isResetter(worker))
return;
139 void operator << (SerChecker &worker)
override { serialize(worker); }
140 void operator << (SerCounter &worker)
override;
141 void operator << (SerResetter &worker)
override { serialize(worker); }
142 void operator << (SerReader &worker)
override;
143 void operator << (SerWriter &worker)
override;
152 const Descriptions &getDescriptions()
const override {
return descriptions; }
156 void _dump(Category category, std::ostream& os)
const override;
165 void cacheInfo(DatasetteInfo &result)
const override;
174 const DatasetteConfig &getConfig()
const {
return config; }
175 const ConfigOptions &getOptions()
const override {
return options; }
176 i64 getOption(Option opt)
const override;
177 void checkOption(Option opt, i64 value)
override;
178 void setOption(Option opt, i64 value)
override;
188 bool hasTape()
const {
return numPulses != 0; }
191 util::Time tapeDuration(isize pos);
194 util::Time tapeDuration() {
return tapeDuration(numPulses); }
197 isize getCounter()
const {
return (isize)counter.asSeconds(); }
200 void insertTape(
class MediaFile &file);
206 u8 getType()
const {
return type; }
216 bool getPlayKey()
const {
return playKey; }
240 void rewind(isize seconds = 0);
243 bool getMotor()
const {
return motor; }
246 void setMotor(
bool value);
262 void processCommand(
const Cmd &cmd);
265 void processMotEvent(EventID event);
266 void processDatEvent(EventID event, i64 cycles);
271 void updateDatEvent();
274 void scheduleNextDatEvent();
277 void schedulePulse(isize nr);
VirtualC64 project namespace.
Definition CmdQueue.cpp:16
@ OPT_DAT_CONNECT
Connection status.
Definition OptionTypes.h:153
@ OPT_DAT_MODEL
Datasette model.
Definition OptionTypes.h:152