]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
41010b5
authorToni Wilen <twilen@winuae.net>
Wed, 18 Jan 2023 18:11:55 +0000 (20:11 +0200)
committerToni Wilen <twilen@winuae.net>
Wed, 18 Jan 2023 18:11:55 +0000 (20:11 +0200)
include/savestate.h
od-win32/resources/winuae.rc
od-win32/rp.cpp
od-win32/win32.h
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
savestate.cpp

index b295ac3d4c59cea64c1bc7ef3e1bace89b08919b..70b8dff06f1f03af2ece61d6a06bcd22d9c63bb2 100644 (file)
@@ -242,6 +242,7 @@ extern void restore_state(const TCHAR *filename);
 extern bool savestate_restore_finish(void);
 extern void savestate_restore_final(void);
 extern void savestate_memorysave(void);
+extern bool is_savestate_incompatible(void);
 
 extern void custom_prepare_savestate(void);
 
index 304949830631a9680672233ebfba8b96f6a60c95..dd52ae8777e86265b8eec8791ce8b788a88767b4 100644 (file)
@@ -1417,8 +1417,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 4,10,0,0
- PRODUCTVERSION 4,10,0,0
+ FILEVERSION 4,10,1,0
+ PRODUCTVERSION 4,10,1,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -1434,12 +1434,12 @@ BEGIN
         BLOCK "040904b0"
         BEGIN
             VALUE "FileDescription", "WinUAE"
-            VALUE "FileVersion", "4.10.0.0"
+            VALUE "FileVersion", "4.10.1.0"
             VALUE "InternalName", "WinUAE"
             VALUE "LegalCopyright", "© 1996-2023 under the GNU Public License (GPL)"
             VALUE "OriginalFilename", "WinUAE.exe"
             VALUE "ProductName", "WinUAE"
-            VALUE "ProductVersion", "4.10.0.0"
+            VALUE "ProductVersion", "4.10.1.0"
         END
     END
     BLOCK "VarFileInfo"
index 0c371a3f3728ca0d219710d4ea90f80ca11ffbbb..f1d4ae7a7c61de629bfe7434e910c82d568c1c75 100644 (file)
@@ -39,6 +39,7 @@
 #include "devices.h"
 
 #define RP_SCREENMODE_SCALE_MAX_X 128
+#define RP_SCREENMODE_SCALE_MAX_X_MASK 127
 
 static int initialized;
 static RPGUESTINFO guestinfo;
@@ -722,10 +723,9 @@ static void fixup_size (struct uae_prefs *prefs)
 static float getmult(float mult)
 {
        if (mult >= 3.5f)
-               return (mult - 3.5f + 4.0f) / 2.0f; //2.0f; // 4x
-       if (mult >= 2.5f) {
+               return mult / 2.0f; // 4x+
+       if (mult >= 2.5f)
                return 1.5f; // 3x
-       }
        if (mult >= 1.5f)
                return 1.0f; // 2x
        if (mult >= 0.8f)
@@ -820,7 +820,7 @@ static void get_screenmode (struct RPScreenMode *sm, struct uae_prefs *p, bool g
                vres += (int)vresm;
 
                if (hres > RES_SUPERHIRES) {
-                       m = (int)vresm + 1;
+                       m = (int)(vresm * 2.0f + 0.5f) - 1;
                } else if (hres == RES_SUPERHIRES) {
                        m = vresm > 1.0f && vresm < 2.0f ? RP_SCREENMODE_SCALE_3X : RP_SCREENMODE_SCALE_2X;
                } else if (hres >= RES_SUPERHIRES + 1) {
@@ -891,7 +891,7 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p)
        struct monconfig *gm = &p->gfx_monitor[mon->monitor_id];
        struct monconfig *gmc = &currprefs.gfx_monitor[mon->monitor_id];
        int smm = RP_SCREENMODE_SCALE (sm->dwScreenMode);
-       int smm_m = smm & 0x7f;
+       int smm_m = smm & RP_SCREENMODE_SCALE_MAX_X_MASK;
        int display = RP_SCREENMODE_DISPLAY (sm->dwScreenMode);
        int fs = 0;
        int hdbl = RES_HIRES, vdbl = VRES_DOUBLE;
@@ -905,6 +905,10 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p)
        int width, height;
        bool half;
 
+//     Sleep(10000);
+//     smm = RP_SCREENMODE_SCALE_4X + 0;
+//     smm_m = smm;
+
        storeflags = sm->dwScreenMode;
        minimized = 0;
        if (display) {
@@ -930,6 +934,8 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p)
 
        if (!WIN32GFX_IsPicassoScreen(mon)) {
 
+               float xtramult = 1.0f;
+
                if (smm == RP_SCREENMODE_SCALE_3X) {
 
                        hdbl = RES_SUPERHIRES;
@@ -985,9 +991,9 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p)
                        }
 
                        if (smm_m > RP_SCREENMODE_SCALE_4X) {
-                               float em = smm_m / 4.0f;
-                               hmult *= em;
-                               vmult *= em;
+                               xtramult = (smm_m + 1.0f) / 4.0f;
+                               hmult *= xtramult;
+                               vmult *= xtramult;
                        }
                }
                if (hres == RES_LORES && vres > VRES_NONDOUBLE)
