The later SCSI and ATAPI CD-ROM drives correctly identify as having tray loaders and not caddy loaders.

This commit is contained in:
OBattler
2022-11-06 20:04:10 +01:00
parent 5a4fcbde6b
commit f88fbd6fd2

View File

@@ -518,18 +518,29 @@ scsi_cdrom_mode_sense(scsi_cdrom_t *dev, uint8_t *buf, uint32_t pos, uint8_t pag
buf[pos++] = msplen;
scsi_cdrom_log("CD-ROM %i: MODE SENSE: Page [%02X] length %i\n", dev->id, i, msplen);
for (j = 0; j < msplen; j++) {
if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 6) && (j <= 7)) {
if (j & 1)
buf[pos++] = ((dev->drv->speed * 176) & 0xff);
else
buf[pos++] = ((dev->drv->speed * 176) >> 8);
} else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 12) && (j <= 13)) {
if (j & 1)
buf[pos++] = ((dev->drv->cur_speed * 176) & 0xff);
else
buf[pos++] = ((dev->drv->cur_speed * 176) >> 8);
} else
/* If we are returning changeable values, always return them from the page,
so they are all correctly. */
if (page_control == 1)
buf[pos++] = scsi_cdrom_mode_sense_read(dev, page_control, i, 2 + j);
else {
if ((i == GPMODE_CAPABILITIES_PAGE) && (j == 4)) {
buf[pos] = scsi_cdrom_mode_sense_read(dev, page_control, i, 2 + j) & 0x1f;
/* The early CD-ROM drives we emulate (NEC CDR-260 for ATAPI and Toshiba CDS-431) are
caddy drives, the later ones are tray drives. */
buf[pos++] |= (dev->early ? 0x00 : 0x20);
} else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 6) && (j <= 7)) {
if (j & 1)
buf[pos++] = ((dev->drv->speed * 176) & 0xff);
else
buf[pos++] = ((dev->drv->speed * 176) >> 8);
} else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 12) && (j <= 13)) {
if (j & 1)
buf[pos++] = ((dev->drv->cur_speed * 176) & 0xff);
else
buf[pos++] = ((dev->drv->cur_speed * 176) >> 8);
} else
buf[pos++] = scsi_cdrom_mode_sense_read(dev, page_control, i, 2 + j);
}
}
}
}