From 9d17fc15a38b7d07d9a0fb12f08649c5720e137f Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Thu, 14 Jul 2022 16:49:56 +0200 Subject: [PATCH] gdrom, hle: don't restart cdda if paused or playing Fix regression due to ab791d1b9c9ae48801a0961d48ee27804fcb0e13 (unpausing restarts the current track) Issue #690 --- core/hw/gdrom/gdromv3.cpp | 4 +++- core/reios/gdrom_hle.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/hw/gdrom/gdromv3.cpp b/core/hw/gdrom/gdromv3.cpp index acc3e8bf9..60934d572 100644 --- a/core/hw/gdrom/gdromv3.cpp +++ b/core/hw/gdrom/gdromv3.cpp @@ -853,7 +853,9 @@ void gd_process_spi_cmd() cdda.EndAddr.FAD = ses_inf[3] << 16 | ses_inf[4] << 8 | ses_inf[5]; } cdda.repeats = packet_cmd.data_8[6] & 0xF; - if (cdda.status != cdda_t::Playing || cdda.CurrAddr.FAD < cdda.StartAddr.FAD || cdda.CurrAddr.FAD > cdda.EndAddr.FAD) + if ((cdda.status != cdda_t::Playing && cdda.status != cdda_t::Paused) + || cdda.CurrAddr.FAD < cdda.StartAddr.FAD + || cdda.CurrAddr.FAD > cdda.EndAddr.FAD) cdda.CurrAddr.FAD = cdda.StartAddr.FAD; cdda.status = cdda_t::Playing; SecNumber.Status = GD_PLAY; diff --git a/core/reios/gdrom_hle.cpp b/core/reios/gdrom_hle.cpp index e22e305bf..47bd18e40 100644 --- a/core/reios/gdrom_hle.cpp +++ b/core/reios/gdrom_hle.cpp @@ -358,7 +358,9 @@ static void GD_HLE_Command(gd_command cc) DEBUG_LOG(REIOS, "GDROM: CMD PLAY first_track %x last_track %x repeats %x start_fad %x end_fad %x", first_track, last_track, cdda.repeats, cdda.StartAddr.FAD, cdda.EndAddr.FAD); cdda.status = cdda_t::Playing; - if (SecNumber.Status != GD_PAUSE || cdda.CurrAddr.FAD < cdda.StartAddr.FAD || cdda.CurrAddr.FAD > cdda.EndAddr.FAD) + if ((SecNumber.Status != GD_PLAY && SecNumber.Status != GD_PAUSE) + || cdda.CurrAddr.FAD < cdda.StartAddr.FAD + || cdda.CurrAddr.FAD > cdda.EndAddr.FAD) cdda.CurrAddr.FAD = cdda.StartAddr.FAD; SecNumber.Status = GD_PLAY; }