@@ -1013,6 +1019,10 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p)
                        else
                                gm->gfx_size_win.height = sm->lClipHeight >> (VRES_MAX - vdbl);
                }
+               
+               gm->gfx_size_win.width = (int)(gm->gfx_size_win.width * xtramult);
+               gm->gfx_size_win.height = (int)(gm->gfx_size_win.height * xtramult);
+
                if (half) {
                        gm->gfx_size_win.width = gm->gfx_size_win.width * 3 / 2;
                        gm->gfx_size_win.height = gm->gfx_size_win.height * 3 / 2;
@@ -1748,9 +1758,10 @@ static void sendfeatures (void)
 
        feat = RP_FEATURE_POWERLED | RP_FEATURE_SCREEN1X | RP_FEATURE_FULLSCREEN;
        feat |= RP_FEATURE_PAUSE | RP_FEATURE_TURBO_CPU | RP_FEATURE_TURBO_FLOPPY | RP_FEATURE_VOLUME | RP_FEATURE_SCREENCAPTURE;
-       feat |= RP_FEATURE_STATE | RP_FEATURE_DEVICEREADWRITE;
-       if (currprefs.gfx_api)
+       feat |= RP_FEATURE_DEVICEREADWRITE;
+       if (currprefs.gfx_api) {
                feat |= RP_FEATURE_SCREENOVERLAY;
+       }
        if (WIN32GFX_IsPicassoScreen(mon)) {
                feat |= RP_FEATURE_SCREEN2X | RP_FEATURE_SCREEN3X | RP_FEATURE_SCREEN4X;
        } else {
@@ -1764,7 +1775,10 @@ static void sendfeatures (void)
        feat |= RP_FEATURE_INPUTDEVICE_ANALOGSTICK;
        feat |= RP_FEATURE_INPUTDEVICE_LIGHTPEN;
        feat |= RP_FEATURE_RAWINPUT_EVENT;
-       write_log (_T("RP_IPC_TO_HOST_FEATURES=%x %d\n"), feat, WIN32GFX_IsPicassoScreen(mon));
+       if (!is_savestate_incompatible()) {
+               feat |= RP_FEATURE_STATE;
+       }
+       write_log (_T("RP_IPC_TO_HOST_FEATURES=%08x %d\n"), feat, WIN32GFX_IsPicassoScreen(mon));
        RPSendMessagex (RP_IPC_TO_HOST_FEATURES, feat, 0, NULL, 0, &guestinfo, NULL);
 }
 
index 74575133cefb9f21ead718bbecf2e1d310d2c292..5e3e6e19f0da77a6766a1a0b3ed3ee57c8564bcf 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("4")
+#define WINUAEBETA _T("5")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2023, 1, 14)
+#define WINUAEDATE MAKEBD(2023, 1, 18)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
 
 #ifndef WINUAEEXTRA
-#define WINUAEEXTRA _T("")
+#define WINUAEEXTRA _T("RC1")
 #endif
 #ifndef WINUAEREV
 #define WINUAEREV _T("")
index 046f14df1b24ff642a745e65e2cc5ca39a039792..53cc3956c52e33010ccb50d5c165b89fd6841f52 100644 (file)
@@ -22647,7 +22647,7 @@ static int GetSettings (int all_options, HWND hwnd)
                if (gui_fullscreen) {
                        gui_width = GetSystemMetrics(SM_CXSCREEN);
                        gui_height = GetSystemMetrics(SM_CYSCREEN);
-                       if (isfullscreen() > 0) {
+                       if (isfullscreen() > 0 && currprefs.gfx_api < 2) {
                                struct MultiDisplay *md = getdisplay(&currprefs, 0);
                                int w = md->rect.right - md->rect.left;
                                int h = md->rect.bottom - md->rect.top;
index e6471864dcb6231cdc241183ba86780b92a8706d..a79291ba1c1baa16e50466195781f00852c31153 100644 (file)
@@ -1,4 +1,10 @@
 
+Beta 5 (RC1):
+
+- Fullscreen GUI Misc panel option ticked + D3D 11 mode exclusive fullscreen + enter GUI which drops back to desktop: GUI used full desktop size, when it should have used "work area" ("work area" does not include for example Task bar)
+- End directory filesystem threads earlier in shutdown sequence, previously it was too late, after Amiga address space was freed, causing crash if filesystem queue had commands pending and they needed to read or write Amiga side memory.
+- Improved Game ports panel Custom mapping autoswitch selection. Select first Custom config that has at least Amiga button fire button or second button mapped to connected input device that initiated autoswitch.
+
 Beta 4:
 
 - Added continuous screenshot mode to GUI (Was previously available via input events). When ticked, screenshot is taken automatically every frame.
index 9f2dcc20afc8020b28c2f710695e86f928cfdfa3..7ba4bc2ee71e1eaed57042f0dd734e9bacfe9d5d 100644 (file)
@@ -67,6 +67,7 @@
 #include "a2091.h"
 #include "devices.h"
 #include "fsdb.h"
+#include "gfxboard.h"
 
 int savestate_state = 0;
 static int savestate_first_capture;
@@ -97,11 +98,9 @@ struct staterecord
 
 static struct staterecord **staterecords;
 
-static void state_incompatible_warn (void)
+bool is_savestate_incompatible(void)
 {
-       static int warned;
        int dowarn = 0;
-       int i;
 
 #ifdef BSDSOCKET
        if (currprefs.socket_emu)
@@ -120,17 +119,25 @@ static void state_incompatible_warn (void)
                dowarn = 1;
 #endif
 #ifdef FILESYS
-       for(i = 0; i < currprefs.mountitems; i++) {
+       for(int i = 0; i < currprefs.mountitems; i++) {
                struct mountedinfo mi;
                int type = get_filesys_unitconfig (&currprefs, i, &mi);
                if (mi.ismounted && type != FILESYS_VIRTUAL && type != FILESYS_HARDFILE && type != FILESYS_HARDFILE_RDB)
                        dowarn = 1;
        }
+       if (currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE) {
+               dowarn = 1;
+       }
+       if (currprefs.rtgboards[1].rtgmem_size > 0) {
+               dowarn = 1;
+       }
 #endif
-       if (!warned && dowarn) {
-               warned = 1;
-               notify_user (NUMSG_STATEHD);
+#ifdef WITH_PPC
+       if (currprefs.ppc_model) {
+               dowarn = 1;
        }
+#endif
+       return dowarn != 0;
 }
 
 /* functions for reading/writing bytes, shorts and longs in big-endian
@@ -1218,7 +1225,13 @@ int save_state (const TCHAR *filename, const TCHAR *description)
        int comp = savestate_docompress;
 
        if (!savestate_specialdump && !savestate_nodialogs) {
-               state_incompatible_warn ();
+               if (is_savestate_incompatible()) {
+                       static int warned;
+                       if (!warned) {
+                               warned = 1;
+                               notify_user(NUMSG_STATEHD);
+                       }
+               }
                if (!save_filesys_cando ()) {
                        gui_message (_T("Filesystem active. Try again later."));
                        return -1;