diff options
author | angelosa <salese_corp_ltd@email.it> | 2017-09-18 10:01:44 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2017-09-18 10:02:39 +0200 |
commit | 5de8c6104b83ee38d52f3ac1ff4a197f3a6d31c7 (patch) | |
tree | 14217caa619cbbac19c026c09e2b36026bcbfcac | |
parent | 1680634bcf715647e9c2931941b20d200c6fc17e (diff) |
pce_cd.cpp: Fixed few bogus CD-ROM state bugs, fixes booting for Snatcher [Angelo Salese]
-rw-r--r-- | src/mame/machine/pce_cd.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mame/machine/pce_cd.cpp b/src/mame/machine/pce_cd.cpp index bb82d695cd5..1ac84e7ba2f 100644 --- a/src/mame/machine/pce_cd.cpp +++ b/src/mame/machine/pce_cd.cpp @@ -6,10 +6,10 @@ PC Engine CD HW notes: TODO: - Dragon Ball Z: ADPCM dies after the first upload; -- Dragon Slayer - The Legend of Heroes: black screen; -- Mirai Shonen Conan: dies at new game selection; +- Dragon Slayer - The Legend of Heroes: black screen; (actually timing/raster irq) +- Mirai Shonen Conan: dies at new game selection; (actually timing/raster irq) - Snatcher: black screen after Konami logo, tries set up CD-DA - while transferring data? + while transferring data? (fixed) - Steam Heart's: needs transfer ready irq to get past the gameplay hang, don't know exactly when it should fire - Steam Heart's: bad ADPCM irq, dialogue is cutted due of it; @@ -439,18 +439,21 @@ void pce_cd_device::nec_set_audio_start_position() m_current_frame = frame; - if (m_cdda_status == PCE_CD_CDDA_PAUSED) - { - m_cdda_status = PCE_CD_CDDA_OFF; - m_cdda->stop_audio(); - m_end_frame = m_last_frame; - m_end_mark = 0; - } - else + m_cdda_status = PCE_CD_CDDA_PAUSED; + + // old code for reference, seems unlikely that this puts status in standby (and breaks Snatcher at the title screen) +// if (m_cdda_status == PCE_CD_CDDA_PAUSED) +// { +// m_cdda_status = PCE_CD_CDDA_OFF; +// m_cdda->stop_audio(); +// m_end_frame = m_last_frame; +// m_end_mark = 0; +// } +// else { if (m_command_buffer[1] & 0x03) { - m_cdda_status = PCE_CD_CDDA_PLAYING; + //m_cdda_status = PCE_CD_CDDA_PLAYING; m_end_frame = m_last_frame; //get the end of the CD m_cdda->start_audio(m_current_frame, m_end_frame - m_current_frame); m_cdda_play_mode = (m_command_buffer[1] & 0x02) ? 2 : 3; // mode 2 sets IRQ at end @@ -458,7 +461,7 @@ void pce_cd_device::nec_set_audio_start_position() } else { - m_cdda_status = PCE_CD_CDDA_PLAYING; + //m_cdda_status = PCE_CD_CDDA_PLAYING; m_end_frame = m_toc->tracks[ cdrom_get_track(m_cd_file, m_current_frame) + 1 ].logframeofs; //get the end of THIS track m_cdda->start_audio(m_current_frame, m_end_frame - m_current_frame); m_end_mark = 0; @@ -960,6 +963,8 @@ TIMER_CALLBACK_MEMBER(pce_cd_device::data_timer_callback) /* We are done, disable the timer */ logerror("Last frame read from CD\n"); m_data_transferred = 1; + // data transfer is done, issue a pause + m_cdda_status = PCE_CD_CDDA_PAUSED; m_data_timer->adjust(attotime::never); } else |