Add minimal support for MMC command 0xAC (#80)

This changes a BX_INFO to a BX_DEBUG. It does not needed to be a
BX_INFO.

Second, this adds (very) minimal support for SCSI command 0xAC.
When emulating a .iso image via USB CD-ROM on Win10, without this
command, the emulation freezes when trying to access the CD-ROM. I don't
know if it is Bochs or Win10. I think Win10 expects the command to work,
or Bochs is not failing correctly.

This PR simply adds code to acknowledge the command and returns a zero
length report. This SCSI (MMC) specification states that a zero length
report is allowed.
The 8 byte header is returned, but the header indicates a zero byte
return: No report segments returned.
This seems to keep Win10 from freezing at USB CD-ROM device access time.

The code also BX_DEBUG's the command sent to the "controller", for
future use when adding the actual support of the command.
This commit is contained in:
Benjamin David Lunt 2023-09-25 21:55:29 -07:00 committed by GitHub
parent 74ed550334
commit 7abed66ae5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1289,7 +1289,7 @@ Bit32s scsi_device_t::scsi_send_command(Bit32u tag, Bit8u *buf, Bit8u cmd_len, i
break;
case 0x23:
// USBMASS-UFI10.pdf  rev 1.0  Section 4.10
BX_INFO(("READ FORMAT CAPACITIES"));
BX_DEBUG(("READ FORMAT CAPACITIES"));
// Cap List Header
outbuf[0] = 0;
@ -1308,6 +1308,18 @@ Bit32s scsi_device_t::scsi_send_command(Bit32u tag, Bit8u *buf, Bit8u cmd_len, i
outbuf[10] = (Bit8u) ((block_size >> 8) & 0xFF);
outbuf[11] = (Bit8u) ((block_size >> 0) & 0xFF);
r->buf_len = 12;
break;
case 0xAC:
// mmc6r02f.pdf, page 378 (330)
BX_DEBUG(("Get Performance:"));
BX_DEBUG((" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X",
buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]));
//goto fail;
memset(outbuf, 0, 8);
outbuf[3] = 4;
r->buf_len = 8;
break;
// The 0x9E command uses a service action code (ex: 0x9E/0x10)
case 0x9E: