From: Toni Wilen Date: Sat, 22 May 2010 16:32:48 +0000 (+0300) Subject: 2200b4 X-Git-Tag: 2200~23 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=c9efea3d665986b7661bc5de7704396dc640314c;p=francis%2Fwinuae.git 2200b4 --- 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 2cb23ec4..9ad0d0d7 100644 Binary files a/od-win32/lib/prowizard.lib and b/od-win32/lib/prowizard.lib differ diff --git a/od-win32/sounddep/sound.cpp b/od-win32/sounddep/sound.cpp index 8f5a8945..a893c63c 100644 --- a/od-win32/sounddep/sound.cpp +++ b/od-win32/sounddep/sound.cpp @@ -145,7 +145,7 @@ int setup_sound (void) static int isvsync (void) { - return currprefs.gfx_avsync && currprefs.gfx_afullscreen; + return currprefs.gfx_avsync && currprefs.gfx_afullscreen == GFX_FULLSCREEN; } float scaled_sample_evtime_orig; diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 0eb5907e..1db7ef99 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -88,7 +88,7 @@ #include "rp.h" #endif -extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput, rawkeyboard; +extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput; extern int force_directsound; int log_scsi, log_net, uaelib_debug; int pissoff_value = 25000; @@ -1451,7 +1451,7 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, case WM_NCLBUTTONDBLCLK: if (wParam == HTCAPTION) { - toggle_fullscreen (); + toggle_fullscreen (-1); return 0; } break; @@ -4030,7 +4030,7 @@ static int parseargs (const TCHAR *arg, const TCHAR *np, const TCHAR *np2) return 1; } if (!_tcscmp (arg, L"-rawkeyboard")) { - rawkeyboard = 1; + // obsolete return 1; } if (!_tcscmp (arg, L"-directsound")) { diff --git a/od-win32/win32.h b/od-win32/win32.h index 6e54e1b8..9c5c53ec 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -18,8 +18,8 @@ #define WINUAEPUBLICBETA 1 #define LANG_DLL 1 -#define WINUAEBETA L"3" -#define WINUAEDATE MAKEBD(2010, 5, 19) +#define WINUAEBETA L"4" +#define WINUAEDATE MAKEBD(2010, 5, 22) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 1a178b6f..84681014 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -143,9 +143,9 @@ static void clearscreen (void) static int isfullscreen_2 (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); } 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);