From c9efea3d665986b7661bc5de7704396dc640314c Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 22 May 2010 19:32:48 +0300 Subject: [PATCH] 2200b4 --- cfgfile.cpp | 4 +-- cia.cpp | 7 +++- drawing.cpp | 4 +-- include/keyboard.h | 4 ++- include/options.h | 4 +++ include/savestate.h | 4 +++ include/xwin.h | 2 +- inputdevice.cpp | 13 ++++++-- inputevents.def | 6 ++-- newcpu.cpp | 48 +++++++++++++++++++++++++++ od-win32/dinput.cpp | 12 +------ od-win32/keyboard_win32.cpp | 2 +- od-win32/lib/prowizard.lib | Bin 1138468 -> 1138468 bytes od-win32/sounddep/sound.cpp | 2 +- od-win32/win32.cpp | 6 ++-- od-win32/win32.h | 4 +-- od-win32/win32gfx.cpp | 62 ++++++++++++++++++++++++----------- od-win32/winuaechangelog.txt | 23 +++++++++++++ savestate.cpp | 26 ++++++++++++++- 19 files changed, 183 insertions(+), 50 deletions(-) diff --git a/cfgfile.cpp b/cfgfile.cpp index 5d978d50..b287cd9a 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -3380,8 +3380,8 @@ void default_prefs (struct uae_prefs *p, int type) } p->gfx_resolution = 1; p->gfx_linedbl = 1; - p->gfx_afullscreen = 0; - p->gfx_pfullscreen = 0; + p->gfx_afullscreen = GFX_WINDOW; + p->gfx_pfullscreen = GFX_WINDOW; p->gfx_xcenter = 0; p->gfx_ycenter = 0; p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1; p->gfx_xcenter_size = -1; p->gfx_ycenter_size = -1; diff --git a/cia.cpp b/cia.cpp index 6ba0395c..7dd48105 100644 --- a/cia.cpp +++ b/cia.cpp @@ -601,7 +601,8 @@ static void bfe001_change (void) //activate_debugger (); map_overlay (0); } - } else if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) { + } + if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) { oldcd32mute = v & 1; akiko_mute (oldcd32mute ? 0 : 1); } @@ -1198,6 +1199,10 @@ void CIA_reset (void) #endif if (savestate_state) { bfe001_change (); + if (!currprefs.cs_ciaoverlay) { + map_overlay (1); + oldovl = false; + } /* select drives */ DISK_select (ciabprb); } diff --git a/drawing.cpp b/drawing.cpp index 46947f54..e1f80d9f 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -1773,7 +1773,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop) unlockscr (); if (start <= stop) flush_screen (start, stop); - else if (currprefs.gfx_afullscreen && currprefs.gfx_avsync) + else if (currprefs.gfx_afullscreen == 1 && currprefs.gfx_avsync) flush_screen (0, 0); /* vsync mode */ } @@ -2907,7 +2907,7 @@ void vsync_handle_redraw (int long_frame, int lof_changed) else if (currprefs.cpu_cycle_exact) init_hardware_for_drawing_frame (); } else { - if (currprefs.gfx_afullscreen && currprefs.gfx_avsync) + if (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_avsync) flush_screen (0, 0); /* vsync mode */ } gui_flicker_led (-1, 0, 0); diff --git a/include/keyboard.h b/include/keyboard.h index f5ca1a9d..d61c333b 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -132,7 +132,9 @@ enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_FREEZEBUTTON, AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3, AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3, - AKS_TOGGLEFULLSCREEN, AKS_ENTERDEBUGGER, AKS_IRQ7, + AKS_TOGGLEDEFAULTSCREEN, + AKS_TOGGLEWINDOWEDFULLSCREEN, AKS_TOGGLEFULLWINDOWFULLSCREEN, AKS_TOGGLEWINDOWFULLWINDOW, + AKS_ENTERDEBUGGER, AKS_IRQ7, AKS_PAUSE, AKS_WARP, AKS_INHIBITSCREEN, AKS_STATEREWIND, AKS_VOLDOWN, AKS_VOLUP, AKS_VOLMUTE, AKS_MVOLDOWN, AKS_MVOLUP, AKS_MVOLMUTE, diff --git a/include/options.h b/include/options.h index bb162fa4..e170f735 100644 --- a/include/options.h +++ b/include/options.h @@ -96,6 +96,10 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CD32, CP_A500, CP_A500P, CP_A600, CP_A1000, #define IDE_A600A1200 1 #define IDE_A4000 2 +#define GFX_WINDOW 0 +#define GFX_FULLSCREEN 1 +#define GFX_FULLWINDOW 2 + struct uae_prefs { struct strlist *all_lines; diff --git a/include/savestate.h b/include/savestate.h index 82eb8774..ac9d3dfe 100644 --- a/include/savestate.h +++ b/include/savestate.h @@ -41,6 +41,8 @@ extern TCHAR *restore_string_func (uae_u8 **); extern uae_u8 *restore_cpu (uae_u8 *); extern void restore_cpu_finish (void); extern uae_u8 *save_cpu (int *, uae_u8 *); +extern uae_u8 *restore_cpu_extra (uae_u8 *); +extern uae_u8 *save_cpu_extra (int *, uae_u8 *); extern uae_u8 *restore_mmu (uae_u8 *); extern uae_u8 *save_mmu (int *, uae_u8 *); @@ -58,6 +60,8 @@ extern void restore_disk_finish (void); extern uae_u8 *restore_custom (uae_u8 *); extern uae_u8 *save_custom (int *, uae_u8 *, int); +extern uae_u8 *restore_custom_extra (uae_u8 *); +extern uae_u8 *save_custom_extra (int *, uae_u8 *); extern uae_u8 *restore_custom_sprite (int num, uae_u8 *src); extern uae_u8 *save_custom_sprite (int num, int *len, uae_u8 *); diff --git a/include/xwin.h b/include/xwin.h index bdc08f08..da09c97c 100644 --- a/include/xwin.h +++ b/include/xwin.h @@ -22,7 +22,7 @@ extern void handle_events (void); extern int handle_msgpump (void); extern void setup_brkhandler (void); extern int isfullscreen (void); -extern void toggle_fullscreen (void); +extern void toggle_fullscreen (int); extern void toggle_mousegrab (void); extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h); extern bool vsync_switchmode (int, int); diff --git a/inputdevice.cpp b/inputdevice.cpp index c1b525b2..951790c1 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -2492,8 +2492,17 @@ void inputdevice_handle_inputcode (void) case AKS_STATERESTOREQUICK9: savestate_quick ((code - AKS_STATERESTOREQUICK) / 2, 0); break; - case AKS_TOGGLEFULLSCREEN: - toggle_fullscreen (); + case AKS_TOGGLEDEFAULTSCREEN: + toggle_fullscreen (-1); + break; + case AKS_TOGGLEWINDOWEDFULLSCREEN: + toggle_fullscreen (0); + break; + case AKS_TOGGLEFULLWINDOWFULLSCREEN: + toggle_fullscreen (1); + break; + case AKS_TOGGLEWINDOWFULLWINDOW: + toggle_fullscreen (2); break; case AKS_TOGGLEMOUSEGRAB: toggle_mousegrab (); diff --git a/inputevents.def b/inputevents.def index fae09f51..be7f1577 100644 --- a/inputevents.def +++ b/inputevents.def @@ -329,7 +329,9 @@ DEFEVENT(SPC_STATESAVE,L"Quick save state",AM_K,0,0,AKS_STATESAVEQUICK) DEFEVENT(SPC_STATERESTORE,L"Quick restore state",AM_K,0,0,AKS_STATERESTOREQUICK) DEFEVENT(SPC_STATESAVEDIALOG,L"Save state",AM_K,0,0,AKS_STATESAVEDIALOG) DEFEVENT(SPC_STATERESTOREDIALOG,L"Restore state",AM_K,0,0,AKS_STATERESTOREDIALOG) -DEFEVENT(SPC_TOGGLEFULLSCREEN,L"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEFULLSCREEN) +DEFEVENT(SPC_TOGGLEFULLSCREEN,L"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEWINDOWEDFULLSCREEN) +DEFEVENT(SPC_TOGGLEFULLWINDOWFULLSCREEN,L"Toggle full-window/fullscreen",AM_K,0,0,AKS_TOGGLEFULLWINDOWFULLSCREEN) +DEFEVENT(SPC_TOGGLEWINDOWFULLWINDOW,L"Toggle window/full-window",AM_K,0,0,AKS_TOGGLEWINDOWFULLWINDOW) DEFEVENT(SPC_TOGGLEMOUSEGRAB,L"Toggle between mouse grabbed and un-grabbed",AM_K,0,0,AKS_TOGGLEMOUSEGRAB) DEFEVENT(SPC_DECREASE_REFRESHRATE,L"Decrease emulation speed",AM_K,0,0,AKS_DECREASEREFRESHRATE) DEFEVENT(SPC_INCREASE_REFRESHRATE,L"Increase emulation speed",AM_K,0,0,AKS_INCREASEREFRESHRATE) @@ -356,7 +358,7 @@ DEFEVENT(SPC_INPUT_CONFIG2,L"Select Input Configuration #2",AM_K,0,0,AKS_INPUT_C DEFEVENT(SPC_INPUT_CONFIG3,L"Select Input Configuration #3",AM_K,0,0,AKS_INPUT_CONFIG_3) DEFEVENT(SPC_INPUT_CONFIG4,L"Select GamePorts Input Configuration",AM_K,0,0,AKS_INPUT_CONFIG_4) -DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,L"Arcadia diagnostics dip switch",AM_K,0,0,AKS_ARCADIADIAGNOSTICS) +DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,L"Arcadia diagnostics DIP switch",AM_K,0,0,AKS_ARCADIADIAGNOSTICS) DEFEVENT(SPC_ARCADIA_PLAYER1,L"Arcadia player 1",AM_K,0,0,AKS_ARCADIAPLY1) DEFEVENT(SPC_ARCADIA_PLAYER2,L"Arcadia player 2",AM_K,0,0,AKS_ARCADIAPLY2) DEFEVENT(SPC_ARCADIA_COIN1,L"Arcadia coin player 1",AM_K,0,0,AKS_ARCADIACOIN1) diff --git a/newcpu.cpp b/newcpu.cpp index a5b84414..b4ffd4f5 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -3784,6 +3784,8 @@ void m68k_dumpstate (void *f, uaecptr *nextpc) #define CPUTYPE_EC 1 #define CPUMODE_HALT 1 + + uae_u8 *restore_cpu (uae_u8 *src) { int i, flags, model; @@ -3873,6 +3875,52 @@ void restore_cpu_finish (void) } +uae_u8 *restore_cpu_extra (uae_u8 *src) +{ + restore_u32 (); + uae_u32 flags = restore_u32 (); + + currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact = (flags & 1) ? true : false; + currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact = currprefs.cpu_cycle_exact; + currprefs.cpu_compatible = changed_prefs.cpu_compatible = (flags & 2) ? true : false; + currprefs.cpu_frequency = changed_prefs.cpu_frequency = restore_u32 (); + currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier = restore_u32 (); + currprefs.cachesize = changed_prefs.cachesize = (flags & 8) ? 8192 : 0; + + currprefs.m68k_speed = changed_prefs.m68k_speed = 0; + if (flags & 4) + currprefs.m68k_speed = changed_prefs.m68k_speed = -1; + + currprefs.cpu060_revision = changed_prefs.cpu060_revision = restore_u8 (); + currprefs.fpu_revision = changed_prefs.fpu_revision = restore_u8 (); + + return src; +} + +uae_u8 *save_cpu_extra (int *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; + uae_u32 flags; + + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc (uae_u8, 1000); + save_u32 (0); // version + flags = 0; + flags |= currprefs.cpu_cycle_exact ? 1 : 0; + flags |= currprefs.cpu_compatible ? 2 : 0; + flags |= currprefs.m68k_speed < 0 ? 4 : 0; + flags |= currprefs.cachesize > 0 ? 8 : 0; + save_u32 (flags); + save_u32 (currprefs.cpu_frequency); + save_u32 (currprefs.cpu_clock_multiplier); + save_u8 (currprefs.cpu060_revision); + save_u8 (currprefs.fpu_revision); + *len = dst - dstbak; + return dstbak; +} + uae_u8 *save_cpu (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; diff --git a/od-win32/dinput.cpp b/od-win32/dinput.cpp index 5ae9b57b..03792a58 100644 --- a/od-win32/dinput.cpp +++ b/od-win32/dinput.cpp @@ -107,8 +107,7 @@ static int normalmouse, supermouse, rawmouse, winmouse, winmousenumber, winmouse static int normalkb, superkb, rawkb; static bool rawinput_enabled; -int rawkeyboard = -1; -int no_rawinput; +int no_rawinput = 0; int dinput_enum_all; int dinput_winmouse (void) @@ -781,9 +780,6 @@ static int initialize_rawinput (void) HANDLE h = ridl[i].hDevice; int type = ridl[i].dwType; - if (type == RIM_TYPEKEYBOARD && !rawkeyboard) - continue; - if (type == RIM_TYPEKEYBOARD || type == RIM_TYPEMOUSE) { struct didata *did = type == RIM_TYPEMOUSE ? di_mouse : di_keyboard; PRID_DEVICE_INFO rdi; @@ -1344,12 +1340,6 @@ static BOOL CALLBACK EnumObjectsCallback (const DIDEVICEOBJECTINSTANCE* pdidoi, } else if (did->type == DID_KEYBOARD) { //did->buttonmappings[did->buttons] = pdidoi->dwOfs; did->buttonmappings[did->buttons] = DIDFT_GETINSTANCE (pdidoi->dwType); - if (rawkeyboard && (!_tcsicmp (bname, L"kana") || 0)) { // buggy layout? - if (rawkeyboard != 2) { - write_log (L"Possible buggy directinput keyboard layout detected, switching to raw keyboard mode\n"); - rawkeyboard = 2; - } - } } did->buttons++; } diff --git a/od-win32/keyboard_win32.cpp b/od-win32/keyboard_win32.cpp index 0fdee133..d2e2b7c5 100644 --- a/od-win32/keyboard_win32.cpp +++ b/od-win32/keyboard_win32.cpp @@ -285,7 +285,7 @@ void my_kbd_handler (int keyboard, int scancode, int newstate) if (scancode == DIK_F12 || scancode == currprefs.win32_guikey) { if (ctrlpressed ()) { - code = AKS_TOGGLEFULLSCREEN; + code = AKS_TOGGLEDEFAULTSCREEN; } else if (shiftpressed () || specialpressed ()) { if (isfullscreen() <= 0) { disablecapture (); diff --git a/od-win32/lib/prowizard.lib b/od-win32/lib/prowizard.lib index 2cb23ec4b151448ed374b79779428f05d2c41cc4..9ad0d0d779b30077fd9e02230eda5d914cfd6205 100644 GIT binary patch delta 7248 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 == 1 ? 1 : (p->gfx_pfullscreen == 2 ? -1 : 0); + return p->gfx_pfullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_pfullscreen == GFX_FULLWINDOW ? -1 : 0); else - return p->gfx_afullscreen == 1 ? 1 : (p->gfx_afullscreen == 2 ? -1 : 0); + return p->gfx_afullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_afullscreen == GFX_FULLWINDOW ? -1 : 0); } int isfullscreen (void) { @@ -1321,7 +1321,7 @@ int check_prefs_changed_gfx (void) currprefs.color_mode = changed_prefs.color_mode; currprefs.gfx_api = changed_prefs.gfx_api; - if (changed_prefs.gfx_afullscreen == 1) { + if (changed_prefs.gfx_afullscreen == GFX_FULLSCREEN) { if (currprefs.gfx_api != changed_prefs.gfx_api) display_change_requested = 1; } @@ -1649,9 +1649,9 @@ static void open_screen (void) static int ifs (struct uae_prefs *p) { if (screen_is_picasso) - return p->gfx_pfullscreen == 1 ? 1 : (p->gfx_pfullscreen == 2 ? -1 : 0); + return p->gfx_pfullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_pfullscreen == GFX_FULLWINDOW ? -1 : 0); else - return p->gfx_afullscreen == 1 ? 1 : (p->gfx_afullscreen == 2 ? -1 : 0); + return p->gfx_afullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_afullscreen == GFX_FULLWINDOW ? -1 : 0); } static int reopen (int full) @@ -1667,7 +1667,7 @@ static int reopen (int full) /* fullscreen to fullscreen? */ if (isfullscreen () > 0 && currprefs.gfx_afullscreen == changed_prefs.gfx_afullscreen && - currprefs.gfx_pfullscreen == changed_prefs.gfx_pfullscreen && currprefs.gfx_afullscreen == 1) { + currprefs.gfx_pfullscreen == changed_prefs.gfx_pfullscreen && currprefs.gfx_afullscreen == GFX_FULLSCREEN) { quick = 1; } /* windowed to windowed */ @@ -1827,7 +1827,7 @@ void gfx_set_picasso_state (int on) updatemodes (); update_gfxparams (); clearscreen (); - if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen || (currprefs.gfx_afullscreen == 1 && currprefs.gfx_api)) { + if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen || (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_api)) { mode = 1; } else { mode = modeswitchneeded (&wc); @@ -2370,9 +2370,9 @@ static BOOL doInit (void) int mult = 0; if (wasfullwindow_a == 0) - wasfullwindow_a = currprefs.gfx_afullscreen == 2 ? 1 : -1; + wasfullwindow_a = currprefs.gfx_afullscreen == GFX_FULLWINDOW ? 1 : -1; if (wasfullwindow_p == 0) - wasfullwindow_p = currprefs.gfx_pfullscreen == 2 ? 1 : -1; + wasfullwindow_p = currprefs.gfx_pfullscreen == GFX_FULLWINDOW ? 1 : -1; colortype = DirectDraw_GetPixelFormat (); gfxmode_reset (); @@ -2417,9 +2417,9 @@ static BOOL doInit (void) gui_message (tmpstr); DirectDraw_Start (displayGUID); if (screen_is_picasso) - changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = 1; + changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = GFX_FULLSCREEN; else - changed_prefs.gfx_afullscreen = currprefs.gfx_afullscreen = 1; + changed_prefs.gfx_afullscreen = currprefs.gfx_afullscreen = GFX_FULLSCREEN; updatewinfsmode (&currprefs); updatewinfsmode (&changed_prefs); currentmode->current_depth = tmp_depth; @@ -2602,20 +2602,42 @@ void updatewinfsmode (struct uae_prefs *p) config_changed = 1; } -void toggle_fullscreen (void) +void toggle_fullscreen (int mode) { int *p = picasso_on ? &changed_prefs.gfx_pfullscreen : &changed_prefs.gfx_afullscreen; int wfw = picasso_on ? wasfullwindow_p : wasfullwindow_a; int v = *p; - if (v == 2) - v = 1; - else if (v == 0) - v = 1; - else if (v == 1) - if (wfw > 0) - v = 2; + + if (mode < 0) { + // fullscreen <> window (if in fullwindow: fullwindow <> fullscreen) + if (v == GFX_FULLWINDOW) + v = GFX_FULLSCREEN; + else if (v == GFX_WINDOW) + v = GFX_FULLSCREEN; + else if (v == GFX_FULLSCREEN) + if (wfw > 0) + v = GFX_FULLWINDOW; + else + v = GFX_WINDOW; + } else if (mode == 0) { + // fullscreen <> window + if (v == GFX_FULLSCREEN) + v = GFX_WINDOW; else - v = 0; + v = GFX_FULLSCREEN; + } else if (mode == 1) { + // fullscreen <> fullwindow + if (v == GFX_FULLSCREEN) + v = GFX_FULLWINDOW; + else + v = GFX_FULLSCREEN; + } else if (mode == 2) { + // window <> fullwindow + if (v == GFX_FULLWINDOW) + v = GFX_WINDOW; + else + v = GFX_FULLWINDOW; + } *p = v; updatewinfsmode (&changed_prefs); } diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 281251b6..4d5a6169 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,27 @@ +Beta 4: + +- keyboard input configuration didn't load correctly (was overwritten by default mappings + or mappings were completely erased) +- if at least one rawinput keyboard and mouse is found: skip directinput keyboard and mouse + enumeration. Prevents stupid side-effects if both are used simultaneously, for example fullscreen + and directinput keyboard enabled: rawinput stops getting any input (and technically directinput + is less direct than rawinput, it is only good for joysticks/pads today) +- fixed possible division by zero in new power led code +- statefile_quit= configuration file parameter added, automatically saves state to + when emulator is quit normally +- CPU speed and advanced chipset configuration stored in statefiles +- in some situations full-window mode tried to use vsync frame wait (which did nothing and caused + warp-mode like speedup) +- added toggle fullwindow<>fullscreen and fullwindow<>window input events +- yet another sprite update, Total Perspective Vortex / Frantic background smallest sprites + missed last line of data + +WARNING: Configuration files saved with previous 2.2 betas won't be fully compatible with later +versions. Keyboard input data is handled slightly differently (no more "super" keyboard that +gets all keyboard input), beta 1-3 written config files may not have all keyboards enabled if +Configuration #1-#3 mode is enabled. Older configuration files should work correctly. + Beta 3: - added XZ compressed file support diff --git a/savestate.cpp b/savestate.cpp index 60784bcd..418bb58b 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -476,8 +476,10 @@ void restore_state (const TCHAR *filename) restore_pram (totallen, filepos); continue; #endif - } else if (!_tcscmp (name, L"CPU ")) + } else if (!_tcscmp (name, L"CPU ")) { end = restore_cpu (chunk); + } else if (!_tcscmp (name, L"CPUX")) + end = restore_cpu_extra (chunk); #ifdef FPUEMU else if (!_tcscmp (name, L"FPU ")) end = restore_fpu (chunk); @@ -510,6 +512,8 @@ void restore_state (const TCHAR *filename) end = restore_cia (1, chunk); else if (!_tcscmp (name, L"CHIP")) end = restore_custom (chunk); + else if (!_tcscmp (name, L"CHPX")) + end = restore_custom_extra (chunk); else if (!_tcscmp (name, L"AUD0")) end = restore_audio (0, chunk); else if (!_tcscmp (name, L"AUD1")) @@ -712,6 +716,10 @@ int save_state (const TCHAR *filename, const TCHAR *description) save_chunk (f, dst, len, L"CPU ", 0); xfree (dst); + dst = save_cpu_extra (&len, 0); + save_chunk (f, dst, len, L"CPUX", 0); + xfree (dst); + #ifdef FPUEMU dst = save_fpu (&len,0 ); save_chunk (f, dst, len, L"FPU ", 0); @@ -745,6 +753,10 @@ int save_state (const TCHAR *filename, const TCHAR *description) save_chunk (f, dst, len, L"CHIP", 0); xfree (dst); + dst = save_custom_extra (&len, 0); + save_chunk (f, dst, len, L"CHPX", 0); + xfree (dst); + dst = save_custom_agacolors (&len, 0); save_chunk (f, dst, len, L"AGAC", 0); xfree (dst); @@ -955,6 +967,7 @@ void savestate_rewind (void) p2 = st->end; write_log (L"rewinding from %d\n", replaycounter); p = restore_cpu (p); + p = restore_cpu_extra (p); #ifdef FPUEMU if (restore_u32_func (&p)) p = restore_fpu (p); @@ -964,6 +977,7 @@ void savestate_rewind (void) } p = restore_floppy (p); p = restore_custom (p); + p = restore_custom_extra (p); p = restore_blitter (p); p = restore_custom_agacolors (p); for (i = 0; i < 8; i++) { @@ -1051,6 +1065,11 @@ retry2: save_cpu (&len, p); tlen += len; p += len; + if (bufcheck (&p, 0)) + goto retry; + save_cpu_extra (&len, p); + tlen += len; + p += len; #ifdef FPUEMU if (bufcheck (&p, 0)) goto retry; @@ -1080,6 +1099,11 @@ retry2: save_custom (&len, p, 0); tlen += len; p += len; + if (bufcheck (&p, 0)) + goto retry; + save_custom_extra (&len, p); + tlen += len; + p += len; if (bufcheck (&p, 0)) goto retry; save_blitter (&len, p); -- 2.47.3