]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
4920b3
authorToni Wilen <twilen@winuae.net>
Sun, 23 Oct 2022 18:38:01 +0000 (21:38 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 23 Oct 2022 18:38:01 +0000 (21:38 +0300)
cfgfile.cpp
custom.cpp
od-win32/direct3d11.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/winuaechangelog.txt

index 7bd8565a62efbb0104c3529883e2e1e9447fd9c8..9bee6815cb62b59b8258c9ad7fca9774a7bd43cf 100644 (file)
@@ -361,6 +361,7 @@ static const TCHAR *obsolete[] = {
        _T("gfx_hdr"),
 
        _T("bogomem_fast"),
+       _T("sound_cdaudio"),
 
        NULL
 };
index 2e1c0a2f7517f58bd31d1557f4621cd802479027..d72ff789c344f9ce4690b7b8c8dc97983c853627 100644 (file)
@@ -8333,9 +8333,9 @@ static void BPLxDAT_next(uae_u32 vv)
        if ((fmode & 3) == 3) {
                fetched_aga[num] = ((uae_u64)last_custom_value << 48) | ((uae_u64)data << 32) | ((uae_u64)data << 16) | data;
        } else if ((fmode & 3) == 2) {
-               fetched_aga[num] = (last_custom_value << 16) | data;
+               fetched_aga[num] = ((uae_u32)last_custom_value << 16) | data;
        } else if ((fmode & 3) == 1) {
-               fetched_aga[num] = (data << 16) | data;
+               fetched_aga[num] = ((uae_u32)data << 16) | data;
        } else {
                fetched_aga[num] = data;
        }
index 1411940f89a6e57dccd6db9e0eea47c27ad3848b..246a2c7d239fe43d08b08a8966c7cc012de557f7 100644 (file)
@@ -3401,7 +3401,7 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t
        IDXGIOutput *adapterOutput;
        DXGI_ADAPTER_DESC1 adesc;
        DXGI_OUTPUT_DESC odesc;
-       unsigned int numModes;
+       unsigned int numModes = 0;
        DXGI_MODE_DESC1 *displayModeList;
        DXGI_ADAPTER_DESC adapterDesc;
 
@@ -3734,6 +3734,14 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t
        static const char cname[] = "context";
        d3d->m_device->SetPrivateData(WKPDID_D3DDebugObjectName, sizeof(dname) - 1, dname);
        d3d->m_deviceContext->SetPrivateData(WKPDID_D3DDebugObjectName, sizeof(cname) - 1, cname);
+       d3d->m_device->QueryInterface(IID_ID3D11InfoQueue, (void **)&d3d->m_debugInfoQueue);
+       if (0 && d3d->m_debugInfoQueue)
+       {
+               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, TRUE);
+               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, TRUE);
+               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_WARNING, TRUE);
+       }
+       d3d->m_device->QueryInterface(IID_ID3D11Debug, (void **)&d3d->m_debug);
 #endif
 
        write_log(_T("D3D11CreateDevice succeeded with level %d.%d. %s.\n"), outlevel >> 12, (outlevel >> 8) & 15,
@@ -3753,17 +3761,6 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t
                return -1;
        }
 
-#ifndef NDEBUG
-       d3d->m_device->QueryInterface(IID_ID3D11InfoQueue, (void**)&d3d->m_debugInfoQueue);
-       if (0 && d3d->m_debugInfoQueue)
-       {
-               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, TRUE);
-               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, TRUE);
-               d3d->m_debugInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_WARNING, TRUE);
-       }
-       d3d->m_device->QueryInterface(IID_ID3D11Debug, (void**)&d3d->m_debug);
-#endif
-
        // Initialize the swap chain description.
        ZeroMemory(&d3d->swapChainDesc, sizeof(d3d->swapChainDesc));
 
index 9e838a42f71ed2bf77ddfb8a057b189f3964ed01..022da6ea954569ff295e4a1f593c8ca313369149 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 0
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("Beta 2")
+#define WINUAEBETA _T("Beta 3")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2022, 10, 8)
+#define WINUAEDATE MAKEBD(2022, 10, 23)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index d3ce3fc4c9da4f276d5c8b95cb0c77a2fa8c9307..8e260fcf2620a12360cdc1f27ea1cd6814e2764b 100644 (file)
@@ -3992,6 +3992,7 @@ retry:
                                changed_prefs.gfx_api = currprefs.gfx_api = 1;
                                d3d_select(&currprefs);
                                error_log(_T("Direct3D11 failed to initialize ('%s'), falling back to Direct3D9."), err);
+                               errv = 0;
                                err = D3D_init(mon->hAmigaWnd, mon->monitor_id, mon->currentmode.native_width, mon->currentmode.native_height,
                                        mon->currentmode.current_depth, &mon->currentmode.freq, fmh, fmv, &errv);
                        }
