From f69cd15517e6734f96189f40701f643c050d9cb7 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 16 Feb 2019 17:59:40 +0200 Subject: [PATCH] 4200b2 --- od-win32/cloanto/RetroPlatformIPC-doc.txt | 39 ++++++++--- od-win32/cloanto/RetroPlatformIPC.h | 17 +++-- od-win32/dxwrap.h | 3 + od-win32/resources/resource.h | 3 +- od-win32/resources/winuae.rc | 3 +- od-win32/rp.cpp | 7 +- od-win32/win32.cpp | 32 ++++----- od-win32/win32.h | 4 +- od-win32/winuaechangelog.txt | 79 +++++++++++++++++++++++ 9 files changed, 148 insertions(+), 39 deletions(-) diff --git a/od-win32/cloanto/RetroPlatformIPC-doc.txt b/od-win32/cloanto/RetroPlatformIPC-doc.txt index 5be32825..6523eeb5 100644 --- a/od-win32/cloanto/RetroPlatformIPC-doc.txt +++ b/od-win32/cloanto/RetroPlatformIPC-doc.txt @@ -4,12 +4,12 @@ Client : Cloanto Corporation Support : http://www.retroplatform.com Legal : CONFIDENTIAL TRADE SECRET PROPERTY OF CLOANTO CORPORATION - : Copyright © Cloanto Corporation 2007-2018. + : Copyright © Cloanto Corporation 2007-2019. : All rights reserved, except where licensed, : assigned or transferred by contract. Authors : os, m Created : 2007-08-23 10:08:25 - Updated : 2018-10-19 16:01:23 + Updated : 2019-01-27 10:56:32 Comment : Reference for RetroPlatformIPC.h (RP Player interprocess communication include file) *****************************************************************************/ @@ -501,6 +501,8 @@ Description: the guest sends this message to forward mouse move events; mouse events forwarding is off by default and is enabled by the RP_IPC_TO_GUEST_SENDMOUSEEVENTS message; + when mouse events are forwarded to the host, + they are not used by the emulated system; the screen coordinate range is the same used for screen overlays (e.g. lLeft and lTop fields of the RPSCREENOVERLAY structure) Data sent: @@ -515,6 +517,8 @@ Description: the guest sends this message to forward mouse button events; mouse events forwarding is off by default and is enabled by the RP_IPC_TO_GUEST_SENDMOUSEEVENTS message; + when mouse events are forwarded to the host, + they are not used by the emulated system; the screen coordinate range is the same used for screen overlays (e.g. lLeft and lTop fields of the RPSCREENOVERLAY structure) Data sent: @@ -601,7 +605,8 @@ Message: Description: the RP_IPC_TO_GUEST_PAUSE message sets the guest into pause mode or resumes the guest from pause mode; - note: when paused, the guest should release the mouse (if captured); + note: when paused, the guest should release the mouse (if captured) and, + in fullwindow mode, the Windows mouse cursor should be made visible; during pause mode, the mouse should never be captured Data sent: WPARAM = non-zero to set the guest into pause mode @@ -846,8 +851,10 @@ Message: Description: This message creates a screen overlay (an image that the guest renders on top of the emulated system screen). - Multiple screen overlays can be set and simultaneously displayed - on the screen (see the dwIndex field of the RPSCREENOVERLAY structure). + Multiple screen overlays can be simultaneously displayed on the screen, + and the dwIndex field of the RPSCREENOVERLAY structure determines + their priority (overlays with higher index are displayed + in front of overlays with lower index); NOTE: guests that support screen overlays must set the RP_FEATURE_SCREENOVERLAY flag in the startup RP_IPC_TO_HOST_FEATURES message. Data sent: @@ -861,8 +868,8 @@ Message: Description: This message moves a previously defined screen overlay to a specified position. Data sent: - WPARAM = screen overlay index - LPARAM = screen coordinates combined with the MAKELONG macro (i.e. MAKELONG(x,y)) + WPARAM = screen overlay index + LPARAM = screen coordinates combined with the MAKELONG macro (i.e. MAKELONG(x,y)) Response: LRESULT = 1, if the guest successfully executed the command, or 0 otherwise @@ -872,7 +879,7 @@ Message: Description: This message deletes a previously defined screen overlay. Data sent: - WPARAM = screen overlay index + WPARAM = screen overlay index Response: LRESULT = 1, if the guest successfully executed the command, or 0 otherwise @@ -886,7 +893,20 @@ Description: see RP_IPC_TO_HOST_MOUSEMOVE and RP_IPC_TO_HOST_MOUSEBUTTON for additional information. Data sent: - WPARAM = set to 1 to enable mouse events forwarding, or 0 to disable it + WPARAM = set to 1 to enable mouse events forwarding, or 0 to disable it +Response: + LRESULT = 1 if the guest acknowledged the command or 0 otherwise + + +Message: + RP_IPC_TO_GUEST_SHOWDEBUGGER +Description: + This message is used to ask the guest to open its debugger dialog. + If the dialog pauses the emulation, the guest should send a RP_IPC_TO_HOST_PAUSE message + to notify the host about that (and when the emulation is resumed, + at dialog-close time, a new RP_IPC_TO_HOST_PAUSE notifications should be sent). +Data sent: + None Response: LRESULT = 1 if the guest acknowledged the command or 0 otherwise @@ -901,6 +921,7 @@ Messages: RP_IPC_TO_GUEST_PRIVATE_NOKEYPROMPT RP_IPC_TO_GUEST_PRIVATE_KEYBOARDWINDOW RP_IPC_TO_GUEST_PRIVATE_MENUMODE + RP_IPC_TO_GUEST_PRIVATE_SETFRGWINDOW Description: these are private messages, received by code in RPGuest.dll; they never reach the message function in guest code diff --git a/od-win32/cloanto/RetroPlatformIPC.h b/od-win32/cloanto/RetroPlatformIPC.h index 39b7f02d..c9e8227c 100644 --- a/od-win32/cloanto/RetroPlatformIPC.h +++ b/od-win32/cloanto/RetroPlatformIPC.h @@ -2,14 +2,14 @@ Name : RetroPlatformIPC.h Project : RetroPlatform Player Support : http://www.retroplatform.com - Legal : Copyright 2007-2018 Cloanto Corporation - All rights reserved. This + Legal : Copyright 2007-2019 Cloanto Corporation - All rights reserved. This : file is multi-licensed under the terms of the Mozilla Public License : version 2.0 as published by Mozilla Corporation and the GNU General : Public License, version 2 or later, as published by the Free : Software Foundation. Authors : os, m Created : 2007-08-27 13:55:49 - Updated : 2018-10-19 15:58:12 + Updated : 2019-01-27 10:47:18 Comment : RetroPlatform Player interprocess communication include file *****************************************************************************/ @@ -18,9 +18,9 @@ #include -#define RETROPLATFORM_API_VER "7.5" +#define RETROPLATFORM_API_VER "7.6" #define RETROPLATFORM_API_VER_MAJOR 7 -#define RETROPLATFORM_API_VER_MINOR 5 +#define RETROPLATFORM_API_VER_MINOR 6 #define RPIPC_HostWndClass "RetroPlatformHost%s" #define RPIPC_GuestWndClass "RetroPlatformGuest%d" @@ -105,6 +105,8 @@ #define RP_IPC_TO_GUEST_DELETESCREENOVERLAY (WM_APP + 233) // introduced in RetroPlatform API 7.5 #define RP_IPC_TO_GUEST_SENDMOUSEEVENTS (WM_APP + 234) // introduced in RetroPlatform API 7.5 #define RP_IPC_TO_GUEST_PRIVATE_MENUMODE (WM_APP + 235) // introduced in RetroPlatform API 7.5 +#define RP_IPC_TO_GUEST_PRIVATE_SETFRGWINDOW (WM_APP + 236) // introduced in RetroPlatform API 7.5 +#define RP_IPC_TO_GUEST_SHOWDEBUGGER (WM_APP + 237) // introduced in RetroPlatform API 7.6 // **************************************************************************** // Message Data Structures and Defines @@ -200,8 +202,8 @@ typedef struct RPScreenMode // // Integer vs. subpixel scaling, and stretching with or without original ratio // -// By default, the guest is only expected to be able to scale (resize) the window by an integer number of times, e.g. 1X, 2X, 3X, etc., as indicated in RP_FEATURE_SCREEN... -// This means that when going to fullscreen mode (RP_SCREENMODE_SCALE_MAX) or to a window mode with lTargetWidth and lTargetHeight set (RP_SCREENMODE_SCALE_TARGET), the content will be an integer number of times the original, and surrounded by black bars if necessary. Integer scaling is thus the default behavior, and it can be modified by setting RP_SCREENMODE_SCALING_SUBPIXEL and RP_SCREENMODE_SCALING_STRETCH. +// By default, the guest is only expected to be able to scale (resize, units being guest to host pixels) the emulated screen by an integer number of times, e.g. 1X, 2X, 3X, etc., as indicated in RP_FEATURE_SCREEN... +// This means that when going to fullscreen mode (RP_SCREENMODE_SCALE_MAX) or to a window mode with lTargetWidth and lTargetHeight set (RP_SCREENMODE_SCALE_TARGET), the content will be an integer number of times the original number of pixels, and surrounded by black bars if necessary. Integer scaling is thus the default behavior, and it can be modified by setting RP_SCREENMODE_SCALING_SUBPIXEL and RP_SCREENMODE_SCALING_STRETCH. // // In a known-size target (e.g. fullscreen), unless RP_SCREENMODE_SCALING_SUBPIXEL or RP_SCREENMODE_SCALING_STRETCH are set, there may be up to four black bars to fill any unused space. // @@ -258,7 +260,8 @@ typedef struct RPScreenMode // // If the user wants to adjust clipping, or for automated grabs and calculations, it is possible to set RP_CLIPFLAGS_NOCLIP, which will widen the window to the maximum (within lTargetWidth+lTargetHeight/fullscreen constraints). // -// Whenever the guest sets or changes the "container" window size or scaling factor (initially, or due to a command it receives, or due to Amiga-sourced changes), it sends an RPScreenMode update to the host. +// Both in fullscreen and in window mode, whenever the guest sets or changes the net window size or the scaling factor (initially, or due to a command it receives, or due to Amiga-sourced changes), it sends an RPScreenMode update to the host. This is useful also in fullscreen mode, as it allows to display the appropriate scaling options to return in window mode. + // // In window mode, if no lTargetWidth and lTargetHeight are set, when the host asks for a change in clipping (net content size), the host window size will be adjusted taking into account the current integer multiplication factor. // diff --git a/od-win32/dxwrap.h b/od-win32/dxwrap.h index c29e56fa..932a11d9 100644 --- a/od-win32/dxwrap.h +++ b/od-win32/dxwrap.h @@ -114,6 +114,9 @@ struct AmigaMonitor { int mouseposx, mouseposy; int windowmouse_max_w; int windowmouse_max_h; + int ratio_width, ratio_height; + int ratio_adjust_x, ratio_adjust_y; + bool ratio_sizing; int prevsbheight; bool render_ok, wait_render; diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index e9f458e0..c59ce3a7 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -909,7 +909,7 @@ #define IDC_FILTERSLR 1625 #define IDC_FILTERHZMULT 1626 #define IDC_FILTERMODE 1627 -#define IDC_FILTERFILTER 1628 +#define IDC_FILTERFILTERH 1628 #define IDC_FILTERDEFAULT 1629 #define IDC_FILTERXTRA 1630 #define IDC_INPUTDEADZONE 1630 @@ -936,6 +936,7 @@ #define IDC_VOLUME_BOOTPRI 1638 #define IDC_FILTEROVERLAYTYPE 1638 #define IDC_KBLED1 1639 +#define IDC_FILTERFILTERV 1639 #define IDC_KBLED2 1640 #define IDC_SOUNDFILTER 1640 #define IDC_KBLED3 1641 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 28bb43ac..e7e2a316 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -918,7 +918,7 @@ BEGIN GROUPBOX "Filter Settings",-1,1,1,393,160 COMBOBOX IDC_FILTERMODE,9,31,153,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_FILTERSTACK,167,31,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERFILTER,199,31,63,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_FILTERFILTERH,199,31,29,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_FILTEROVERLAYTYPE,9,52,119,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_FILTEROVERLAY,134,52,129,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_FILTER_NATIVERTG,268,12,120,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP @@ -955,6 +955,7 @@ BEGIN PUSHBUTTON "Load",IDC_FILTERPRESETLOAD,205,272,55,14 PUSHBUTTON "Save",IDC_FILTERPRESETSAVE,265,272,55,14 PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,272,55,14 + COMBOBOX IDC_FILTERFILTERV,233,31,29,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP END IDD_HARDDRIVE DIALOGEX 0, 0, 397, 219 diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index 393c0666..17dbcedd 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -35,6 +35,7 @@ #include "keyboard.h" #include "rp.h" #include "direct3d.h" +#include "debug.h" static int initialized; static RPGUESTINFO guestinfo; @@ -158,6 +159,7 @@ static const TCHAR *getmsg (int msg) case RP_IPC_TO_GUEST_DELETESCREENOVERLAY: return _T("RP_IPC_TO_GUEST_DELETESCREENOVERLAY"); case RP_IPC_TO_GUEST_MOVESCREENOVERLAY: return _T("RP_IPC_TO_GUEST_MOVESCREENOVERLAY"); case RP_IPC_TO_GUEST_SENDMOUSEEVENTS: return _T("RP_IPC_TO_GUEST_SENDMOUSEEVENTS"); + case RP_IPC_TO_GUEST_SHOWDEBUGGER: return _T("RP_IPC_TO_GUEST_SHOWDEBUGGER"); default: return _T("UNKNOWN"); } } @@ -1462,7 +1464,7 @@ static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM } case RP_IPC_TO_GUEST_GUESTAPIVERSION: { - return MAKELONG(7, 1); + return MAKELONG(7, 6); } case RP_IPC_TO_GUEST_SHOWOPTIONS: inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); @@ -1482,6 +1484,9 @@ static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM RPPostMessagex(RP_IPC_TO_HOST_MOUSEMOVE, 0, lp, &guestinfo); } return 1; + case RP_IPC_TO_GUEST_SHOWDEBUGGER: + activate_debugger(); + return 1; } return FALSE; } diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 8f2d4ccd..03daa8ab 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -179,7 +179,6 @@ COLORREF g_dwBackgroundColor; int pause_emulation; static int sound_closed; -static int recapture; static int focus; static int mouseinside; int mouseactive; @@ -968,7 +967,7 @@ static void setmouseactive2(struct AmigaMonitor *mon, int active, bool allowpaus bool isrp = false; #endif - //write_log (_T("setmouseactive %d->%d showcursor=%d focus=%d recap=%d\n"), mouseactive, active, showcursor, focus, recapture); + //write_log (_T("setmouseactive %d->%d showcursor=%d focus=%d\n"), mouseactive, active, showcursor, focus); if (active == 0) releasecapture (mon); @@ -993,7 +992,6 @@ static void setmouseactive2(struct AmigaMonitor *mon, int active, bool allowpaus mon->mouseposx = mon->mouseposy = 0; //write_log (_T("setmouseactive(%d)\n"), active); releasecapture (mon); - recapture = 0; if (isfullscreen () <= 0 && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MAGIC) && currprefs.input_tablet > 0) { if (mousehack_alive ()) @@ -1246,6 +1244,7 @@ void enablecapture(int monid) { if (pause_emulation > 2) return; + //write_log(_T("enablecapture\n")); setmouseactive(monid, 1); if (sound_closed < 0) { resumesoundpaused(); @@ -1258,6 +1257,7 @@ void enablecapture(int monid) void disablecapture(void) { + //write_log(_T("disablecapture\n")); setmouseactive(0, 0); focus = 0; if (currprefs.win32_active_nocapture_pause && sound_closed == 0) { @@ -1358,8 +1358,6 @@ void setmouseactivexy(int monid, int x, int y, int dir) if (mouseactive) { disablecapture (); SetCursorPos (x, y); - if (dir) - recapture = 1; } } @@ -1852,6 +1850,7 @@ static LRESULT CALLBACK AmigaWindowProc(HWND hWnd, UINT message, WPARAM wParam, { case WM_SETFOCUS: + //write_log(_T("WM_SETFOCUS\n")); winuae_active(mon, hWnd, minimized); unsetminimized(mon->monitor_id); dx_check(); @@ -2170,8 +2169,14 @@ static LRESULT CALLBACK AmigaWindowProc(HWND hWnd, UINT message, WPARAM wParam, break; } + case WM_KILLFOCUS: + //write_log(_T("killfocus\n")); + focus = 0; + return 0; + case WM_MOUSELEAVE: mouseinside = false; + //write_log(_T("mouseoutside\n")); return 0; case WM_MOUSEMOVE: @@ -2180,6 +2185,7 @@ static LRESULT CALLBACK AmigaWindowProc(HWND hWnd, UINT message, WPARAM wParam, monitor_off = 0; if (!mouseinside) { + //write_log(_T("mouseinside\n")); TRACKMOUSEEVENT tme = { 0 }; mouseinside = true; tme.cbSize = sizeof tme; @@ -2191,15 +2197,9 @@ static LRESULT CALLBACK AmigaWindowProc(HWND hWnd, UINT message, WPARAM wParam, mx = (signed short)LOWORD(lParam); my = (signed short)HIWORD(lParam); -#if 0 - setmousestate(0, 0, mx, 1); - setmousestate(0, 1, my, 1); - return 0; -#endif - if (log_winmouse) - write_log (_T("WM_MOUSEMOVE MON=%d NUM=%d ACT=%d FOCUS=%d CLIP=%d CAP=%d FS=%d %dx%d %dx%d\n"), - mon->monitor_id, wm, mouseactive, focus, mon_cursorclipped, recapture, isfullscreen (), mx, my, mon->mouseposx, mon->mouseposy); + write_log (_T("WM_MOUSEMOVE MON=%d NUM=%d ACT=%d FOCUS=%d CLIP=%d FS=%d %dx%d %dx%d\n"), + mon->monitor_id, wm, mouseactive, focus, mon_cursorclipped, isfullscreen (), mx, my, mon->mouseposx, mon->mouseposy); if (rp_mouseevent(mx, my, -1, -1)) return 0; @@ -2207,10 +2207,6 @@ static LRESULT CALLBACK AmigaWindowProc(HWND hWnd, UINT message, WPARAM wParam, mx -= mon->mouseposx; my -= mon->mouseposy; - if (recapture && isfullscreen() <= 0) { - enablecapture(mon->monitor_id); - return 0; - } if (wm < 0 && (istablet || currprefs.input_tablet >= TABLET_MOUSEHACK)) { /* absolute */ setmousestate(0, 0, mx, 1); @@ -6431,7 +6427,7 @@ static int parseargs(const TCHAR *argx, const TCHAR *np, const TCHAR *np2) int temp; inipath = getdefaultini(&temp); createbootlog = false; - return 2; + return 1; } if (!_tcscmp(arg, _T("bootlog"))) { createbootlog = true; diff --git a/od-win32/win32.h b/od-win32/win32.h index addf6ff9..c3d06fa6 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("1") +#define WINUAEBETA _T("2") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2019, 1, 27) +#define WINUAEDATE MAKEBD(2019, 2, 16) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 58176089..9ed22332 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,83 @@ + +Beta 2: + +- Adjusted CDTV CD drive read/play startup delays. Fixes Town without no name speech audiotrack play stopping too early. +- Window resizing keeps current window aspect ratio if left or right CTRL is pressed when resize operation starts. +- Separated Filter panel internal texture size multiplier to vertical ands horizontal. Vertical "-" = same as horizontal. +- Magic mouse mode and some other Windows program is active and mouse gets moved over WinUAE window: don't activate window automatically. It can cause side-effect where other program is still getting keyboard input. +- Simply uaegfx overlay rendering optimization, if both RTG and overlay bitmap does not change during frame: don't force full redraw. +- Fixed AGA HAM graphics corruption if same scan line had BPLCON4 non-zero, border sprites enabled and at least one sprite visible in left border and HAM bitplane active. +- Added global memwatch l option, enables invalid access logger: + - Custom registers: unaligned, byte (except $dff002 and $dff006), mirror addresses and non-existing registers. + - Custom registers: detect if any unused bit is written as one to registers like BPLCONx. + - Custom registers: detect if any DMA pointer write access sets invalid address (outside of chip ram address space) + - Detect if any chipset DMA tries to access non-chip RAM memory (checked before address is masked with size of chip ram). + - CIA registers: detect invalid accesses, word accesses, unused register 11, mirror CIA address. + - Anything else needed? + +Beta 1: + +- Bypass indirect memory access function calls (xget()/xput()) and access the memory directly if memory is normal RAM without side-effects (Real fast RAM). Should improve performance slightly in fastest possible non-jit or jit indirect modes. +- GUI listviews column order is now adjustable. Column order and width is stored in registry/ini. Adjustments are reset to defaults if number of columns changes in the future, manual reset to default button in Misc panel. +- Reject all Alt+ windows system menu key shortcuts because invalid shortcuts may generate annoying beep sounds in magic mouse mode. +- Manual configured RAM address text box didn't support addresses larger than $7fffffff. +- Map >256k extended ROM images to $f00000 (not $e00000) if it begins with $1111 identifier. +- KS ROM selection now support hunk and m68k elf executables. Automatically relocated at startup and symbols, if embedded with executable, are loaded to debugger. Image must be rommable but can have multiple sections. Checksum, size field and interrupt vector offsets are automatically appended if final relocated ROM image is smaller than 512k. If final image is larger than 512k, it gets mapped at $a80000-$b7ffff and $f80000 only contains header and vector offsets. This was mainly implemented to make aros m68k ROM debugging less annoying but it probably can be useful for any custom rom development. Source level debugging may be implemented later, DWARF debugging information documentation is not very useful for implementing parser.. +- Added keyboard_handshake= config file entry. If handshake time period (in CCKs, not milliseconds) was less than v, message gets logged. +- Added memwatch point PC parameter, only detect hit if PC equals start of address of instruction that generated the memory access. For trainer internal use. +- Added log (L) only memory watch breakpoint mode, log only hits, don't break to debugger. +- Accelerator board CPU fallback (to mainboard CPU mode) was broken. +- "Add PC drives at startup" enabled and same drive root directory also mounted manually: drive was mounted twice (4.1.0 bug, earlier versions skipped duplicates) +- Added uaegfx Picasso96 overlay/PIP support. +- Added Cirrus Logic SVGA chip overlay/PIP hardware emulation (Picasso IV) +- AVI recording with non-standard refresh rate was reset to default if GUI was entered and exited during recording. Affected recorded audio pitch and sync. +- bsdsocket.library emulation SBTC_RELEASESTRPTR ("release string" = name + version string) was not implemented. +- Fixed sprite x-position before DMA slot(s) (left overscan) emulation bug that caused some partially hidden sprites to completely disappear depending on order of x-coordinates. (3.5) +- 68030 MMU and instruction ending to memory write that causes bus error: bus error exception stacked PC points to following instruction. +- 68020+ prefetch mode debugger H history command returned wrong instruction addresses. +- uae-configuration returned return code 10 even when matching config entry was found. +- Debugger disassembler didn't show scale factor if effective address mode was brief extension format. (broke when 68020+ addressing modes were fixed) +- Added custom ROM selection, 4 slots with manually configurable start and end addresses. Start and end are restricted to 64k boundaries. + +- Added Pacific Peripherals Overdrive SCSI controller emulation and 2 ROM versions. +- Added Harms 3000 Professional 68030 accelerator board which is almost identical to A26x0 but ROM remapping seems to be slightly different. +- Added IVS Trumpcard (non-pro) emulation. +- Added IVS Trumpcard 500AT emulation. +- Trumpcard driver disk devs/*.driver files contain embedded raw boot rom image. If added as Trumpcard/Pro/500AT ROM image file, it will be automatically loaded as ROM image. +- Added ICD Trifecta emulation. + + Overlay/PIP support: +- All Picasso96 RGB and YUV formats supported. (CL hardware supported modes: RGB565, RGB555, YUV422, YUV411. Few weird non-Picasso96 compatible modes are not implemented.) +- Color keying supported (CL hardware limit: 24-bit mode does not support color keying) +- Cirrus Logic hardware supported color key masking (8-bit color key and 8-bit mask, only available in 8-bit modes) is not implemented. +- Cirrus Logic hardware supported chroma key not implemented (Mainly designed for video capturing). +- Scaling supported, uses basic linear scaling. +- Pure software rendering, don't try to open too large video windows. + +Pacific Peripherals Overdrive: +- Possibly first ever A2000 HD controller. +- 5380 based SCSI controller. +- 68440 DMA controller, CPU polls DMA complete register. (SupraDrive 2000 DMA which uses same DMA controller also CPU polls) +- RDB compatible, mostly, for some reason it assumes partition device names are C-strings, not BSTRs which makes device names look quite interesting in AmigaOS. v2.0 supports custom filesystems. +- Both known ROM versions have "SCSI 1.3 (14 Aug 1988)" version string but overdrive.device versions are 1.5 and 2.0. + +IVS Trumpcard: +- 5380 based SCSI controller, byte wide fake DMA. +- Functionally same as Trumpcard Pro except Pro-only long/word wide fake DMA data ports and SCSI ID/status register are not implemented. + +IVS Trumpcard 500AT: +- Usual basic PIO IDE controller. + +ICD Trifecta: +- SCSI and IDE controller (LX), IDE only (EC). Don't select EC, at least 4.2 install disk driver seems to assume SCSI chip is always installed. +- SCSI is DMA capable, FAS216 SCSI controller, Xilinx FPGA based DMA controller. +- IDE is PIO only, uses large MOVEM copy loop. +- Boot ROM is still MIA, tested only with install disk driver. + + +4.1.0 + Beta 13: - Hardware emulated graphics board interrupt was not emulated when gfxboard mode was not (yet) active and refresh mode was not "chipset". (For example Picasso96 + PicassoII+ or PicassoIV hang when switching to gfxboard mode) -- 2.47.3