nscsi_?d: Return diagnostics [O. Galibert]

This commit is contained in:
Olivier Galibert 2019-01-24 07:37:30 +01:00
parent 1df40d380c
commit e9b5e4f402
2 changed files with 84 additions and 0 deletions

View File

@ -251,6 +251,48 @@ void nscsi_cdrom_device::scsi_command()
scsi_status_complete(SS_GOOD);
break;
case SC_RECIEVE_DIAG_RES: {
LOG("command RECIEVE DIAGNOSTICS RESULTS");
int size = (scsi_cmdbuf[3] << 8) | scsi_cmdbuf[4];
int pos = 0;
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 6;
scsi_cmdbuf[pos++] = 0; // ROM is OK
scsi_cmdbuf[pos++] = 0; // RAM is OK
scsi_cmdbuf[pos++] = 0; // Data buffer is OK
scsi_cmdbuf[pos++] = 0; // Interface is OK
scsi_cmdbuf[pos++] = 0;
if(size > pos)
size = pos;
scsi_data_in(0, size);
scsi_status_complete(SS_GOOD);
break;
}
case SC_SEND_DIAGNOSTICS: {
LOG("command SEND DIAGNOSTICS");
int size = (scsi_cmdbuf[3] << 8) | scsi_cmdbuf[4];
if(scsi_cmdbuf[1] & 4) {
// Self-test
scsi_status_complete(SS_GOOD);
break;
}
int pos = 0;
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 6;
scsi_cmdbuf[pos++] = 0; // ROM is OK
scsi_cmdbuf[pos++] = 0; // RAM is OK
scsi_cmdbuf[pos++] = 0; // Data buffer is OK
scsi_cmdbuf[pos++] = 0; // Interface is OK
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 0;
if(size > pos)
size = pos;
scsi_data_in(0, size);
scsi_status_complete(SS_GOOD);
break;
}
case SC_READ_CAPACITY: {
if(!cdrom) {
return_no_cd();

View File

@ -400,6 +400,48 @@ void nscsi_harddisk_device::scsi_command()
scsi_status_complete(SS_GOOD);
break;
case SC_RECIEVE_DIAG_RES: {
LOG("command RECIEVE DIAGNOSTICS RESULTS");
int size = (scsi_cmdbuf[3] << 8) | scsi_cmdbuf[4];
int pos = 0;
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 6;
scsi_cmdbuf[pos++] = 0; // ROM is OK
scsi_cmdbuf[pos++] = 0; // RAM is OK
scsi_cmdbuf[pos++] = 0; // Data buffer is OK
scsi_cmdbuf[pos++] = 0; // Interface is OK
scsi_cmdbuf[pos++] = 0;
if(size > pos)
size = pos;
scsi_data_in(0, size);
scsi_status_complete(SS_GOOD);
break;
}
case SC_SEND_DIAGNOSTICS: {
LOG("command SEND DIAGNOSTICS");
int size = (scsi_cmdbuf[3] << 8) | scsi_cmdbuf[4];
if(scsi_cmdbuf[1] & 4) {
// Self-test
scsi_status_complete(SS_GOOD);
break;
}
int pos = 0;
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 6;
scsi_cmdbuf[pos++] = 0; // ROM is OK
scsi_cmdbuf[pos++] = 0; // RAM is OK
scsi_cmdbuf[pos++] = 0; // Data buffer is OK
scsi_cmdbuf[pos++] = 0; // Interface is OK
scsi_cmdbuf[pos++] = 0;
scsi_cmdbuf[pos++] = 0;
if(size > pos)
size = pos;
scsi_data_in(0, size);
scsi_status_complete(SS_GOOD);
break;
}
case SC_READ_CAPACITY: {
LOG("command READ CAPACITY\n");