Commit graph

300 commits

Author SHA1 Message Date
StrikerX3
15bf901bd2 DMA read/write should consider total number of bytes, not sectors
With this, viXen can now load the dashboard!
2018-12-07 14:03:01 -02:00
StrikerX3
2c25197423 Iron out the kinks, part 4 2018-12-07 13:14:07 -02:00
StrikerX3
ab985d10e9 Iron out the kinks, part 3 2018-12-07 12:45:29 -02:00
StrikerX3
9c10cd1188 Iron out the kinks, part 2 2018-12-07 11:36:38 -02:00
StrikerX3
79ed453fc6 Iron out the kinks, part 1 2018-12-07 11:25:32 -02:00
StrikerX3
a88dea4b4a Convert DMA protocol commands to the new structure
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
2018-12-07 10:54:39 -02:00
StrikerX3
ed468a9c6d WIP: Refactor ATA commands into classes
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
2018-12-07 00:53:45 -02:00
StrikerX3
f2ec24f4be Add methods to read parameters needed by a PACKET transfer 2018-12-06 20:33:26 -02:00
StrikerX3
c6f439038c Define PACKET protocol and bits used by it 2018-12-06 20:32:51 -02:00
StrikerX3
f39cc3feaf Added dummy DVD drive stub 2018-12-06 15:39:36 -02:00
StrikerX3
3eb3d56b01 Implemented Identify PACKET Device ATA command 2018-12-06 14:52:19 -02:00
StrikerX3
db04840c6b Implement disk image write 2018-12-06 13:37:43 -02:00
StrikerX3
599d030e81 Implement basic HDD image reader
Fix BM IDE DMA writes
2018-12-06 13:23:09 -02:00
StrikerX3
c0f0f26b5e Created settings for virtual HD and DVD drives
Changed a few command line parameters and added a parameter to load a virtual hard disk image
2018-12-06 11:23:06 -02:00
StrikerX3
eff3037cd4 Implemented Initialize Device Parameters ATA command 2018-12-06 10:43:58 -02:00
StrikerX3
8f9a88acbb Finish PIO data in and out protocols
Implement Security Unlock ATA command
2018-12-06 09:52:34 -02:00
StrikerX3
3f1a12a965 Implemented IDE DMA transfers
Prefer references over pointers where applicable
2018-12-05 23:33:58 -02:00
StrikerX3
bac54bfff3 Refactor bus master IDE channels into a class
Implement worker thread for bus master IDE channels
2018-12-05 20:06:47 -02:00
StrikerX3
55b76b447c Begin implementing Read DMA ATA command 2018-12-05 18:59:00 -02:00
StrikerX3
fa2e29a7d2 Simplify ATA protocols and stub Read DMA command on ATA device class 2018-12-05 18:09:56 -02:00
StrikerX3
806d53f545 Stub Bus Master IDE commands 2018-12-05 16:43:58 -02:00
StrikerX3
472ab723b3 Don't register Host Bridge PCI BAR
This was hiding early initialization of NV2A registers
2018-12-05 16:43:35 -02:00
StrikerX3
7f993cf520 Reduce log verbosity 2018-12-05 16:42:53 -02:00
StrikerX3
213c0bac3c ATA PIO data buffer always has 512 bytes 2018-12-05 16:32:53 -02:00
StrikerX3
355e5ae3ba Added remaining BMIDE registers and implemented basic read/write functionality for them 2018-12-05 16:26:11 -02:00
StrikerX3
bf4dbe7375 Inline PCI vendor, device and revision IDs
Stub Bus Master IDE controller emulator
2018-12-05 15:43:44 -02:00
Ivan Roberto de Oliveira
1eb2565e54
Update README.md 2018-12-05 14:27:10 -02:00
Ivan Roberto de Oliveira
e1158e4997
Update README.md 2018-12-05 14:26:05 -02:00
StrikerX3
dd032ea0e3 Branding changes 2018-12-05 14:09:26 -02:00
StrikerX3
4db9914dca Fix KVM I/O handling 2018-12-04 20:15:56 -08:00
StrikerX3
f9e35303ff Initialize whatever NV2A fields GCC allows 2018-12-04 20:07:11 -08:00
StrikerX3
d345a882c6 Try initializing NV2A structs again... 2018-12-04 19:56:10 -08:00
StrikerX3
42f6d1a6d7 Remove invalid #pragma pop 2018-12-05 01:53:08 -02:00
StrikerX3
77ce795e21 Fix Linux build 2018-12-04 19:51:28 -08:00
StrikerX3
d295014d8d Seems that the hard drive doesn't need to be locked
Telling the kernel that security is supported and enabled seems to be enough
2018-12-04 22:12:24 -02:00
StrikerX3
8f0aee3f41 Prepare to implement Security Unlock ATA command 2018-12-04 22:11:04 -02:00
StrikerX3
705d9f630b Initialize dummy hard drive with security lock enabled
Rename ATA driver files to reduce verbosity
2018-12-04 21:53:43 -02:00
StrikerX3
a66da84ad0 Fix breakpoint handling
Also added some disabled code for dumping the kernel and setting a hardware breakpoint
2018-12-04 21:35:22 -02:00
StrikerX3
7e39ebe360 Set error status when processing unknown ATA commands 2018-12-04 21:33:55 -02:00
StrikerX3
5c2ac93155 Fix string I/O handling with HAXM
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.
2018-12-04 21:31:33 -02:00
StrikerX3
f8727b10ed Clear DRQ signal after reading a full block using the Data register
Stop responding to commands while BSY is asserted
2018-12-04 17:45:56 -02:00
StrikerX3
0d427ec030 Provide the means for a device to read a device driver's read buffer 2018-12-04 17:15:50 -02:00
StrikerX3
4ef6ba99bd Declared Identify Device data structure
Filling it with reasonable data for a hard drive in the dumy driver
2018-12-04 16:50:56 -02:00
StrikerX3
836c30a8b2 Initial implementation of ATA device drivers
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.
2018-12-04 14:33:30 -02:00
StrikerX3
bf4637f268 Introduced ATADevice and moved Set Features to it
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
2018-12-03 23:38:59 -02:00
StrikerX3
9e457bfe57 Implement our first command! 2018-12-03 22:34:18 -02:00
StrikerX3
6de45364a7 ATA controller registers are not part of devices 2018-12-03 21:54:10 -02:00
StrikerX3
0f074a7070 Stub our first ATA command 2018-12-03 21:41:59 -02:00
StrikerX3
60d3db0cde Devices that use IRQ should use the IRQHandler base type instead of the i8259 2018-12-03 20:37:19 -02:00
StrikerX3
2b59883eae Some fixes 2018-12-03 20:04:40 -02:00