_T(" W <addr> 'string' Write into Amiga memory.\n")
_T(" Wf <addr> <endaddr> <bytes or string like above>, fill memory.\n")
_T(" Wc <addr> <endaddr> <destaddr>, copy memory.\n")
- _T(" w <num> <address> <length> <R/W/I/F/C> [<value>[.x]] (read/write/opcode/freeze/mustchange).\n")
+ _T(" w <num> <address> <length> <R/W/I> <F/C> [<value>[.x]] (read/write/opcode) (freeze/mustchange).\n")
_T(" Add/remove memory watchpoints.\n")
_T(" wd [<0-1>] Enable illegal access logger. 1 = enable break.\n")
_T(" L <file> <addr> [<n>] Load a block of Amiga memory.\n")
Client : Cloanto Corporation
Support : http://www.retroplatform.com
Legal : CONFIDENTIAL TRADE SECRET PROPERTY OF CLOANTO CORPORATION
- : Copyright © Cloanto Corporation 2007-2017.
+ : Copyright © Cloanto Corporation 2007-2018.
: All rights reserved, except where licensed,
: assigned or transferred by contract.
Authors : os, m
Created : 2007-08-23 10:08:25
- Updated : 2017-09-10 12:13:00
+ Updated : 2018-10-04 16:40:44
Comment : Reference for RetroPlatformIPC.h (RP Player interprocess communication include file)
*****************************************************************************/
Guest-to-Host Messages
****************************************************************************
-Message:
- RP_IPC_TO_HOST_REGISTER
-Description:
- this is a private message and is automatically sent
- by the RPInitializeGuest() function
- to register the caller as a RetroPlatform guest
-
-
Notes about startup:
>>>
At startup time, the guest sends initialization messages
or to notify the host about the status of a joystick (multiple buttons);
device LED indicators (e.g. the disk activity ones, not the joystick ones)
can also be "blinked", i.e. the host will turn the
- LED on and then off again after the specified amount of time
+ LED on and then off again after the specified amount of time;
+ being a low-priority notification with no response from the host,
+ it is advised that guests send RP_IPC_TO_HOST_DEVICEACTIVITY
+ using the RPPostMessage() function, instead of the RPSendMessage() function
Data sent:
WPARAM = device category (RP_DEVICE_* value) and device number
combined with the MAKEWORD macro;
none
-Message:
- RP_IPC_TO_HOST_PREPROCESSKEY
-Description:
- message sent by the keyboard handling functions;
- guests are not supposed to send it directly
-Data sent:
- -
-Response:
- -
-
-
-Message:
- RP_IPC_TO_HOST_PROCESSKEY
-Description:
- message sent by the keyboard handling functions;
- guests are not supposed to send it directly
-Data sent:
- -
-Response:
- -
-
-
Message:
RP_IPC_TO_HOST_KEYBOARDLAYOUT
Description:
none
+Message:
+ RP_IPC_TO_HOST_RAWINPUT_EVENT
+Description:
+ this message is sent to forward to the host
+ the RawInput mouse buttons events received by the guest
+ (forwarding should be done only when the guest window is focused
+ and even when the emulation is paused);
+ events are forwarded when the header.dwType field
+ of the RAWINPUT structure is RIM_TYPEMOUSE,
+ and when data.mouse.usButtonFlags is different from 0;
+ the value returned as response must be used
+ instead of the original data.mouse.usButtonFlags value
+ (i.e. the guest should ignore the event when 0 is returned,
+ or consider a different button pressed/released,
+ when the returned value differs from data.mouse.usButtonFlags);
+ NOTE: guests that forward events via RP_IPC_TO_HOST_RAWINPUT_EVENT
+ must set the RP_FEATURE_RAWINPUT_EVENT flag
+ in the startup RP_IPC_TO_HOST_FEATURES message
+Data sent:
+ LPARAM = the LPARAM received with the WM_INPUT message
+Response:
+ RawInput RI_MOUSE_BUTTON_* flags or 0
+
+
Messages:
+ RP_IPC_TO_HOST_PRIVATE_REGISTER
RP_IPC_TO_HOST_PRIVATE_SHAREDEVENT
RP_IPC_TO_HOST_PRIVATE_TYPECLIPDONE
RP_IPC_TO_HOST_PRIVATE_KEYEVENT
RP_IPC_TO_HOST_PRIVATE_GUESTEVENT
+ RP_IPC_TO_HOST_PRIVATE_KEYPROMPT
+ RP_IPC_TO_HOST_PRIVATE_CLOSEKBDWIN
Description:
these are private messages, sent by code in RPGuest.dll
LRESULT = 1 if the guest acknowledged the command or 0 otherwise
+Message:
+ RP_IPC_TO_GUEST_SCREENOVERLAY
+Description:
+ This message sets or clears 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).
+ When the lWidth and lHeight fields of the RPSCREENOVERLAY structure
+ are set to a non-zero value, an overlay is defined or updated;
+ if the two fields are set to 0, the overlay specified
+ by the dwIndex field is removed from screen
+Data sent:
+ pData = a RPSCREENOVERLAY structure containing overlay information and image data
+Response:
+ LRESULT = 1, if the guest successfully executed the command, or 0 otherwise
+
+
Messages:
RP_IPC_TO_GUEST_PRIVATE_STARTUP
RP_IPC_TO_GUEST_PRIVATE_TYPECLIP
RP_IPC_TO_GUEST_PRIVATE_CANESCAPE
RP_IPC_TO_GUEST_PRIVATE_LOGGING
RP_IPC_TO_GUEST_PRIVATE_INPUTDEVICES
+ RP_IPC_TO_GUEST_PRIVATE_NOKEYPROMPT
+ RP_IPC_TO_GUEST_PRIVATE_KEYBOARDWINDOW
Description:
these are private messages, received by code in RPGuest.dll;
they never reach the message function in guest code
Name : RetroPlatformIPC.h
Project : RetroPlatform Player
Support : http://www.retroplatform.com
- Legal : Copyright 2007-2017 Cloanto Corporation - All rights reserved. This
+ Legal : Copyright 2007-2018 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-07-08 10:54:00
+ Updated : 2018-10-04 16:26:12
Comment : RetroPlatform Player interprocess communication include file
*****************************************************************************/
#include <windows.h>
-#define RETROPLATFORM_API_VER "7.3"
+#define RETROPLATFORM_API_VER "7.5"
#define RETROPLATFORM_API_VER_MAJOR 7
-#define RETROPLATFORM_API_VER_MINOR 3
+#define RETROPLATFORM_API_VER_MINOR 5
#define RPIPC_HostWndClass "RetroPlatformHost%s"
#define RPIPC_GuestWndClass "RetroPlatformGuest%d"
#define RP_IPC_TO_HOST_PRIVATE_GUESTEVENT (WM_APP + 34) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_HOST_PRIVATE_KEYREMINDER (WM_APP + 35) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_HOST_RAWINPUT_EVENT (WM_APP + 36) // introduced in RetroPlatform API 7.3
+#define RP_IPC_TO_HOST_PRIVATE_CLOSEKBDWIN (WM_APP + 37) // introduced in RetroPlatform API 7.4
// ****************************************************************************
// Host-to-Guest Messages
#define RP_IPC_TO_GUEST_PRIVATE_LOGGING (WM_APP + 227) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_GUEST_PRIVATE_INPUTDEVICES (WM_APP + 228) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_GUEST_PRIVATE_KEYREMINDER (WM_APP + 229) // introduced in RetroPlatform API 7.2
+#define RP_IPC_TO_GUEST_PRIVATE_KEYBOARDWINDOW (WM_APP + 230) // introduced in RetroPlatform API 7.4
+#define RP_IPC_TO_GUEST_SCREENOVERLAY (WM_APP + 231) // introduced in RetroPlatform API 7.5
// ****************************************************************************
// Message Data Structures and Defines
#define PRIVATETYPECLIP_SUCCEDED 2
#define PRIVATETYPECLIP_INPROGRESS 3 // a RP_IPC_TO_HOST_PRIVATE_TYPECLIPDONE will be sent when done
+
+// RPScreenOverlay (used by RP_IPC_TO_GUEST_SCREENOVERLAY)
+
+typedef struct RPScreenOverlay
+{
+ DWORD dwIndex; // overlay index
+ LONG lLeft; // horizontal offset from screen left edge
+ LONG lTop; // vertical offset from screen top edge
+ LONG lWidth; // image width (if set to 0, clears a previously set overlay)
+ LONG lHeight; // image height (if set to 0, clears a previously set overlay)
+ DWORD dwFormat; // pixel format (see RPSOPF_* defines below)
+ BYTE btData[1]; // image data
+} RPSCREENOVERLAY;
+
+// RPSCREENOVERLAY dwFormat
+#define RPSOPF_32BIT_BGRA 0 // 4 bytes per pixel (blue, green, red, alpha)
+
// Legacy Compatibility
#ifndef RP_NO_LEGACY
// Changed in 7.0
#include "gui.h"
#include "keyboard.h"
#include "rp.h"
+#include "direct3d.h"
static int initialized;
static RPGUESTINFO guestinfo;
case RP_IPC_TO_GUEST_GUESTAPIVERSION : return _T("RP_IPC_TO_GUEST_GUESTAPIVERSION");
case RP_IPC_TO_GUEST_SHOWOPTIONS: return _T("RP_IPC_TO_GUEST_SHOWOPTIONS");
case RP_IPC_TO_GUEST_DEVICEACTIVITY: return _T("RP_IPC_TO_GUEST_DEVICEACTIVITY");
+ case RP_IPC_TO_GUEST_SCREENOVERLAY: return _T("RP_IPC_TO_GUEST_SCREENOVERLAY");
default: return _T("UNKNOWN");
}
}
xfree(s);
}
+static int screenoverlay(LPCVOID pData)
+{
+ struct RPScreenOverlay *rpo = (struct RPScreenOverlay*)pData;
+ struct extoverlay eo = { 0 };
+ if (!D3D_extoverlay)
+ return 0;
+ if (rpo->dwFormat != RPSOPF_32BIT_BGRA)
+ return 0;
+ eo.idx = rpo->dwIndex;
+ eo.xpos = rpo->lLeft;
+ eo.ypos = rpo->lTop;
+ eo.width = rpo->lWidth;
+ eo.height = rpo->lHeight;
+ eo.data = rpo->btData;
+ return D3D_extoverlay(&eo) ? 1 : 0;
+}
+
static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM lParam,
LPCVOID pData, DWORD dwDataSize, LPARAM lMsgFunctionParam)
{
struct AmigaMonitor *mon = &AMonitors[0];
if (log_rp & 1) {
- write_log (_T("RPFUNC(%s [%d], %08x, %08x, %08x, %d, %08x)\n"),
+ write_log (_T("RPFUNC(%s [%d], %08x, %08x, %p, %d, %08x)\n"),
getmsg (uMessage), uMessage - WM_APP, wParam, lParam, pData, dwDataSize, lMsgFunctionParam);
if (uMessage == RP_IPC_TO_GUEST_DEVICECONTENT) {
struct RPDeviceContent *dc = (struct RPDeviceContent*)pData;
return 1;
case RP_IPC_TO_GUEST_DEVICEACTIVITY:
return deviceactivity(wParam, lParam);
+ case RP_IPC_TO_GUEST_SCREENOVERLAY:
+ return screenoverlay(pData);
}
return FALSE;
}
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("6")
+#define WINUAEBETA _T("7")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2018, 9, 22)
+#define WINUAEDATE MAKEBD(2018, 10, 6)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
\r
\r
+\r
+Beta 7:\r
+\r
+- If disk image's track size is less than 66% of nominal 2us track, assume it is using 4us (GCR) bit rate.\r
+- Added option that catches JIT crashes that happen when already translated code jumps to non-existing memory causing interpretetive emulation to access non-existing RAM (for example JSR (An) was already translated but due to program bug, later call contains garbage in An) Logs a message and then generates fake exception 2 (if PC was even) or 3 (if PC was odd). This is not fully safe option because it is practically impossible (without slowing down JIT which would be against the point of JIT) to detect if crash is due to bad CPU PC or address registers or due to real bug causing access fault that now gets catched and not causing crash..\r
+- Recording from hardware emulated RTG board always recorded internal resolution.\r
+- Emulated undocumented AGA 64 pixel wide sprite feature: if sprite FMODE is lowered when sprite's first 32 pixels are being drawn, matching part in last 32 pixels will get zeroed.\r
+- AGA sprite's width is decided and stored when SPRxDATx is written to, if sprite FMODE is changed after SPRxDATx write, sprite width won't change on screen except in above 64 pixel wide special case. (Previously used current FMODE value)\r
+- Added vertical offset option to D3D scanlines.\r
+- 68030 MMU rejected PTEST/PMOVE with EA mode 6 and generated F-line exception.\r
+- 68030 MMU PTEST levels 1-7 does not check TTRs.\r
+- If 68030/040/060 config has data cache emulation enabled but MMU emulation is not enabled: force chip ram as non-data cacheable.\r
+- Magic mouse uncapture (uncapture when moving against window edges) now only uncaptures if no buttons are pressed.\r
+\r
Beta 6:\r
\r
- Video recording from hardware emulated graphics boards recorded only black screen.\r
#define X86_IO_PORT_DEBUG 0
#define X86_DEBUG_SPECIAL_IO 0
#define FLOPPY_DEBUG 0
-#define EMS_DEBUG 1
+#define EMS_DEBUG 0
#define DEBUG_DMA 0
#define DEBUG_PIT 0