set "CD Not Ready" condition in ATAPI commands as specified in MMC-3

A few ATAPI commands did not return an error (CD Not Ready condition) with ejected medium as specified in MMC-3 (https://www.t10.org/ftp/t10/document.97/97-108r0.pdf).

Adding these to our subset of ATAPI commands improved the FreeDOS 1.4 situation around eject/insert a bit (the problem really is eject, insert always works given the medium is ejected). Waiting around 20-30 sec after eject seems to work reliably.
This commit is contained in:
Christian Schnell 2025-05-29 14:15:52 +02:00 committed by Fabian
parent ef0b306732
commit 50945b3d16

View file

@ -184,6 +184,7 @@ const ATAPI_CF_NONE = 0x00; // no flags
const ATAPI_CF_NEEDS_DISK = 0x01; // command needs inserted disk
const ATAPI_CF_UNIT_ATTN = 0x02; // bounce command if unit attention condition is active
// ATAPI commands, for flags see [MMC-3] 4.2.6
const ATAPI_CMD =
{
[ATAPI_CMD_GET_CONFIGURATION]: {name: "GET CONFIGURATION", flags: ATAPI_CF_NONE},
@ -192,17 +193,17 @@ const ATAPI_CMD =
[ATAPI_CMD_MECHANISM_STATUS]: {name: "MECHANISM STATUS", flags: ATAPI_CF_NONE},
[ATAPI_CMD_MODE_SENSE_6]: {name: "MODE SENSE (6)", flags: ATAPI_CF_NONE},
[ATAPI_CMD_MODE_SENSE_10]: {name: "MODE SENSE (10)", flags: ATAPI_CF_NONE},
[ATAPI_CMD_PAUSE]: {name: "PAUSE", flags: ATAPI_CF_NONE},
[ATAPI_CMD_PAUSE]: {name: "PAUSE", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL]: {name: "PREVENT ALLOW MEDIUM REMOVAL", flags: ATAPI_CF_NONE},
[ATAPI_CMD_READ]: {name: "READ", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_CAPACITY]: {name: "READ CAPACITY", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_CD]: {name: "READ CD", flags: ATAPI_CF_NONE},
[ATAPI_CMD_READ_CD]: {name: "READ CD", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_DISK_INFORMATION]: {name: "READ DISK INFORMATION", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_SUBCHANNEL]: {name: "READ SUBCHANNEL", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_TOC_PMA_ATIP]: {name: "READ TOC PMA ATIP", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_READ_TRACK_INFORMATION]: {name: "READ TRACK INFORMATION", flags: ATAPI_CF_NONE},
[ATAPI_CMD_READ_TRACK_INFORMATION]: {name: "READ TRACK INFORMATION", flags: ATAPI_CF_NEEDS_DISK},
[ATAPI_CMD_REQUEST_SENSE]: {name: "REQUEST SENSE", flags: ATAPI_CF_NONE},
[ATAPI_CMD_TEST_UNIT_READY]: {name: "TEST UNIT READY", flags: ATAPI_CF_NONE},
[ATAPI_CMD_TEST_UNIT_READY]: {name: "TEST UNIT READY", flags: ATAPI_CF_NEEDS_DISK},
};
// ATAPI device signature