From 6eaa5f09467165e144da9369dc51aa6cfc500cd0 Mon Sep 17 00:00:00 2001 From: arbee Date: Sun, 20 Sep 2020 22:37:43 -0400 Subject: nscsi: have bad hard disk reads actually fail instead of just returning zeroes [R. Belmont] --- src/devices/bus/nscsi/hd.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/devices/bus/nscsi/hd.cpp b/src/devices/bus/nscsi/hd.cpp index 6c6543b409c..f4c74962d20 100644 --- a/src/devices/bus/nscsi/hd.cpp +++ b/src/devices/bus/nscsi/hd.cpp @@ -119,8 +119,15 @@ void nscsi_harddisk_device::scsi_command() LOG("command READ start=%08x blocks=%04x\n", lba, blocks); - scsi_data_in(2, blocks*bytes_per_sector); - scsi_status_complete(SS_GOOD); + if(hard_disk_read(harddisk, lba, block)) { + scsi_data_in(2, blocks*bytes_per_sector); + scsi_status_complete(SS_GOOD); + } + else + { + scsi_status_complete(SS_CHECK_CONDITION); + sense(false, SK_ILLEGAL_REQUEST, SK_ASC_INVALID_FIELD_IN_CDB); + } break; case SC_WRITE_6: @@ -468,8 +475,15 @@ void nscsi_harddisk_device::scsi_command() LOG("command READ EXTENDED start=%08x blocks=%04x\n",lba, blocks); - scsi_data_in(2, blocks*bytes_per_sector); - scsi_status_complete(SS_GOOD); + if(hard_disk_read(harddisk, lba, block)) { + scsi_data_in(2, blocks*bytes_per_sector); + scsi_status_complete(SS_GOOD); + } + else + { + scsi_status_complete(SS_CHECK_CONDITION); + sense(false, SK_ILLEGAL_REQUEST, SK_ASC_INVALID_FIELD_IN_CDB); + } break; case SC_WRITE_10: -- cgit v1.2.3