]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2200b4
authorToni Wilen <twilen@winuae.net>
Sat, 22 May 2010 16:32:48 +0000 (19:32 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 22 May 2010 16:32:48 +0000 (19:32 +0300)
19 files changed:
cfgfile.cpp
cia.cpp
drawing.cpp
include/keyboard.h
include/options.h
include/savestate.h
include/xwin.h
inputdevice.cpp
inputevents.def
newcpu.cpp
od-win32/dinput.cpp
od-win32/keyboard_win32.cpp
od-win32/lib/prowizard.lib
od-win32/sounddep/sound.cpp
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/winuaechangelog.txt
savestate.cpp

index 5d978d502d7d1f595b3f5cccfc87c484c6c7e8a0..b287cd9acde3be9594d3d74a8f283bbd8ac1aa97 100644 (file)
@@ -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 6ba0395c881244827c007159f398d9dd976f4d0c..7dd48105e76965583fefe47941e496539393bfd7 100644 (file)
--- 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);
        }
index 46947f5409c5425a45e185ef9d25548b99abef96..e1f80d9fa7dba2e202b5d20bb645a994157a5776 100644 (file)
@@ -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);
index f5ca1a9d3c1d841cf9c2b394f6ae54cb83199349..d61c333b4a75d99abf0941daa792f8b9d89c638f 100644 (file)
 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,
index bb162fa4c55953b6e8eb92637beeabaf45784029..e170f7356dae1870f1854ff5761206dcb4d13c02 100644 (file)
@@ -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;
index 82eb8774bb5e4c3d166b689dfe988d3c827843a2..ac9d3dfe3efc1146c23170c2fb4e8045a7f81b2d 100644 (file)
@@ -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 *);
index bdc08f08b4d529f64b40d1a72281f292a87a06a4..da09c97c3044186c2358962a0da2f9fefd8e818a 100644 (file)
@@ -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);
index c1b525b2305b7151be1b621e8b6d5548a1471758..951790c1e1debd9616843bbc230444a84798d5ae 100644 (file)
@@ -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 ();
index fae09f51c71f2c5886d4b3a356062a5d3aecc8b6..be7f1577b7198235107082e6d515f92373dbf72c 100644 (file)
@@ -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)
index a5b844147fbc74e2e2d9a318a86b619ab307be11..b4ffd4f5704744fedd2626492c632e0048bd63d5 100644 (file)
@@ -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;
index 5ae9b57bd3575303a89ae78bf7a6016c74e5f81e..03792a58859729d52d64b71fa5f674f424f27195 100644 (file)
@@ -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++;
        }
index 0fdee133568121568e1d9c6eeabb2d9f97f56f61..d2e2b7c564600d5de23b24a81dc526fb095d3de4 100644 (file)
@@ -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 ();
index 2cb23ec4b151448ed374b79779428f05d2c41cc4..9ad0d0d779b30077fd9e02230eda5d914cfd6205 100644 (file)
Binary files a/od-win32/lib/prowizard.lib and b/od-win32/lib/prowizard.lib differ
index 8f5a89456bed41898a974bb628508258cdc6de5b..a893c63c29aa0bf1794d4c1740e3fd661d6f36bb 100644 (file)
@@ -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;
index 0eb5907ece817ff5198367b31eea48bb54fd1eab..1db7ef9907f19d7de084b316e59fc203f0e3b5c6 100644 (file)
@@ -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")) {
index 6e54e1b8e63f65df6ac463609b7b7d8b32b28348..9c5c53ec4335e6150c05b11cca56a7bfc5b3812b 100644 (file)
@@ -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""
 
index 1a178b6fd0b8d5c87546dff468e519517091ed00..8468101485d054e76b958724f4d48cd4c679cc26 100644 (file)
@@ -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);
 }
index 281251b65b8d45496692814079671643b62bf7f4..4d5a6169b1177eeba125b4fb53c95a168c5a729b 100644 (file)
@@ -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=<path> configuration file parameter added, automatically saves state to <path>
+  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
index 60784bcd3d21e6ebe2d850e57e4b1b6bf66c8c94..418bb58bc1d23163953a7aa98c2148736c86fbeb 100644 (file)
@@ -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);