From 03f106b380099fc880f2e3b49f3522211b4dbd15 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 30 Oct 2022 18:33:43 +0200 Subject: [PATCH] 4990b4 --- include/options.h | 2 +- od-win32/gdirender.cpp | 9 +++++++++ od-win32/win32.cpp | 36 +++++++++++++----------------------- od-win32/win32.h | 4 ++-- od-win32/winuaechangelog.txt | 18 +++++++++++++++--- 5 files changed, 40 insertions(+), 29 deletions(-) diff --git a/include/options.h b/include/options.h index a009b053..1a73edac 100644 --- a/include/options.h +++ b/include/options.h @@ -16,7 +16,7 @@ #define UAEMAJOR 4 #define UAEMINOR 9 -#define UAESUBREV 2 +#define UAESUBREV 9 #define MAX_AMIGADISPLAYS 4 diff --git a/od-win32/gdirender.cpp b/od-win32/gdirender.cpp index ff06fb99..4c08bee7 100644 --- a/od-win32/gdirender.cpp +++ b/od-win32/gdirender.cpp @@ -391,6 +391,7 @@ static const TCHAR *gdi_init(HWND ahwnd, int monid, int w_w, int w_h, int depth, allocsprite(gdi, &gdi->osd, gdi->ledwidth, gdi->ledheight); allocsprite(gdi, &gdi->cursor, CURSORMAXWIDTH, CURSORMAXHEIGHT); gdi->enabled = 1; + write_log(_T("GDI mode initialized %d*%d*%d\n"), w_w, w_h, depth); return NULL; } @@ -418,6 +419,10 @@ static bool gdi_setcursor(int monid, int x, int y, int width, int height, float { struct gdistruct *gdi = &gdidata[monid]; + if (gdi->depth < 32) { + return false; + } + if (width < 0 || height < 0) { return true; } @@ -443,6 +448,10 @@ static uae_u8 *gdi_setcursorsurface(int monid, int *pitch) { struct gdistruct* gdi = &gdidata[monid]; + if (gdi->depth < 32) { + return NULL; + } + if (pitch) { *pitch = gdi->cursor.pitch; return (uae_u8*)gdi->cursor.bits; diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index eca5bf06..69a91d49 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -5624,7 +5624,7 @@ static void WIN32_HandleRegistryStuff (void) if (regexists (NULL, _T("SoundDriverMask"))) { regqueryint (NULL, _T("SoundDriverMask"), &sounddrivermask); } else { - sounddrivermask = 3; + sounddrivermask = 2; regsetint (NULL, _T("SoundDriverMask"), sounddrivermask); } @@ -5797,7 +5797,7 @@ static int betamessage (void) return 1; } -int os_admin, os_64bit, os_win7, os_win8, os_win10, os_vista, cpu_number, os_touch; +int os_admin, os_64bit, os_win7, os_win8, os_win10, cpu_number, os_touch; BOOL os_dwm_enabled; BOOL dpi_aware_v2; @@ -5875,9 +5875,6 @@ static int osdetect (void) pGetNativeSystemInfo (&SystemInfo); osVersion.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (GetVersionEx (&osVersion)) { - if (osVersion.dwMajorVersion >= 6) { - os_vista = 1; - } if (osVersion.dwMajorVersion >= 7 || (osVersion.dwMajorVersion == 6 && osVersion.dwMinorVersion >= 1)) { os_win7 = 1; } @@ -5916,18 +5913,16 @@ static int osdetect (void) } } - if (os_vista) { - typedef HRESULT(CALLBACK* DWMISCOMPOSITIONENABLED)(BOOL*); - HMODULE dwmapihandle; - DWMISCOMPOSITIONENABLED pDwmIsCompositionEnabled; - dwmapihandle = LoadLibrary(_T("dwmapi.dll")); - if (dwmapihandle) { - pDwmIsCompositionEnabled = (DWMISCOMPOSITIONENABLED)GetProcAddress(dwmapihandle, "DwmIsCompositionEnabled"); - if (pDwmIsCompositionEnabled) { - pDwmIsCompositionEnabled(&os_dwm_enabled); - } - FreeLibrary(dwmapihandle); + typedef HRESULT(CALLBACK* DWMISCOMPOSITIONENABLED)(BOOL*); + HMODULE dwmapihandle; + DWMISCOMPOSITIONENABLED pDwmIsCompositionEnabled; + dwmapihandle = LoadLibrary(_T("dwmapi.dll")); + if (dwmapihandle) { + pDwmIsCompositionEnabled = (DWMISCOMPOSITIONENABLED)GetProcAddress(dwmapihandle, "DwmIsCompositionEnabled"); + if (pDwmIsCompositionEnabled) { + pDwmIsCompositionEnabled(&os_dwm_enabled); } + FreeLibrary(dwmapihandle); } return 1; @@ -7050,13 +7045,8 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR if (!osdetect ()) return 0; - if (os_vista) { - max_uae_width = 8192; - max_uae_height = 8192; - } else { - max_uae_width = 3072; - max_uae_height = 2048; - } + max_uae_width = 8192; + max_uae_height = 8192; hInst = hInstance; hMutex = CreateMutex (NULL, FALSE, _T("WinUAE Instantiated")); // To tell the installer we're running diff --git a/od-win32/win32.h b/od-win32/win32.h index 291d161e..8b03aa65 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 0 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("Beta 3") +#define WINUAEBETA _T("Beta 4") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2022, 10, 23) +#define WINUAEDATE MAKEBD(2022, 10, 30) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index bef60cd5..051d2d91 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,5 +1,20 @@ +- Remaining IPL fixes (LINK, UNLK, MOVE to SR/CCR, AND/EOR/OR SR/CCR, CPU wait state IPL fix). +- Emulated Paula side-effect that affects IPL timing. IPLx line state changes from low to high (IPL is active low) are about 0.5 CCK later than high to low transitions. This delays CPU IPL change detection by 2 CPU clocks if any IPL line had low to high transition. CPU accepts IPL change only if has been stable for 2 CPU clocks. (for example 3 to 5 has delay, 4 to 5 does not) +- Enable only WASAPI audio by default. +- Debugger break point command accepts number of hits before breaking to debugger (f Nxx
where xx is number of hits required) +- uaegfx overlay limit checks compared Amiga side VRAM end against physical host side bitmap end which accidentally passed if 64-bit Windows. Overlay window was usually empty if 32-bit Windows. (It might have worked in some configurations when using Z2 uaegfx) +- GUI Help button is now always available and opens if exists: (in priority order) winuae.chm, winuae.pdf. If neither is found, help web page is opened (without asking first like previously) +- It is still possible to run windowed WinUAE if desktop is 16-bit but it can cause graphics problems. Not sure if this needs to be supported anymore. + +68000 based A500 like unexpanded (Fast RAM expansion is supported) configurations should be now 100% cycle-accurate. (If there are no bugs, many edge cases need complex and very carefully timed cycle accurate tests that are not easy to do) + +Note that this does not mean all features are fully emulated, for example OCS and ECS Denise mid-screen resolution changes are not pixel accurate. Accurate as in if resolution change is not carefully coded, there can be few extra or missing pixels when resolution changes. AGA does not have this side-effect. + + +Beta 3: + - 68000 IPL check position is now almost fully accurate (Still some special cases to check and test). Very big thanks to fx68k author! - W debugger command hang fixed. - Full drive/RDB mode is now normal checbox. Hopefully it is now less confusing than button that didn't really look like a button. If selected HDF already has RDSK identifer, checkbox is ticked and disabled. Checkbox can be only ticked/unticked if selected HDF does not have RDSK identifier. @@ -34,9 +49,6 @@ IPL check is most commonly at the beginning of instruction after EA calculations This finally makes 68000 emulation complete. Everything observable (that Amiga uses) outside of 68000 should be 100% cycle-accurate now. -Usual suspects (Spectreparty aka Dots demo / Phenomena and Expiration / Mayhem cube) still have problems which means there are still something else wrong. - - Beta 2: - Display resync blanking was stuck enabled (~1s blank screen when mode switches) -- 2.47.3