Document the IATACommand interface more clearly
Make SetPIOTransferMode and SetDMATransferMode actually change the values returned by Identify Device
Temporarily disable writes to hard disk image; need to ensure it's not going to wreck the image
Implement protocols as base classes on top of a common interface so that command processing and usage is uniform. Commands are much easier to implement on this platform, and most of the complicated state management in ATADevice is eliminated.
Next step is to move the DMA operations out of ATADevice and have ATAChannel delegate them to the current command
String I/O instructions are INS/INSB/INSW/INSD and OUTS/OUTSB/OUTSW/OUTSD when prefixed with REP.
We were not filling the IO tunnel buffer properly. The INSD instruction is used to read the response of ATA commands.
ATA device drivers act as virtual devices attached to ATA channels. They typically interact with real hardware by accessing a hard drive image, an XISO, a host DVD drive or similar methods.
Implemented two ATA device drivers:
- Null: absence of a device (cable disconnected)
- Dummy: a fake, empty hard drive (still incomplete; mostly to aid development)
Added ATA device drivers to the Xbox class. They need to be made configurable later.
Implemented the command processing part of the Identify Device command. Still need to implement the data buffer and reading from the buffer.
Allow 8-bit and 32-bit reads from and writes to the Data register
Reads from various command registers will now return 0 if there is no device attached to the selected port. Only the Status register is valid in this case. Writes go through but are largely ignored.
Moved ATA registers into a separate struct, embedded into ATAChannel and referenced by ATADevices
Stubbed Identify Device command
Converted ATAChannel to a class and improved initialization of ATA classes