From 49875ee505d1b889d284d932cd9605b3c3a4c547 Mon Sep 17 00:00:00 2001 From: ripsaw8080 Date: Tue, 22 Oct 2013 17:40:41 +0000 Subject: [PATCH] CD audio status returns zero start and end times when no track is playing. Fixes The Manhole. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3839 --- src/dos/dos_mscdex.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/dos/dos_mscdex.cpp b/src/dos/dos_mscdex.cpp index 688751d8..36ef3066 100644 --- a/src/dos/dos_mscdex.cpp +++ b/src/dos/dos_mscdex.cpp @@ -506,16 +506,21 @@ bool CMscdex::GetAudioStatus(Bit8u subUnit, bool& playing, bool& pause, TMSF& st if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->GetAudioStatus(playing,pause); if (dinfo[subUnit].lastResult) { - // Start - Bit32u addr = dinfo[subUnit].audioStart + 150; - start.fr = (Bit8u)(addr%75); addr/=75; - start.sec = (Bit8u)(addr%60); - start.min = (Bit8u)(addr/60); - // End - addr = dinfo[subUnit].audioEnd + 150; - end.fr = (Bit8u)(addr%75); addr/=75; - end.sec = (Bit8u)(addr%60); - end.min = (Bit8u)(addr/60); + if (playing) { + // Start + Bit32u addr = dinfo[subUnit].audioStart + 150; + start.fr = (Bit8u)(addr%75); addr/=75; + start.sec = (Bit8u)(addr%60); + start.min = (Bit8u)(addr/60); + // End + addr = dinfo[subUnit].audioEnd + 150; + end.fr = (Bit8u)(addr%75); addr/=75; + end.sec = (Bit8u)(addr%60); + end.min = (Bit8u)(addr/60); + } else { + memset(&start,0,sizeof(start)); + memset(&end,0,sizeof(end)); + } } else { playing = false; pause = false;