openMSX
|
#include <WD2793.hh>
Public Types | |
enum | FSMState { FSM_NONE , FSM_SEEK , FSM_TYPE2_LOADED , FSM_TYPE2_NOT_FOUND , FSM_TYPE2_ROTATED , FSM_CHECK_WRITE , FSM_PRE_WRITE_SECTOR , FSM_WRITE_SECTOR , FSM_POST_WRITE_SECTOR , FSM_TYPE3_LOADED , FSM_TYPE3_ROTATED , FSM_WRITE_TRACK , FSM_READ_TRACK , FSM_IDX_IRQ } |
Public Member Functions | |
WD2793 (Scheduler &scheduler, DiskDrive &drive, CliComm &cliComm, EmuTime::param time, bool isWD1770) | |
This class has emulation for WD1770, WD1793, WD2793. More... | |
void | reset (EmuTime::param time) |
byte | getStatusReg (EmuTime::param time) |
byte | getTrackReg (EmuTime::param time) const |
byte | getSectorReg (EmuTime::param time) const |
byte | getDataReg (EmuTime::param time) |
byte | peekStatusReg (EmuTime::param time) const |
byte | peekTrackReg (EmuTime::param time) const |
byte | peekSectorReg (EmuTime::param time) const |
byte | peekDataReg (EmuTime::param time) const |
void | setCommandReg (byte value, EmuTime::param time) |
void | setTrackReg (byte value, EmuTime::param time) |
void | setSectorReg (byte value, EmuTime::param time) |
void | setDataReg (byte value, EmuTime::param time) |
bool | getIRQ (EmuTime::param time) const |
bool | getDTRQ (EmuTime::param time) const |
bool | peekIRQ (EmuTime::param time) const |
bool | peekDTRQ (EmuTime::param time) const |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
![]() | |
Schedulable (const Schedulable &)=delete | |
Schedulable & | operator= (const Schedulable &)=delete |
virtual void | schedulerDeleted () |
Just before the the Scheduler is deleted, it calls this method of all the Schedulables that are still registered. More... | |
Scheduler & | getScheduler () const |
EmuTime::param | getCurrentTime () const |
Convenience method: This is the same as getScheduler().getCurrentTime(). More... | |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
Additional Inherited Members | |
![]() | |
template<typename Archive > | |
static std::vector< SyncPointBW > | serializeBW (Archive &ar) |
template<typename Archive > | |
static void | restoreOld (Archive &ar, std::vector< Schedulable * > schedulables) |
![]() | |
Schedulable (Scheduler &scheduler) | |
~Schedulable () | |
void | setSyncPoint (EmuTime::param timestamp) |
bool | removeSyncPoint () |
void | removeSyncPoints () |
bool | pendingSyncPoint () const |
bool | pendingSyncPoint (EmuTime &result) const |
openmsx::WD2793::WD2793 | ( | Scheduler & | scheduler_, |
DiskDrive & | drive_, | ||
CliComm & | cliComm_, | ||
EmuTime::param | time, | ||
bool | isWD1770_ | ||
) |
This class has emulation for WD1770, WD1793, WD2793.
Though at the moment the only emulated difference between WD1770 and WD{12}793 is that WD1770 has no ready input signal. (E.g. we don't emulate the WD1770 motor out signal yet).
Definition at line 47 of file WD2793.cc.
References reset(), and openmsx::RawTrack::STANDARD_SIZE.
byte openmsx::WD2793::getDataReg | ( | EmuTime::param | time | ) |
Definition at line 258 of file WD2793.cc.
References openmsx::RawTrack::Sector::addrCrcErr, openmsx::BUSY, openmsx::CRC_ERROR, openmsx::RawTrack::Sector::deleted, getDTRQ(), openmsx::CRC16::getValue(), openmsx::DiskDrive::invalidateWd2793ReadTrackQuirk(), openmsx::LOST_DATA, openmsx::M_FLAG, openmsx::DiskDrive::readTrackByte(), openmsx::RECORD_TYPE, openmsx::DynamicClock::reset(), and openmsx::CRC16::update().
Referenced by openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), and openmsx::YamahaFDC::readMem().
bool openmsx::WD2793::getDTRQ | ( | EmuTime::param | time | ) | const |
Definition at line 88 of file WD2793.cc.
References peekDTRQ().
Referenced by getDataReg(), getStatusReg(), openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), openmsx::YamahaFDC::readMem(), and setDataReg().
bool openmsx::WD2793::getIRQ | ( | EmuTime::param | time | ) | const |
Definition at line 103 of file WD2793.cc.
References peekIRQ().
Referenced by openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), and openmsx::YamahaFDC::readMem().
byte openmsx::WD2793::getSectorReg | ( | EmuTime::param | time | ) | const |
Definition at line 234 of file WD2793.cc.
References peekSectorReg().
Referenced by openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), and openmsx::YamahaFDC::readMem().
byte openmsx::WD2793::getStatusReg | ( | EmuTime::param | time | ) |
Definition at line 168 of file WD2793.cc.
References getDTRQ(), openmsx::HEAD_LOADED, openmsx::IDLE, openmsx::INDEX, openmsx::DiskDrive::indexPulse(), openmsx::DiskDrive::isTrack00(), openmsx::DiskDrive::isWriteProtected(), openmsx::NOT_READY, openmsx::S_DRQ, openmsx::TRACK00, and openmsx::WRITE_PROTECTED.
Referenced by peekStatusReg(), openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), and openmsx::YamahaFDC::readMem().
byte openmsx::WD2793::getTrackReg | ( | EmuTime::param | time | ) | const |
Definition at line 219 of file WD2793.cc.
References peekTrackReg().
Referenced by openmsx::AVTFDC::readIO(), openmsx::MicrosolFDC::readIO(), openmsx::SVIFDC::readIO(), openmsx::CanonFDC::readMem(), openmsx::NationalFDC::readMem(), openmsx::PhilipsFDC::readMem(), openmsx::SanyoFDC::readMem(), openmsx::SpectravideoFDC::readMem(), openmsx::ToshibaFDC::readMem(), openmsx::VictorFDC::readMem(), and openmsx::YamahaFDC::readMem().
byte openmsx::WD2793::peekDataReg | ( | EmuTime::param | time | ) | const |
Definition at line 323 of file WD2793.cc.
References peekDTRQ(), and openmsx::DiskDrive::readTrackByte().
Referenced by openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
bool openmsx::WD2793::peekDTRQ | ( | EmuTime::param | time | ) | const |
Definition at line 93 of file WD2793.cc.
References openmsx::DynamicClock::getTime().
Referenced by getDTRQ(), peekDataReg(), openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
bool openmsx::WD2793::peekIRQ | ( | EmuTime::param | time | ) | const |
Definition at line 108 of file WD2793.cc.
Referenced by getIRQ(), openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
byte openmsx::WD2793::peekSectorReg | ( | EmuTime::param | time | ) | const |
Definition at line 239 of file WD2793.cc.
Referenced by getSectorReg(), openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
byte openmsx::WD2793::peekStatusReg | ( | EmuTime::param | time | ) | const |
Definition at line 208 of file WD2793.cc.
References getStatusReg().
Referenced by openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
byte openmsx::WD2793::peekTrackReg | ( | EmuTime::param | time | ) | const |
Definition at line 224 of file WD2793.cc.
Referenced by getTrackReg(), openmsx::AVTFDC::peekIO(), openmsx::MicrosolFDC::peekIO(), openmsx::SVIFDC::peekIO(), openmsx::CanonFDC::peekMem(), openmsx::NationalFDC::peekMem(), openmsx::PhilipsFDC::peekMem(), openmsx::SanyoFDC::peekMem(), openmsx::SpectravideoFDC::peekMem(), openmsx::ToshibaFDC::peekMem(), openmsx::VictorFDC::peekMem(), and openmsx::YamahaFDC::peekMem().
void openmsx::WD2793::reset | ( | EmuTime::param | time | ) |
Definition at line 69 of file WD2793.cc.
References FSM_NONE, openmsx::Schedulable::removeSyncPoint(), openmsx::DynamicClock::reset(), and setCommandReg().
Referenced by openmsx::WD2793BasedFDC::reset(), and WD2793().
void openmsx::WD2793::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Definition at line 1120 of file WD2793.cc.
References openmsx::BUSY, openmsx::Schedulable::getCurrentTime(), openmsx::Clock< FREQ_NUM, FREQ_DENOM >::getTime(), openmsx::CRC16::getValue(), openmsx::CRC16::init(), openmsx::CliComm::printWarning(), openmsx::Schedulable::removeSyncPoint(), openmsx::DynamicClock::reset(), openmsx::Schedulable::serializeBW(), openmsx::DynamicClock::setFreq(), and openmsx::Schedulable::setSyncPoint().
void openmsx::WD2793::setCommandReg | ( | byte | value, |
EmuTime::param | time | ||
) |
Definition at line 120 of file WD2793.cc.
References openmsx::DiskDrive::flushTrack(), and openmsx::Schedulable::removeSyncPoint().
Referenced by reset(), 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::WD2793::setDataReg | ( | byte | value, |
EmuTime::param | time | ||
) |
Definition at line 244 of file WD2793.cc.
References openmsx::BUSY, getDTRQ(), and openmsx::DynamicClock::reset().
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::WD2793::setSectorReg | ( | byte | value, |
EmuTime::param | time | ||
) |
Definition at line 229 of file WD2793.cc.
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::WD2793::setTrackReg | ( | byte | value, |
EmuTime::param | time | ||
) |
Definition at line 214 of file WD2793.cc.
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().