diff options
Diffstat (limited to 'src/devices/machine/nscsi_bus.cpp')
-rw-r--r-- | src/devices/machine/nscsi_bus.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/devices/machine/nscsi_bus.cpp b/src/devices/machine/nscsi_bus.cpp index 9e6bdfbaa60..f8be56e50a7 100644 --- a/src/devices/machine/nscsi_bus.cpp +++ b/src/devices/machine/nscsi_bus.cpp @@ -563,11 +563,13 @@ void nscsi_full_device::scsi_data_out(int buf, int size) c->param2 = size; } -void nscsi_full_device::sense(bool deferred, uint8_t key) +void nscsi_full_device::sense(bool deferred, uint8_t key, uint8_t asc, uint8_t ascq) { memset(scsi_sense_buffer, 0, sizeof(scsi_sense_buffer)); scsi_sense_buffer[0] = deferred ? 0x71 : 0x70; scsi_sense_buffer[2] = key; + scsi_sense_buffer[12] = asc; + scsi_sense_buffer[13] = ascq; } void nscsi_full_device::scsi_unknown_command() @@ -586,7 +588,11 @@ void nscsi_full_device::scsi_command() switch(scsi_cmdbuf[0]) { case SC_REQUEST_SENSE: LOG("command REQUEST SENSE\n"); - scsi_data_in(SBUF_SENSE, 8); + /* + * Targets shall be capable of returning eighteen bytes of data in + * response to a REQUEST SENSE command. + */ + scsi_data_in(SBUF_SENSE, 18); scsi_status_complete(SS_GOOD); break; default: @@ -619,7 +625,9 @@ int nscsi_full_device::get_lun(int def) void nscsi_full_device::bad_lun() { scsi_status_complete(SS_CHECK_CONDITION); - sense(false, 2); + + // key:illegal request, asc:logical unit not supported + sense(false, 5, 0x25); } // Arbitration delay (2.4us) |