From: Toni Wilen Date: Sat, 24 Aug 2019 19:27:15 +0000 (+0300) Subject: CD32/CDTV state restore with active CD audio play: ignore normal playback startup... X-Git-Tag: 4300~136 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=39f941629f141e763d8f51f2638ccf9c9fed368c;p=francis%2Fwinuae.git CD32/CDTV state restore with active CD audio play: ignore normal playback startup delay, start playback immediately. --- diff --git a/akiko.cpp b/akiko.cpp index 09a179b1..0a151067 100644 --- a/akiko.cpp +++ b/akiko.cpp @@ -590,7 +590,7 @@ static int statusfunc_imm(int status, int playpos) if (status == -3 || status > AUDIO_STATUS_IN_PROGRESS) uae_sem_post(&cda_sem); if (status < 0) - return 1; + return 0; return statusfunc(status, playpos); } @@ -2249,14 +2249,20 @@ void restore_akiko_finish (void) akiko_init (); akiko_c2p_do (); get_cdrom_toc (); - write_comm_pipe_u32 (&requests, 0x0102, 1); // pause - write_comm_pipe_u32 (&requests, 0x0104, 1); // stop - write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause - if (cdrom_playing && isaudiotrack (last_play_pos)) { - write_comm_pipe_u32 (&requests, 0x0111, 0); // play immediate - write_comm_pipe_u32 (&requests, last_play_pos, 0); - write_comm_pipe_u32 (&requests, last_play_end, 0); - write_comm_pipe_u32 (&requests, 0, 1); +} + +void restore_akiko_final(void) +{ + if (!currprefs.cs_cd32cd) + return; + write_comm_pipe_u32(&requests, 0x0102, 1); // pause + write_comm_pipe_u32(&requests, 0x0104, 1); // stop + write_comm_pipe_u32(&requests, 0x0103, 1); // unpause + if (cdrom_playing && isaudiotrack(last_play_pos)) { + write_comm_pipe_u32(&requests, 0x0111, 0); // play immediate + write_comm_pipe_u32(&requests, last_play_pos, 0); + write_comm_pipe_u32(&requests, last_play_end, 0); + write_comm_pipe_u32(&requests, 0, 1); uae_sem_wait(&cda_sem); } cd_initialized = 2; diff --git a/cdtv.cpp b/cdtv.cpp index b2028c91..ad863f88 100644 --- a/cdtv.cpp +++ b/cdtv.cpp @@ -289,7 +289,7 @@ static int statusfunc_imm(int status, int playpos) if (status == -3 || status > AUDIO_STATUS_IN_PROGRESS) uae_sem_post(&cda_sem); if (status < 0) - return 1; + return 0; if (status == AUDIO_STATUS_IN_PROGRESS) cd_audio_status = status; return statusfunc(status, playpos); @@ -1920,12 +1920,18 @@ void restore_cdtv_finish (void) configured = 0xe90000; map_banks_z2(&dmac_bank, configured >> 16, 0x10000 >> 16); write_comm_pipe_u32 (&requests, 0x0104, 1); +} + +void restore_cdtv_final(void) +{ + if (!currprefs.cs_cdtvcd || currprefs.cs_cdtvcr) + return; if (cd_playing) { cd_volume = cd_volume_stored; - write_comm_pipe_u32 (&requests, 0x0111, 0); // play - write_comm_pipe_u32 (&requests, last_play_pos, 0); - write_comm_pipe_u32 (&requests, last_play_end, 0); - write_comm_pipe_u32 (&requests, 0, 1); + write_comm_pipe_u32(&requests, 0x0111, 0); // play + write_comm_pipe_u32(&requests, last_play_pos, 0); + write_comm_pipe_u32(&requests, last_play_end, 0); + write_comm_pipe_u32(&requests, 0, 1); uae_sem_wait(&cda_sem); } } diff --git a/include/savestate.h b/include/savestate.h index 5f902752..8a43bd48 100644 --- a/include/savestate.h +++ b/include/savestate.h @@ -135,11 +135,13 @@ extern uae_u8 *save_keyboard (int *,uae_u8*); extern uae_u8 *restore_akiko (uae_u8 *src); extern uae_u8 *save_akiko (int *len, uae_u8*); -extern void restore_akiko_finish (void); +extern void restore_akiko_finish(void); +extern void restore_akiko_final(void); extern uae_u8 *restore_cdtv (uae_u8 *src); extern uae_u8 *save_cdtv (int *len, uae_u8*); -extern void restore_cdtv_finish (void); +extern void restore_cdtv_finish(void); +extern void restore_cdtv_final(void); extern uae_u8 *restore_cdtv_dmac (uae_u8 *src); extern uae_u8 *save_cdtv_dmac (int *len, uae_u8*); @@ -234,7 +236,8 @@ extern void restore_ar_finish (void); extern void savestate_initsave (const TCHAR *filename, int docompress, int nodialogs, bool save); extern int save_state (const TCHAR *filename, const TCHAR *description); extern void restore_state (const TCHAR *filename); -extern void savestate_restore_finish (void); +extern bool savestate_restore_finish(void); +extern void savestate_restore_final(void); extern void savestate_memorysave (void); diff --git a/savestate.cpp b/savestate.cpp index 35ca3ce0..34c2d082 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -824,10 +824,16 @@ error: zfile_fclose (f); } -void savestate_restore_finish (void) +void savestate_restore_final(void) +{ + restore_akiko_final(); + restore_cdtv_final(); +} + +bool savestate_restore_finish(void) { if (!isrestore ()) - return; + return false; zfile_fclose (savestate_file); savestate_file = 0; restore_cpu_finish (); @@ -853,6 +859,7 @@ void savestate_restore_finish (void) savestate_state = 0; init_hz_normal(); audio_activate(); + return true; } /* 1=compressed,2=not compressed,3=ram dump,4=audio dump */