]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3600b16
authorToni Wilen <twilen@winuae.net>
Mon, 1 Jan 2018 17:20:17 +0000 (19:20 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 1 Jan 2018 17:20:17 +0000 (19:20 +0200)
13 files changed:
drawing.cpp
include/newcpu.h
newcpu.cpp
od-win32/picasso96_win.cpp
od-win32/picasso96_win.h
od-win32/resources/winuae.rc
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/win32gui.cpp
od-win32/winuae_msvc15/winuae_msvc.vcxproj
od-win32/winuaechangelog.txt
od-win32/wix/Product.wxs

index c358a54801dd8df49974d30deaa9440b7a6591e8..6c82bfb32d08ba975db203c1c8d761f12eb3122f 100644 (file)
@@ -2295,23 +2295,31 @@ static void weird_bitplane_fix (int start, int end)
 
        start >>= sh;
        end >>= sh;
-       if (bplplanecnt == 5 && !bpldualpf) {
+       if (bplplanecnt == 5 && !bpldualpf && plf2pri > 5) {
                /* emulate OCS/ECS only undocumented "SWIV" hardware feature */
                for (int i = start; i < end; i++) {
                        if (p[i] & 16)
                                p[i] = 16;
                }
-       } else if (bpldualpf && bpldualpfpri) {
+       } 
+       if (bpldualpf && bpldualpfpri && plf2pri > 4) {
                /* in dualplayfield mode this feature is even more strange.. */
                for (int i = start; i < end; i++) {
+                       // running man / scoopex
                        if (p[i] & (2 | 8 | 32))
                                p[i] |= 0x40;
                }
-       } else if (bpldualpf && !bpldualpfpri) {
+       }
+       if (bpldualpf && !bpldualpfpri && plf2pri > 4) {
                for (int i = start; i < end; i++) {
                        p[i] &= ~(2 | 8 | 32);
                }
        }
+       if (bpldualpf && plf1pri > 4) {
+               for (int i = start; i < end; i++) {
+                       p[i] = 0x40;
+               }
+       }
 }
 
 /* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time
@@ -2839,7 +2847,7 @@ static void do_color_changes (line_draw_func worker_border, line_draw_func worke
                // playfield
                if (nextpos_in_range > lastpos && lastpos >= playfield_start && lastpos < playfield_end) {
                        int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end;
-                       if (plf2pri > 5 && !(currprefs.chipset_mask & CSMASK_AGA))
+                       if ((plf2pri > 4 || plf1pri > 4) && !(currprefs.chipset_mask & CSMASK_AGA))
                                weird_bitplane_fix (lastpos, t);
                        if (bplxor && may_require_hard_way && worker_pfield != pfield_do_linetoscr_bordersprite_aga)
                                playfield_hard_way(worker_pfield, lastpos, t);
index cbef72d6e034264d1412b6eb982aa4f23cb6e302..b17233b8e41af963879c014981a7d58e7169845c 100644 (file)
@@ -534,6 +534,8 @@ STATIC_INLINE void m68k_setpc_normal(uaecptr pc)
        }
 }
 
+extern void cpu_invalidate_cache(uaecptr, int);
+
 extern uae_u32(*read_data_030_bget)(uaecptr);
 extern uae_u32(*read_data_030_wget)(uaecptr);
 extern uae_u32(*read_data_030_lget)(uaecptr);
index c0892dedf320c577fa1087d8f479c44303d3355b..474df49a312bb686494e0c3885c525b5f3ba8c5f 100644 (file)
@@ -1572,15 +1572,8 @@ static void dcache040_push_line(int index, int line, bool writethrough, bool inv
 #endif
 }
 
-void flush_cpu_caches_040(uae_u16 opcode)
+static void flush_cpu_caches_040_2(int cache, int scope, uaecptr addr, bool push, bool pushinv)
 {
-       // 0 (1) = data, 1 (2) = instruction
-       int cache = (opcode >> 6) & 3;
-       int scope = (opcode >> 3) & 3;
-       int areg = opcode & 7;
-       uaecptr addr = m68k_areg(regs, areg);
-       bool push = (opcode & 0x20) != 0;
-       bool pushinv = (regs.cacr & 0x01000000) == 0; // 68060 DPI
 
 #if VALIDATE_68040_DATACACHE
        write_log(_T("push %d %d %d %08x %d %d\n"), cache, scope, areg, addr, push, pushinv);
@@ -1649,9 +1642,43 @@ void flush_cpu_caches_040(uae_u16 opcode)
                        }
                }
        }
+}
+
+void flush_cpu_caches_040(uae_u16 opcode)
+{
+       // 0 (1) = data, 1 (2) = instruction
+       int cache = (opcode >> 6) & 3;
+       int scope = (opcode >> 3) & 3;
+       int areg = opcode & 7;
+       uaecptr addr = m68k_areg(regs, areg);
+       bool push = (opcode & 0x20) != 0;
+       bool pushinv = (regs.cacr & 0x01000000) == 0; // 68060 DPI
+
+       flush_cpu_caches_040_2(cache, scope, addr, push, pushinv);
        mmu_flush_cache();
 }
 
+void cpu_invalidate_cache(uaecptr addr, int size)
+{
+       if (!currprefs.cpu_data_cache)
+               return;
+       if (currprefs.cpu_model == 68030) {
+               uaecptr end = addr + size;
+               addr &= ~3;
+               while (addr < end) {
+                       dcaches030[(addr >> 4) & (CACHELINES030 - 1)].valid[(addr >> 2) & 3] = 0;
+                       addr += 4;
+               }
+       } else if (currprefs.cpu_model >= 68040) {
+               uaecptr end = addr + size;
+               while (addr < end) {
+                       flush_cpu_caches_040_2(0, 1, addr, true, true);
+                       addr += 16;
+               }
+       }
+}
+
+
 void set_cpu_caches (bool flush)
 {
        regs.prefetch020addr = 0xffffffff;
@@ -6689,6 +6716,14 @@ static int asm_ispc(const TCHAR *s)
        return 0;
 }
 
+static uae_u32 asmgetval(const TCHAR *s)
+{
+       TCHAR *endptr;
+       if (s[0] == '-')
+               return _tcstol(s, &endptr, 16);
+       return _tcstoul(s, &endptr, 16);
+}
+
 static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
 {
        TCHAR *ss = s;
@@ -6727,7 +6762,7 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
                        *v = _tstol(s + 2);
                } else {
                        TCHAR *endptr;
-                       *v = _tcstol(s + 1, &endptr, 16);
+                       *v = asmgetval(s + 1);
                }
                return imm;
        }
@@ -6735,8 +6770,7 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
        if (s[0] == '!') {
                *v = _tstol(s + 1);
        } else {
-               TCHAR *endptr;
-               *v = _tcstol(s, &endptr, 16);
+               *v = asmgetval(s);
        }
        int dots = 0;
        for (int i = 0; i < _tcslen(s); i++) {
@@ -8265,7 +8299,7 @@ uae_u8 *save_cpu (int *len, uae_u8 *dstptr)
        if (dstptr)
                dstbak = dst = dstptr;
        else
-               dstbak = dst = xmalloc (uae_u8, 1000 + 20000);
+               dstbak = dst = xmalloc (uae_u8, 1000 + 30000);
        model = currprefs.cpu_model;
        save_u32 (model);                                       /* MODEL */
        save_u32(0x80000000 | 0x40000000 | 0x20000000 | 0x10000000 | 0x8000000 | 0x4000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */
index ee1b7f755ff938fc4eefc2adc1b66b5551bb61e1..509b9354e9a0dc3a95848faeb347314127837782 100644 (file)
@@ -89,7 +89,7 @@ void mman_ResetWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize);
 int p96refresh_active;
 bool have_done_picasso = 1; /* For the JIT compiler */
 static int p96syncrate;
-int p96hsync_counter, full_refresh;
+static int p96hsync_counter, full_refresh;
 
 
 #define PICASSO_STATE_SETDISPLAY 1
index 3385d83147187e951d56ddc70f2c816fac8b61e8..17780a9e38b85ad26f5ce93bad70f44cb49f6c87 100644 (file)
@@ -589,7 +589,6 @@ extern int createwindowscursor (uaecptr src, int w, int h, int hiressprite, int
 void fb_copyrow(uae_u8 *src, uae_u8 *dst, int x, int y, int width, int srcpixbytes, int dy);
 
 extern int p96refresh_active;
-extern int p96hsync_counter;
 
 #define LIB_SIZE 34
 #define CARD_FLAGS LIB_SIZE
index 4d6c5ac02587f4f46c7601dddf43d6c4a70b45ff..457e39ea84ef0c2e7e814c74fd6164aec0761bfb 100644 (file)
@@ -1370,7 +1370,7 @@ BEGIN
             VALUE "FileDescription", "WinUAE"
             VALUE "FileVersion", "3.6.0.0"
             VALUE "InternalName", "WinUAE"
-            VALUE "LegalCopyright", "© 1996-2017 under the GNU Public License (GPL)"
+            VALUE "LegalCopyright", "© 1996-2018 under the GNU Public License (GPL)"
             VALUE "OriginalFilename", "WinUAE.exe"
             VALUE "ProductName", "WinUAE"
             VALUE "ProductVersion", "3.6.0.0"
index caa51c4a2b803ee9f90d33cf2b54f65e3ba9df30..e3170df9b8dc42512a98c24ee3c0555c6b389f5a 100644 (file)
@@ -3154,7 +3154,7 @@ void logging_init (void)
                SystemInfo.wProcessorArchitecture, SystemInfo.wProcessorLevel, SystemInfo.wProcessorRevision,
                SystemInfo.dwNumberOfProcessors, filedate, os_touch);
        write_log (_T("\n(c) 1995-2001 Bernd Schmidt   - Core UAE concept and implementation.")
-               _T("\n(c) 1998-2017 Toni Wilen      - Win32 port, core code updates.")
+               _T("\n(c) 1998-2018 Toni Wilen      - Win32 port, core code updates.")
                _T("\n(c) 1996-2001 Brian King      - Win32 port, Picasso96 RTG, and GUI.")
                _T("\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support.")
                _T("\n(c) 2000-2001 Bernd Meyer     - JIT engine.")
index 0986eae411d92ee5148a3718bccda7e6e6ba5282..dde0b07c46f75b1e48ed7590768519fd9d9a265d 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("15")
+#define WINUAEBETA _T("16")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2017, 12, 27)
+#define WINUAEDATE MAKEBD(2018, 1, 1)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index c8a07f891ae1caf22f571153b5975a47af919e41..3390afe442354e3b692dd6e1e1d185dd51ef03d3 100644 (file)
@@ -3025,7 +3025,7 @@ static void createstatuswindow (void)
                return;
 
        hStatusWnd = CreateWindowEx (
-               0, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE,
+               WS_EX_COMPOSITED, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE,
                0, 0, 0, 0, hMainWnd, (HMENU) 1, hInst, NULL);
        if (!hStatusWnd)
                return;
@@ -3709,7 +3709,7 @@ bool vsync_isdone (void)
 {
        if (isvsync () == 0)
                return false;
-       if (currprefs.gfx_api == 2) {
+       if (currprefs.gfx_api > 1) {
                return d3d11_vsync_isdone();
        } else {
                if (!isthreadedvsync()) {
index 9366a6660f126822202df63f49288f7319b438a9..b3d424bd48e15857203f88476864866c0f665bf6 100644 (file)
@@ -20630,7 +20630,12 @@ static int GetSettings (int all_options, HWND hwnd)
                }
 
                tres = scaleresource (panelresource, hwnd, gui_resize_enabled, gui_fullscreen, workprefs.win32_gui_alwaysontop || workprefs.win32_main_alwaysontop ? WS_EX_TOPMOST : 0, true);
-               dhwnd = CreateDialogIndirect (tres->inst, tres->resource, isfullscreen () != 0 ? hwnd : NULL, DialogProc);
+               HWND phwnd = hwnd;
+               if (isfullscreen() == 0)
+                       phwnd = 0;
+               if (isfullscreen() > 0 && currprefs.gfx_api > 1)
+                       phwnd = 0;
+               dhwnd = CreateDialogIndirect (tres->inst, tres->resource, phwnd, DialogProc);
                dialog_rect.top = dialog_rect.left = 0;
                dialog_rect.right = tres->width;
                dialog_rect.bottom = tres->height;
index cc43394bbe1eec438d3a5ac06b1d4b9fb86d0c78..0af55eea5077511384e8620a12d9294d877ce319 100644 (file)
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
index b7bbeaa1a2d381f1c5d9c4b453c80c68739c9b86..d171166446e1a561a1bf41f8d9e797ee304bd5cc 100644 (file)
@@ -4,6 +4,31 @@ JIT Direct current rules are less complex now. It automatically switches off onl
   - RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
   Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
 \r
+Beta 16:\r
+\r
+- Fixed statefile memory corruption if CPU is 68060. (Introduced when 68040/060 data cache support was added)\r
+- Made SA-1000 and SA-2000 suboptions (like SupraDrives) SA-2000 is same as SA-1000 without $f0 ROM mapping. (Old SA-1000 configs must be re-created)\r
+- GUI opened in D3D11 fullscreen mode: GUI minimization fixed.\r
+- D3D11 mode fullscreen alt-tab, then clicking GUI reset button didn't restore fullscreen mode correctly.\r
+- D3D11 scaled RTG mode hardware mouse cursor position and scaling fixed.\r
+- D3D11 fullscreen RTG, enter GUI, exit GUI: there may have been long delay before fullscreen mode was restored.\r
+- Handle D3D11 mode possible DXGI_ERROR_DEVICE_REMOVED error by retrying mode setup instead of stopping screen updates.\r
+- Catweasel expansion caused hang (infinite autoconfig loop), it was not fully updated to new expansion system.\r
+- SA-1000 Amax driver hang fixed (WD reset command didn't clear busy in all situations)\r
+- Tape emulation now returns single file mark after last file before final end of file/blank state, no filemark returned if last file of index file does not have ending linefeed. Fixes Amix installation error if last file on tape (X11r5src) was selected for installation. When writing, multiple filemarks between files are supported.\r
+\r
+Beta 15:\r
+\r
+- Debugger 68040/060 MMU table dump command (mmud) didn't support 8k page size. Mask out page descriptor bit 3 (unused) and 4 (M) when checking for descriptor flag differences to generate more useful output from Fusion Forty boot ROM generated page tables.\r
+- Debugger memory string routines now also use MMU mapping mode if enabled.\r
+- Fusion Forty memory flag fixed (It does not use processor slot ram and it must not be enabled). Fixes boot crash if MMU emulation is enabled. Note that it will crash (nothing to do with emulation) if MMU is enabled and 32-bit RAM (except board's onboard RAM is enabled) or any Z3 boards are enabled. Real A2000 can't have those.\r
+- D3D11 no-buffer mode now selects blit model (instead of flip model) if DXGI 1.5+ allow tearing mode is not available.\r
+- D3D11 low latency vsync partially implemented. No calibration, it uses Windows reported value because they should be accurate (reported as fractional number)\r
+- D3D11 black frame insertion support implemented. (which probably isn't working very well..)\r
+- D3D11 mode will now reload shader(s) automatically on the fly if they are modified.\r
+- D3D11 mode D3D9 to D3D11 compatible shader conversion now also converts D3D9-only migfilter/magfilter lines.\r
+- D3D11 mode D3D9 to D3D11 compatible shader modification is completely skipped if technique10 or technique11 is found.\r
+- D3D11 mode fullscreen alt-tab reliability improved, it was still possible to get blank or partially blank window after alt-tab.\r
 \r
 Beta 14:\r
 \r
@@ -91,7 +116,7 @@ Beta 9:
 - ECS Denise BPLCON2 ECS-only bits were masked unless AGA was selected, ECS-specific KILLEHB linetoscr was not implemented. Seven Seas/Andromeda now shows correctly corrupted palette if ECS Denise.\r
 - IDE FORMAT TRACK fixed, it needs to transfer single block of data (and then toss it away). Fixes Gigatron Arriba installer.\r
 - Emulated Gigatron Arriba IDE controller. ROM dump not available.\r
-- 64-bit only bad stack linker setting correctded, caused random crashes and caused file dialogs to crash if certain shell extensions were installed. (Thanks mutetus!)\r
+- 64-bit only bad stack linker setting corrected, caused random crashes and caused file dialogs to crash if certain shell extensions were installed. (Thanks mutetus!)\r
 \r
 Beta 8:\r
 \r
index b2e8e64459d4a5f0975b1927daed2cdc6ad1af5f..24093e5fbb3a85c6821a05ab84cd71fbcca9ae78 100644 (file)
@@ -2,8 +2,8 @@
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 
   <?define ProductName = "WinUAE" ?>
-  <?define ProductVersion = "3.5.1" ?>
-  <?define ProductFullVersion = "3.5.1.0" ?>
+  <?define ProductVersion = "3.6.0" ?>
+  <?define ProductFullVersion = "3.6.0.0" ?>
   <?define ProductAuthor = "Arabuusimiehet" ?>
 
   <?if $(var.Platform) = x64 ?>