@@ -4000,12 +4001,20 @@ retry:
                                if (isfullscreen() > 0) {
                                        int idx = mon->screen_is_picasso ? 1 : 0;
                                        changed_prefs.gfx_apmode[idx].gfx_fullscreen = currprefs.gfx_apmode[idx].gfx_fullscreen = GFX_FULLWINDOW;
+                                       goto retry;
                                } else if (currprefs.gfx_api > 0) {
-                                       error_log(_T("Direct3D9 failed to initialize ('%s'), falling back to GDI."), err);
                                        changed_prefs.gfx_api = currprefs.gfx_api = 0;
+                                       changed_prefs.color_mode = currprefs.color_mode = 5;
                                        changed_prefs.gf[ad->picasso_on].gfx_filter = currprefs.gf[ad->picasso_on].gfx_filter = 1;
+                                       update_gfxparams(mon);
                                        d3d_select(&currprefs);
-                                       goto retry;
+                                       error_log(_T("Direct3D9/11 failed to initialize ('%s'), falling back to GDI."), err);
+                                       errv = 0;
+                                       err = D3D_init(mon->hAmigaWnd, mon->monitor_id, mon->currentmode.native_width, mon->currentmode.native_height,
+                                               mon->currentmode.current_depth, &mon->currentmode.freq, fmh, fmv, &errv);
+                                       if (errv) {
+                                               error_log(_T("Failed to initialize any rendering modes."));
+                                       }
                                }
                                mon->currentmode.current_depth = mon->currentmode.native_depth;
                                gfxmode_reset(mon->monitor_id);
index 3cac2dccaa747801aecfdf4e160cde38abd3fa22..bef60cd50353bac211d6b20f97c709c3b95623c0 100644 (file)
@@ -1,5 +1,44 @@
 
 
+- 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.
+- GDI mode didn't force 32-bit screen depth mode.
+- FloppyBridge uae-configuration change now really updates all internal variables.
+- Screenshots didn't work if 256 color checkbox was not ticked (tried to create 24-bit palette indexed image)
+- DMACONR blitter status 1 cycle delay was broken (Circle scroller / UFO)
+- Enabling DMA debugger and then returning to emulator continuously reported conflicts until next frame had finished. DMA debugger init was changed but tables were not fully initialized.
+- Keyboard reset now behaves more like real hardware. Press keys, hardware gets reset (if keyboard reset warning is not active), reset continues only when at least 1 key is released. If all keys are kept pressed more than 5 seconds: do hard reset.
+- DMA debugger CIA access line includes also E-clock state (0, 2, <data access info>, 6, 8) and any "wasted" cycles needed to sync with E-clock are marked with "-".
+- DMA debugger is wider. More space for future features.
+- New cputester tests done, for example all SR modification instructions (including STOP) tested with both trace + pending interrupt. No errors found.
+- If STOP was executed without trace active and STOP enabled trace, STOP still stops normally and only interrupt can wake it up. (b1)
+- Blitter busy bit read incorrectly as blit not busy if blitter was in non-nasty mode and not line mode and CPU stole second to last D channel slot.
+- Removed all remaining Windows 7/Vista checks (from days when XP and Vista was still supported).
+- "Remove interlace artifacts" is broken. Will be fixed later.
+
+68000 IPL notes:
+
+"IPL check/sample position" = when 68000 microcode detects if IPL line has changed, this depends on instruction and addressing mode. This affects when new interrupt starts, if it happens early enough during current instruction, interrupt can start when current instruction ends but if it happens later, following instruction is executed first.
+
+This can affect programs that for example enable interrupts and interrupt is already pending. Depending on current and following instruction, interrupt can start immediately or after next instruction. It can even break bad programs.
+
+IPL check is most commonly at the beginning of instruction after EA calculations or when last prefetch starts.
+- MOVEM.x <regs>,(An)+ checks IPL at the beginning of instruction. All other MOVEM addressing modes check it at the end of instruction.
+- MUL check IPL at the beginning of instruction, DIV check it at the end of instruction.
+- DIVS is special, if dividend is negative and divisor is positive, IPL check position is 2 cycles earlier (4 vs 6 cycles counted from end of instruction).
+- MOVEs are quite complex, common fetch position is when data is read but it really depends on source and destination EA and size. One exception are absolute short/long destinations which always have IPL check at the same position. Word moves are also mostly similar except immediate source and (an), (an)+ and -(an) destinations.
+- If instruction generates exception (including trap, divide by zero, chk), IPL is not checked. IPL check is always after exception checks.
+- Interrupt exception processing seems to check IPL at least 2 cycles earlier than non-interrupt exceptions.
+- If IPL check is at mid memory access, any wait state (DMA channel steals cycles from CPU) will also delay IPL check. Same also happens if memory access is using 6800 cycle (CIA access), IPL check is at the end of CIA access cycle.
+
+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)
 - Internal emulated serial devices (for example laserdisc player) data transfer was unstable.
 - Z3 hardware emulated RTG board autoconfig size data was fixed and then was broken again.
@@ -15,7 +54,6 @@ Pre-4.9.2 fixes:
 - Box art path detection didn't parse cdimage0 paths correctly if path had "," character. ("," needs special case because path can be optionally followed by ",delay")
 - If only one autoconfig device was enabled and it was removed when emulator was running and then system was hard reset: old autoconfig data was not cleared causing disabled device to get misdetected by AmigaOS which usually caused hang.
 
-
 Beta 1:
 
 4.9.9 (or something like that) beta series start soon (1-2 weeks).