From 645efe1f7df52b3b4b6c0514a30f249c5516cdbc Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 23 Dec 2016 21:35:39 +0100 Subject: [PATCH] Slightly modified CD-ROM disc change handling and behavior of the REQUEST SENSE command. --- src/cdrom-ioctl.c | 23 +++++++++++++---------- src/cdrom-iso.c | 3 ++- src/ide.c | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cdrom-ioctl.c b/src/cdrom-ioctl.c index 173b02861..29a7ee650 100644 --- a/src/cdrom-ioctl.c +++ b/src/cdrom-ioctl.c @@ -303,17 +303,20 @@ static int ioctl_medium_changed(void) if (cdrom_drive != old_cdrom_drive) old_cdrom_drive = cdrom_drive; cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0); - return 0; + return 1; } - if ((ltoc.TrackData[ltoc.LastTrack].Address[1] != toc.TrackData[toc.LastTrack].Address[1]) || - (ltoc.TrackData[ltoc.LastTrack].Address[2] != toc.TrackData[toc.LastTrack].Address[2]) || - (ltoc.TrackData[ltoc.LastTrack].Address[3] != toc.TrackData[toc.LastTrack].Address[3])) - { - ioctl_cd_state = CD_STOPPED; - toc = ltoc; - cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0); - return 1; /* TOC mismatches. */ - } + else + { + if ((ltoc.TrackData[ltoc.LastTrack].Address[1] != toc.TrackData[toc.LastTrack].Address[1]) || + (ltoc.TrackData[ltoc.LastTrack].Address[2] != toc.TrackData[toc.LastTrack].Address[2]) || + (ltoc.TrackData[ltoc.LastTrack].Address[3] != toc.TrackData[toc.LastTrack].Address[3])) + { + ioctl_cd_state = CD_STOPPED; + toc = ltoc; + cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0); + return 1; /* TOC mismatches. */ + } + } return 0; /* None of the above, return 0. */ } diff --git a/src/cdrom-iso.c b/src/cdrom-iso.c index 958b7ddd0..bb66bae5d 100644 --- a/src/cdrom-iso.c +++ b/src/cdrom-iso.c @@ -95,10 +95,11 @@ static int iso_medium_changed(void) { return 0; } + if (old_cdrom_drive != cdrom_drive) { old_cdrom_drive = cdrom_drive; - return 0; + return 1; } if (iso_changed) diff --git a/src/ide.c b/src/ide.c index 307e869d1..2fdf204f7 100644 --- a/src/ide.c +++ b/src/ide.c @@ -1976,7 +1976,7 @@ static void atapicommand(int ide_board) idebufferb[0]=0x80|0x70; - if ((SCSISense.SenseKey > 0) || (cd_status < CD_STATUS_PLAYING)) + if ((SCSISense.SenseKey > 0) && ((cd_status < CD_STATUS_PLAYING) || (cd_status == CD_STATUS_STOPPED))) { if (completed) {