openMSX
|
#include <IDECDROM.hh>
Public Member Functions | |
IDECDROM (const IDECDROM &)=delete | |
IDECDROM & | operator= (const IDECDROM &)=delete |
IDECDROM (const DeviceConfig &config) | |
~IDECDROM () override | |
void | eject () |
void | insert (const std::string &filename) |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
![]() | |
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) |
![]() | |
virtual | ~IDEDevice ()=default |
Protected Member Functions | |
bool | isPacketDevice () override |
Is this device a packet (ATAPI) device? More... | |
const std::string & | getDeviceName () override |
Gets the device name to insert as "model number" into the identify block. More... | |
void | fillIdentifyBlock (AlignedBuffer &buffer) override |
Tells a subclass to fill the device specific parts of the identify block located in the buffer. More... | |
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. More... | |
void | readEnd () override |
Called when a read transfer completes. More... | |
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. More... | |
void | executeCommand (byte cmd) override |
Starts execution of an IDE command. More... | |
![]() | |
AbstractIDEDevice (MSXMotherBoard &motherBoard) | |
~AbstractIDEDevice () override=default | |
void | setError (byte error) |
Indicates an error: sets error register, error flag, aborts transfers. More... | |
unsigned | getSectorNumber () const |
Creates an LBA sector address from the contents of the sectorNumReg, cylinderLowReg, cylinderHighReg and devHeadReg registers. More... | |
unsigned | getNumSectors () const |
Gets the number of sectors indicated by the sector count register. More... | |
void | setInterruptReason (byte value) |
Writes the interrupt reason register. More... | |
unsigned | getByteCount () |
Reads the byte count limit of a packet transfer in the registers. More... | |
void | setByteCount (unsigned count) |
Writes the byte count of a packet transfer in the registers. More... | |
void | setSectorNumber (unsigned lba) |
Writes a 28-bit LBA sector number in the registers. More... | |
void | startLongReadTransfer (unsigned count) |
Indicates the start of a read data transfer which uses blocks. More... | |
AlignedBuffer & | startShortReadTransfer (unsigned count) |
Indicates the start of a read data transfer where all data fits into the buffer at once. More... | |
void | abortReadTransfer (byte error) |
Aborts the read transfer in progress. More... | |
void | startWriteTransfer (unsigned count) |
Indicates the start of a write data transfer. More... | |
void | abortWriteTransfer (byte error) |
Aborts the write transfer in progress. More... | |
byte | getFeatureReg () const |
void | setLBALow (byte value) |
void | setLBAMid (byte value) |
void | setLBAHigh (byte value) |
MSXMotherBoard & | getMotherBoard () const |
Friends | |
class | CDXCommand |
Additional Inherited Members | |
![]() | |
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 14 of file IDECDROM.hh.
|
delete |
|
explicit |
Definition at line 37 of file IDECDROM.cc.
References openmsx::MSXMotherBoard::getCommandController(), openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::MSXMotherBoard::getScheduler(), openmsx::MSXMotherBoard::getSharedStuff(), openmsx::MSXMotherBoard::getStateChangeDistributor(), openmsx::CliComm::HARDWARE, and openmsx::CliComm::update().
|
override |
Definition at line 69 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::HARDWARE, and openmsx::CliComm::update().
void openmsx::IDECDROM::eject | ( | ) |
Definition at line 310 of file IDECDROM.cc.
References openmsx::File::close(), openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::MEDIA, and openmsx::CliComm::update().
Referenced by openmsx::CDXCommand::execute().
|
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 139 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::ABORT, LZ4::count(), openmsx::AbstractIDEDevice::executeCommand(), openmsx::DiskImageUtils::format(), openmsx::AbstractIDEDevice::getByteCount(), openmsx::AbstractIDEDevice::getFeatureReg(), openmsx::File::is_open(), gl::min(), openmsx::AbstractIDEDevice::setByteCount(), openmsx::AbstractIDEDevice::setError(), openmsx::AbstractIDEDevice::setInterruptReason(), openmsx::AbstractIDEDevice::setLBAHigh(), openmsx::AbstractIDEDevice::setLBAMid(), utf8::unchecked::size(), openmsx::AbstractIDEDevice::startLongReadTransfer(), openmsx::AbstractIDEDevice::startShortReadTransfer(), 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 89 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.
void openmsx::IDECDROM::insert | ( | const std::string & | filename | ) |
Definition at line 318 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::getMotherBoard(), openmsx::MSXMotherBoard::getMSXCliComm(), openmsx::CliComm::MEDIA, and openmsx::CliComm::update().
Referenced by openmsx::CDXCommand::execute().
|
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 109 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::abortReadTransfer(), LZ4::count(), 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 126 of file IDECDROM.cc.
References openmsx::AbstractIDEDevice::setInterruptReason().
void openmsx::IDECDROM::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Definition at line 396 of file IDECDROM.cc.
References openmsx::filename.
|
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 131 of file IDECDROM.cc.
|
friend |
Definition at line 73 of file IDECDROM.hh.