Two instances of the IDE code setting the error register did not set it in the cdrom struct if drive is CD-ROM, now they do, fixes CD-ROM booting on the Intel Advanced/ATX and possibly other things;

Fixed IDE and ATAPI 8-bit data reads and writes by rewriting the IDE and CD-ROM PIO data read and write code so that the base code is now 8-bit;
Added some compiler directives that if set, will enable togglable logging and log breakpoints;
Empty IDE channels now always report a status of 0x10 rather than 0x20, and do it on port 3F6h/376h/36Eh/3EEh too, fixes OAKCDROM.SYS infinite loop when hitting an empty IDE channel.
This commit is contained in:
OBattler
2017-01-17 00:01:59 +01:00
parent a15a8ac57d
commit 7e54cc4436
13 changed files with 247 additions and 116 deletions

View File

@@ -189,8 +189,8 @@ int cdrom_CDROM_PHASE_to_scsi(uint8_t id);
int cdrom_atapi_phase_to_scsi(uint8_t id);
void cdrom_command(uint8_t id, uint8_t *cdb);
int cdrom_phase_callback(uint8_t id);
uint32_t cdrom_read(uint8_t channel);
int cdrom_write(uint8_t channel, uint16_t val);
uint8_t cdrom_read(uint8_t channel);
int cdrom_write(uint8_t channel, uint8_t val);
int cdrom_lba_to_msf_accurate(int lba);
void cdrom_reset(uint8_t id);
void cdrom_set_signature(int id);