]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
CD32/CDTV state restore with active CD audio play: ignore normal playback startup...
authorToni Wilen <twilen@winuae.net>
Sat, 24 Aug 2019 19:27:15 +0000 (22:27 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 24 Aug 2019 19:27:15 +0000 (22:27 +0300)
akiko.cpp
cdtv.cpp
include/savestate.h
savestate.cpp

index 09a179b1f424f73d72675e97d7bf425932e90805..0a1510674151bbc0dbd672a0f1f2c6ec18329e59 100644 (file)
--- 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;
index b2028c91ae83391f6110e066010ab084bcaa3eaf..ad863f88033fb83229151f7c09110cb0198149f6 100644 (file)
--- 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);
        }
 }
index 5f902752ed402b7e702b32152d5b0d44612e3b76..8a43bd483e40a12608ef2b2d7857b1139a1f0565 100644 (file)
@@ -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);
 
 
index 35ca3ce012fe4b2aff11bfd91b8ca2de9b4cb538..34c2d082bd5ec13d1d6e7d82201c7a73d526e552 100644 (file)
@@ -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 */