The AHA/BusLogic reset controllers' BIOS commands now return 0x80 (no device present error) for CD-ROM drives if the device is market as not supporting CD-ROM boot, fixes sending of WRITE (10) to CD-ROM drives followed by hang;

The CD-ROM and SCSI disk REQUEST SENSE commands no longer incorrectly set the phase to status;
REQUEST SENSE with non-data direction control byte is now treated as a request to send sense bytes from the command directly to the sense buffer;
SCSI and SLiRP threads now terminate themselves again when out of the while loop;
SCSI and SLiRP mutexes are now closed when the threads terminate themselves;
Fixed a bug causing the "Press F12+F8 or middle mouse button to release" string on the title bar to get corrupt.
This commit is contained in:
OBattler
2017-10-14 18:52:25 +02:00
parent 6eb9404d04
commit 7581474aab
8 changed files with 90 additions and 32 deletions

View File

@@ -2197,14 +2197,12 @@ void cdrom_request_sense(uint8_t id, uint8_t *buffer, uint8_t alloc_length)
if ((cdrom_sense_key > 0) && ((cdrom[id].cd_status < CD_STATUS_PLAYING) || (cdrom[id].cd_status == CD_STATUS_STOPPED)) && cdrom_playing_completed(id))
{
SCSIPhase = SCSI_PHASE_STATUS;
buffer[2]=SENSE_ILLEGAL_REQUEST;
buffer[12]=ASC_AUDIO_PLAY_OPERATION;
buffer[13]=ASCQ_AUDIO_PLAY_OPERATION_COMPLETED;
}
else if ((cdrom_sense_key == 0) && (cdrom[id].cd_status >= CD_STATUS_PLAYING) && (cdrom[id].cd_status != CD_STATUS_STOPPED))
{
SCSIPhase = SCSI_PHASE_STATUS;
buffer[2]=SENSE_ILLEGAL_REQUEST;
buffer[12]=ASC_AUDIO_PLAY_OPERATION;
buffer[13]=(cdrom[id].cd_status == CD_STATUS_PLAYING) ? ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS : ASCQ_AUDIO_PLAY_OPERATION_PAUSED;
@@ -2213,7 +2211,6 @@ void cdrom_request_sense(uint8_t id, uint8_t *buffer, uint8_t alloc_length)
{
if (cdrom[id].unit_attention && (cdrom_sense_key == 0))
{
SCSIPhase = SCSI_PHASE_STATUS;
buffer[2]=SENSE_UNIT_ATTENTION;
buffer[12]=ASC_MEDIUM_MAY_HAVE_CHANGED;
buffer[13]=0;