Slightly modified CD-ROM disc change handling and behavior of the REQUEST SENSE command.

This commit is contained in:
OBattler
2016-12-23 21:35:39 +01:00
parent dda3ff99b9
commit 645efe1f7d
3 changed files with 16 additions and 12 deletions

View File

@@ -303,17 +303,20 @@ static int ioctl_medium_changed(void)
if (cdrom_drive != old_cdrom_drive) if (cdrom_drive != old_cdrom_drive)
old_cdrom_drive = cdrom_drive; old_cdrom_drive = cdrom_drive;
cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0); 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]) || else
(ltoc.TrackData[ltoc.LastTrack].Address[2] != toc.TrackData[toc.LastTrack].Address[2]) || {
(ltoc.TrackData[ltoc.LastTrack].Address[3] != toc.TrackData[toc.LastTrack].Address[3])) 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]) ||
ioctl_cd_state = CD_STOPPED; (ltoc.TrackData[ltoc.LastTrack].Address[3] != toc.TrackData[toc.LastTrack].Address[3]))
toc = ltoc; {
cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0); ioctl_cd_state = CD_STOPPED;
return 1; /* TOC mismatches. */ toc = ltoc;
} cdrom_capacity = ioctl_get_last_block(0, 0, 4096, 0);
return 1; /* TOC mismatches. */
}
}
return 0; /* None of the above, return 0. */ return 0; /* None of the above, return 0. */
} }

View File

@@ -95,10 +95,11 @@ static int iso_medium_changed(void)
{ {
return 0; return 0;
} }
if (old_cdrom_drive != cdrom_drive) if (old_cdrom_drive != cdrom_drive)
{ {
old_cdrom_drive = cdrom_drive; old_cdrom_drive = cdrom_drive;
return 0; return 1;
} }
if (iso_changed) if (iso_changed)

View File

@@ -1976,7 +1976,7 @@ static void atapicommand(int ide_board)
idebufferb[0]=0x80|0x70; 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) if (completed)
{ {