openMSX
|
#include <IDECDROM.hh>
Public Types | |
using | CDInUse = std::bitset< MAX_CD > |
Public Member Functions | |
IDECDROM (const DeviceConfig &config) | |
IDECDROM (const IDECDROM &)=delete | |
IDECDROM (IDECDROM &&)=delete | |
IDECDROM & | operator= (const IDECDROM &)=delete |
IDECDROM & | operator= (IDECDROM &&)=delete |
~IDECDROM () override | |
void | eject () |
void | insert (const std::string &filename) |
void | getMediaInfo (TclObject &result) override |
This method gets called when information is required on the media inserted in the media slot of the provider. | |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
Public Member Functions inherited from openmsx::AbstractIDEDevice | |
void | reset (EmuTime::param time) override |
word | readData (EmuTime::param time) override |
byte | readReg (nibble reg, EmuTime::param time) override |
void | writeData (word value, EmuTime::param time) override |
void | writeReg (nibble reg, byte value, EmuTime::param time) override |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
Public Member Functions inherited from openmsx::IDEDevice | |
virtual | ~IDEDevice ()=default |
Public Member Functions inherited from openmsx::MediaInfoProvider | |
MediaInfoProvider (const MediaInfoProvider &)=delete | |
MediaInfoProvider (MediaInfoProvider &&)=delete | |
MediaInfoProvider & | operator= (const MediaInfoProvider &)=delete |
MediaInfoProvider & | operator= (MediaInfoProvider &&)=delete |
Static Public Member Functions | |
static std::shared_ptr< CDInUse > | getDrivesInUse (MSXMotherBoard &motherBoard) |
Static Public Attributes | |
static constexpr unsigned | MAX_CD = 26 |
Protected Member Functions | |
bool | isPacketDevice () override |
Is this device a packet (ATAPI) device? | |
std::string_view | getDeviceName () override |
Gets the device name to insert as "model number" into the identify block. | |
void | fillIdentifyBlock (AlignedBuffer &buffer) override |
Tells a subclass to fill the device specific parts of the identify block located in the buffer. | |
unsigned | readBlockStart (AlignedBuffer &buffer, unsigned count) override |
Called when a block of read data should be buffered by the controller: when the buffer is empty or at the start of the transfer. | |
void | readEnd () override |
Called when a read transfer completes. | |
void | writeBlockComplete (AlignedBuffer &buffer, unsigned count) override |
Called when a block of written data has been buffered by the controller: when the buffer is full or at the end of the transfer. | |
void | executeCommand (byte cmd) override |
Starts execution of an IDE command. | |
Protected Member Functions inherited from openmsx::AbstractIDEDevice | |
AbstractIDEDevice (MSXMotherBoard &motherBoard) | |
~AbstractIDEDevice () override=default | |
void | setError (byte error) |
Indicates an error: sets error register, error flag, aborts transfers. | |
unsigned | getSectorNumber () const |
Creates an LBA sector address from the contents of the sectorNumReg, cylinderLowReg, cylinderHighReg and devHeadReg registers. | |
unsigned | getNumSectors () const |
Gets the number of sectors indicated by the sector count register. | |
void | setInterruptReason (byte value) |
Writes the interrupt reason register. | |
unsigned | getByteCount () const |
Reads the byte count limit of a packet transfer in the registers. | |
void | setByteCount (unsigned count) |
Writes the byte count of a packet transfer in the registers. | |
void | setSectorNumber (unsigned lba) |
Writes a 28-bit LBA sector number in the registers. | |
void | startLongReadTransfer (unsigned count) |
Indicates the start of a read data transfer which uses blocks. | |
AlignedBuffer & | startShortReadTransfer (unsigned count) |
Indicates the start of a read data transfer where all data fits into the buffer at once. | |
void | abortReadTransfer (byte error) |
Aborts the read transfer in progress. | |
void | startWriteTransfer (unsigned count) |
Indicates the start of a write data transfer. | |
void | abortWriteTransfer (byte error) |
Aborts the write transfer in progress. | |
byte | getFeatureReg () const |
void | setLBALow (byte value) |
void | setLBAMid (byte value) |
void | setLBAHigh (byte value) |
MSXMotherBoard & | getMotherBoard () const |
Protected Member Functions inherited from openmsx::MediaInfoProvider | |
MediaInfoProvider ()=default | |
~MediaInfoProvider ()=default | |
Friends | |
class | CDXCommand |
Additional Inherited Members | |
Static Protected Attributes inherited from openmsx::AbstractIDEDevice | |
static constexpr byte | DRDY = 0x40 |
static constexpr byte | DSC = 0x10 |
static constexpr byte | DRQ = 0x08 |
static constexpr byte | ERR = 0x01 |
static constexpr byte | UNC = 0x40 |
static constexpr byte | IDNF = 0x10 |
static constexpr byte | ABORT = 0x04 |
Definition at line 31 of file IDECDROM.hh.
using openmsx::IDECDROM::CDInUse = std::bitset<MAX_CD> |
Definition at line 35 of file IDECDROM.hh.
|
explicit |
Definition at line 29 of file IDECDROM.cc.
References getDrivesInUse(), openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::HARDWARE, id, MAX_CD, openmsx::MSXMotherBoard::registerMediaInfo(), and openmsx::MSXCliComm::update().
|
delete |
|
delete |
|
override |
Definition at line 63 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::HARDWARE, id, openmsx::MSXMotherBoard::unregisterMediaInfo(), and openmsx::MSXCliComm::update().
void openmsx::IDECDROM::eject | ( | ) |
Definition at line 309 of file IDECDROM.cc.
References openmsx::File::close(), openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::MEDIA, and openmsx::MSXCliComm::update().
Referenced by openmsx::CDXCommand::execute(), and serialize().
|
overrideprotectedvirtual |
Starts execution of an IDE command.
Override this to implement additional commands and make sure you call the superclass implementation for all commands that you don't handle.
Reimplemented from openmsx::AbstractIDEDevice.
Definition at line 138 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::executeCommand(), openmsx::AbstractIDEDevice::getByteCount(), openmsx::AbstractIDEDevice::getFeatureReg(), openmsx::File::is_open(), openmsx::AbstractIDEDevice::setError(), openmsx::AbstractIDEDevice::setInterruptReason(), openmsx::AbstractIDEDevice::setLBAHigh(), openmsx::AbstractIDEDevice::setLBAMid(), and openmsx::AbstractIDEDevice::startWriteTransfer().
|
overrideprotectedvirtual |
Tells a subclass to fill the device specific parts of the identify block located in the buffer.
The generic part is already written there.
buffer | Array of 512 bytes. |
Implements openmsx::AbstractIDEDevice.
Definition at line 88 of file IDECDROM.cc.
|
overrideprotectedvirtual |
Gets the device name to insert as "model number" into the identify block.
Implements openmsx::AbstractIDEDevice.
Definition at line 83 of file IDECDROM.cc.
|
static |
Definition at line 24 of file IDECDROM.cc.
References openmsx::MSXMotherBoard::getSharedStuff().
Referenced by IDECDROM().
|
overridevirtual |
This method gets called when information is required on the media inserted in the media slot of the provider.
The provider must attach the info as a dictionary to the given TclObject.
Implements openmsx::MediaInfoProvider.
Definition at line 73 of file IDECDROM.cc.
References openmsx::TclObject::addDictKeyValue(), openmsx::File::getURL(), and openmsx::File::is_open().
void openmsx::IDECDROM::insert | ( | const std::string & | filename | ) |
Definition at line 317 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::MEDIA, and openmsx::MSXCliComm::update().
Referenced by openmsx::CDXCommand::execute(), and serialize().
|
overrideprotectedvirtual |
Is this device a packet (ATAPI) device?
Implements openmsx::AbstractIDEDevice.
Definition at line 78 of file IDECDROM.cc.
|
overrideprotectedvirtual |
Called when a block of read data should be buffered by the controller: when the buffer is empty or at the start of the transfer.
buffer | Pointer to the start of a byte array. |
count | Number of bytes to be filled by this method. This number will not exceed the array size nor the transfer length. |
Implements openmsx::AbstractIDEDevice.
Definition at line 108 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::abortReadTransfer(), openmsx::AlignedBuffer::data(), openmsx::File::is_open(), openmsx::File::read(), and openmsx::File::seek().
|
overrideprotectedvirtual |
Called when a read transfer completes.
The default implementation does nothing.
Reimplemented from openmsx::AbstractIDEDevice.
Definition at line 125 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::setInterruptReason().
void openmsx::IDECDROM::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Definition at line 394 of file IDECDROM.cc.
References eject(), openmsx::File::getURL(), insert(), and openmsx::File::is_open().
|
overrideprotectedvirtual |
Called when a block of written data has been buffered by the controller: when the buffer is full or at the end of the transfer.
buffer | Pointer to the start of a byte array. |
count | Number of data bytes in the array. |
Implements openmsx::AbstractIDEDevice.
Definition at line 130 of file IDECDROM.cc.
|
friend |
Definition at line 97 of file IDECDROM.hh.
|
staticconstexpr |
Definition at line 34 of file IDECDROM.hh.
Referenced by IDECDROM().