Added the NCR 53c815 and 53c820, and made sure the 53c810 and the 53c820 do not have the BIOS option as real ones do not have a BIOS BAR, while the 53c815 and 53c825 do (they are basically 53c810 and 53c820, respectively, with own BIOS support);

Roughly implemented the SCSI IDENTIFY message LUN operation, fixes some SCSI controller drivers in some situations;
Added an undocumented CMD640 IDE controller register required by Linux and by a DOS driver.
This commit is contained in:
OBattler
2021-03-23 06:32:18 +01:00
parent cc3129dc3c
commit bd792b8e7a
18 changed files with 107 additions and 54 deletions

View File

@@ -436,7 +436,7 @@ scsi_disk_data_phase_error(scsi_disk_t *dev)
static int
scsi_disk_pre_execution_check(scsi_disk_t *dev, uint8_t *cdb)
{
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (cdb[1] & 0xe0)) {
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (dev->cur_lun == SCSI_LUN_USE_CDB) && (cdb[1] & 0xe0)) {
scsi_disk_log("SCSI HD %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n",
dev->id, ((dev->request_length >> 5) & 7));
scsi_disk_invalid_lun(dev);
@@ -488,6 +488,7 @@ scsi_disk_reset(scsi_common_t *sc)
dev->status = 0;
dev->callback = 0.0;
dev->packet_status = PHASE_NONE;
dev->cur_lun = SCSI_LUN_USE_CDB;
}
@@ -1252,6 +1253,8 @@ scsi_disk_hard_reset(void)
dev->id = c;
dev->drv = &hdd[c];
dev->cur_lun = SCSI_LUN_USE_CDB;
scsi_disk_mode_sense_load(dev);
scsi_disk_log("SCSI disk %i attached to SCSI ID %i\n", c, hdd[c].scsi_id);