openMSX
|
This class connects to a FDC as a normal DiskDrive and deligates all requests to one of four other DiskDrives. More...
#include <DriveMultiplexer.hh>
Public Types | |
enum | DriveNum { DRIVE_A = 0 , DRIVE_B = 1 , DRIVE_C = 2 , DRIVE_D = 3 , NO_DRIVE = 4 } |
![]() | |
enum class | TrackMode { NORMAL , YAMAHA_FD_03 } |
Public Member Functions | |
DriveMultiplexer (DiskDrive *drv[4]) | |
void | selectDrive (DriveNum num, EmuTime::param time) |
DriveNum | getSelectedDrive () const |
bool | isDiskInserted () const override |
Is drive ready? More... | |
bool | isWriteProtected () const override |
Is disk write protected? More... | |
bool | isDoubleSided () override |
Is disk double sided? More... | |
bool | isTrack00 () const override |
Head above track 0. More... | |
void | setSide (bool side) override |
Side select. More... | |
bool | getSide () const override |
void | step (bool direction, EmuTime::param time) override |
Step head. More... | |
void | setMotor (bool status, EmuTime::param time) override |
Set motor on/off. More... | |
bool | getMotor () const override |
Returns the previously set motor status. More... | |
bool | indexPulse (EmuTime::param time) override |
Gets the state of the index pulse. More... | |
EmuTime | getTimeTillIndexPulse (EmuTime::param time, int count) override |
Return the time till the start of the next index pulse When there is no disk in the drive or when the disk is not spinning, this function returns the current time. More... | |
unsigned | getTrackLength () override |
void | writeTrackByte (int idx, byte val, bool addIdam) override |
byte | readTrackByte (int idx) override |
EmuTime | getNextSector (EmuTime::param time, RawTrack::Sector §or) override |
void | flushTrack () override |
bool | diskChanged () override |
Is disk changed? More... | |
bool | peekDiskChanged () const override |
bool | isDummyDrive () const override |
Is there a dummy (unconnected) drive? More... | |
void | applyWd2793ReadTrackQuirk () override |
See RawTrack::applyWd2793ReadTrackQuirk() More... | |
void | invalidateWd2793ReadTrackQuirk () override |
bool | isDiskInserted (DriveNum num) const |
bool | diskChanged (DriveNum num) |
bool | peekDiskChanged (DriveNum num) const |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
![]() | |
virtual | ~DiskDrive ()=default |
Additional Inherited Members | |
![]() | |
static constexpr unsigned | ROTATIONS_PER_SECOND = 5 |
This class connects to a FDC as a normal DiskDrive and deligates all requests to one of four other DiskDrives.
Definition at line 12 of file DriveMultiplexer.hh.
Enumerator | |
---|---|
DRIVE_A | |
DRIVE_B | |
DRIVE_C | |
DRIVE_D | |
NO_DRIVE |
Definition at line 15 of file DriveMultiplexer.hh.
|
explicit |
|
overridevirtual |
See RawTrack::applyWd2793ReadTrackQuirk()
Implements openmsx::DiskDrive.
Definition at line 140 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::applyWd2793ReadTrackQuirk().
|
overridevirtual |
Is disk changed?
Implements openmsx::DiskDrive.
Definition at line 115 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::diskChanged().
Referenced by openmsx::CanonFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::YamahaFDC::readMem(), and openmsx::YamahaFDC::writeMem().
bool openmsx::DriveMultiplexer::diskChanged | ( | DriveNum | num | ) |
Definition at line 120 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::diskChanged().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 110 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::flushTrack().
|
overridevirtual |
Returns the previously set motor status.
Implements openmsx::DiskDrive.
Definition at line 75 of file DriveMultiplexer.cc.
Referenced by openmsx::ToshibaFDC::peekMem().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 105 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::getNextSector().
|
inline |
Definition at line 27 of file DriveMultiplexer.hh.
Referenced by openmsx::ToshibaFDC::peekMem().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 54 of file DriveMultiplexer.cc.
Referenced by openmsx::ToshibaFDC::peekMem().
|
overridevirtual |
Return the time till the start of the next index pulse When there is no disk in the drive or when the disk is not spinning, this function returns the current time.
time | The current time |
count | Number of required index pulses. |
Implements openmsx::DiskDrive.
Definition at line 85 of file DriveMultiplexer.cc.
References LZ4::count(), and openmsx::DiskDrive::getTimeTillIndexPulse().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 90 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::getTrackLength().
|
overridevirtual |
Gets the state of the index pulse.
time | The moment in emulated time to get the pulse state for. |
Implements openmsx::DiskDrive.
Definition at line 80 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::indexPulse().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 145 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::invalidateWd2793ReadTrackQuirk().
|
overridevirtual |
Is drive ready?
Implements openmsx::DiskDrive.
Definition at line 28 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isDiskInserted().
Referenced by openmsx::YamahaFDC::peekMem(), and openmsx::YamahaFDC::readMem().
bool openmsx::DriveMultiplexer::isDiskInserted | ( | DriveNum | num | ) | const |
Definition at line 33 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isDiskInserted().
|
overridevirtual |
Is disk double sided?
Implements openmsx::DiskDrive.
Definition at line 43 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isDoubleSided().
|
overridevirtual |
Is there a dummy (unconnected) drive?
Implements openmsx::DiskDrive.
Definition at line 135 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isDummyDrive().
|
overridevirtual |
Head above track 0.
Implements openmsx::DiskDrive.
Definition at line 64 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isTrack00().
|
overridevirtual |
Is disk write protected?
Implements openmsx::DiskDrive.
Definition at line 38 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::isWriteProtected().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 125 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::peekDiskChanged().
Referenced by openmsx::CanonFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::YamahaFDC::peekMem(), and openmsx::YamahaFDC::readMem().
bool openmsx::DriveMultiplexer::peekDiskChanged | ( | DriveNum | num | ) | const |
Definition at line 130 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::peekDiskChanged().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 100 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::readTrackByte().
void openmsx::DriveMultiplexer::selectDrive | ( | DriveNum | num, |
EmuTime::param | time | ||
) |
Definition at line 18 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::setMotor(), and openmsx::DiskDrive::setSide().
Referenced by openmsx::AVTFDC::writeIO(), openmsx::MicrosolFDC::writeIO(), openmsx::SVIFDC::writeIO(), openmsx::CanonFDC::writeMem(), openmsx::NationalFDC::writeMem(), openmsx::PhilipsFDC::writeMem(), openmsx::SanyoFDC::writeMem(), openmsx::SpectravideoFDC::writeMem(), openmsx::ToshibaFDC::writeMem(), openmsx::VictorFDC::writeMem(), and openmsx::YamahaFDC::writeMem().
void openmsx::DriveMultiplexer::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Definition at line 161 of file DriveMultiplexer.cc.
|
overridevirtual |
Set motor on/off.
status | false = off, true = on. |
time | The moment in emulated time this action takes place. |
Implements openmsx::DiskDrive.
Definition at line 69 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::setMotor().
Referenced by openmsx::AVTFDC::writeIO(), openmsx::MicrosolFDC::writeIO(), openmsx::SVIFDC::writeIO(), openmsx::CanonFDC::writeMem(), openmsx::NationalFDC::writeMem(), openmsx::PhilipsFDC::writeMem(), openmsx::SanyoFDC::writeMem(), openmsx::SpectravideoFDC::writeMem(), openmsx::ToshibaFDC::writeMem(), openmsx::VictorFDC::writeMem(), and openmsx::YamahaFDC::writeMem().
|
overridevirtual |
Side select.
side | false = side 0, true = side 1. |
Implements openmsx::DiskDrive.
Definition at line 48 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::setSide().
Referenced by openmsx::AVTFDC::writeIO(), openmsx::MicrosolFDC::writeIO(), openmsx::SVIFDC::writeIO(), openmsx::CanonFDC::writeMem(), openmsx::NationalFDC::writeMem(), openmsx::PhilipsFDC::writeMem(), openmsx::SanyoFDC::writeMem(), openmsx::SpectravideoFDC::writeMem(), openmsx::ToshibaFDC::writeMem(), openmsx::VictorFDC::writeMem(), and openmsx::YamahaFDC::writeMem().
|
overridevirtual |
Step head.
direction | false = out, true = in. |
time | The moment in emulated time this action takes place. |
Implements openmsx::DiskDrive.
Definition at line 59 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::step().
|
overridevirtual |
Implements openmsx::DiskDrive.
Definition at line 95 of file DriveMultiplexer.cc.
References openmsx::DiskDrive::writeTrackByte().