cfgfile_dwrite_str (f, _T("waiting_blits"), waitblits[p->waiting_blits]);
cfgfile_write_bool (f, _T("ntsc"), p->ntscmode);
cfgfile_write_bool(f, _T("genlock"), p->genlock);
+ cfgfile_dwrite_bool(f, _T("genlock_alpha"), p->genlock_alpha);
cfgfile_dwrite_str(f, _T("genlockmode"), genlockmodes[p->genlock_image]);
cfgfile_dwrite_str(f, _T("genlock_image"), p->genlock_image_file);
cfgfile_dwrite_str(f, _T("genlock_video"), p->genlock_video_file);
|| cfgfile_yesno (option, value, _T("ks_write_enabled"), &p->rom_readwrite)
|| cfgfile_yesno (option, value, _T("ntsc"), &p->ntscmode)
|| cfgfile_yesno (option, value, _T("sana2"), &p->sana2)
- || cfgfile_yesno (option, value, _T("genlock"), &p->genlock)
+ || cfgfile_yesno(option, value, _T("genlock"), &p->genlock)
+ || cfgfile_yesno(option, value, _T("genlock_alpha"), &p->genlock_alpha)
|| cfgfile_yesno(option, value, _T("cpu_compatible"), &p->cpu_compatible)
|| cfgfile_yesno(option, value, _T("cpu_threaded"), &p->cpu_thread)
|| cfgfile_yesno(option, value, _T("cpu_24bit_addressing"), &p->address_space_24)
} else if (romtype == ROMTYPE_x86_VGA) {
romname = _T("");
}
- addbcromtype(p, romtype, romname, NULL, devnum);
+ addbcromtype(p, romtype, false, romname, devnum);
devnum++;
}
}
addbcromtype(p, ROMTYPE_NE2KPCMCIA, p->ne2000pcmcianame[0] != 0, NULL, 0);
addbcromtype(p, ROMTYPE_NE2KPCI, p->ne2000pciname[0] != 0, NULL, 0);
- static int restricted_net[] = { ROMTYPE_A2065, ROMTYPE_NE2KPCMCIA, ROMTYPE_NE2KPCI, ROMTYPE_NE2KISA, ROMTYPE_ARIADNE2, 0 };
+ static int restricted_net[] = { ROMTYPE_A2065, ROMTYPE_NE2KPCMCIA, ROMTYPE_NE2KPCI, ROMTYPE_NE2KISA, ROMTYPE_ARIADNE2, ROMTYPE_XSURF, ROMTYPE_XSURF100Z2, ROMTYPE_XSURF100Z3, 0 };
static int restricted_x86[] = { ROMTYPE_A1060, ROMTYPE_A2088, ROMTYPE_A2088T, ROMTYPE_A2286, ROMTYPE_A2386, 0 };
static int restricted_pci[] = { ROMTYPE_GREX, ROMTYPE_MEDIATOR, ROMTYPE_PROMETHEUS, 0 };
romtype_restricted(p, restricted_net);
#ifdef WITH_TOCCATA
sndboard_hsync();
#endif
+ ne2000_hsync();
DISK_hsync ();
audio_hsync ();
CIA_hsync_prehandler ();
#endif
}
+// these really should be dynamically allocated..
void devices_rethink(void)
{
rethink_cias ();
#ifdef WITH_TOCCATA
sndboard_rethink();
#endif
+ rethink_ne2000();
rethink_gayle ();
idecontroller_rethink();
rethink_uae_int();
#if defined (PARALLEL_PORT)
initparallel ();
#endif
+ ne2000_reset();
native2amiga_reset ();
dongle_reset ();
sampler_init ();
#ifdef RETROPLATFORM
rp_pause(pause_emulation);
#endif
- pausevideograb(true);
+ pausevideograb(1);
}
void devices_unpause(void)
#ifdef WITH_PPC
uae_ppc_pause(0);
#endif
- pausevideograb(false);
+ pausevideograb(0);
}
bool genlock;
int genlock_image;
int genlock_mix;
+ bool genlock_alpha;
TCHAR genlock_image_file[MAX_DPATH];
TCHAR genlock_video_file[MAX_DPATH];
int monitoremu;
if (dwSize <= sizeof (lpb)) {
if (GetRawInputData ((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof (RAWINPUTHEADER)) == dwSize) {
raw = (RAWINPUT*)lpb;
- handle_rawinput_2 (raw);
+ if (!isguiactive() || (inputdevice_istest() && isguiactive())) {
+ handle_rawinput_2 (raw);
+ }
DefRawInputProc (&raw, 1, sizeof (RAWINPUTHEADER));
} else {
write_log (_T("GetRawInputData(%d) failed, %d\n"), dwSize, GetLastError ());
#define IDC_GENLOCK 1220
#define IDC_COMPATIBLE_FPU 1221
#define IDC_FASTERRTG 1221
+#define IDC_GENLOCK_ALPHA 1221
#define IDC_COMPATIBLE24 1222
#define IDC_SPEED 1223
#define IDC_FPU0 1224
PUSHBUTTON "Cancel",IDCANCEL,201,57,48,15
END
-IDD_CHIPSET DIALOGEX 0, 0, 396, 258
+IDD_CHIPSET DIALOGEX 0, 0, 396, 266
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,32,150,10
CONTROL "Wait for Blitter [] Compatibility hack for programs that don't wait for the blitter correctly, causing graphics corruption if CPU is too fast.",IDC_BLITWAIT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,45,150,10
- CONTROL "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,
+ CONTROL "Genlock connected [] Allow boot sequence to detect genlock.",IDC_GENLOCK,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,209,150,10
LTEXT "Video port display hardware:",IDC_STATIC,237,62,117,15,SS_CENTERIMAGE
COMBOBOX IDC_MONITOREMU,237,80,147,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_GENLOCKMIX,330,209,54,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Cycle-exact (Full) [] The most compatible A500/A1200 emulation mode.",IDC_CYCLEEXACT,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,68,194,10
- GROUPBOX "Genlock",IDC_STATIC,0,195,393,57
- COMBOBOX IDC_GENLOCKFILE,12,231,356,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "...",IDC_GENLOCKFILESELECT,375,230,10,15
+ GROUPBOX "Genlock",IDC_STATIC,0,195,393,66
+ COMBOBOX IDC_GENLOCKFILE,12,241,356,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "...",IDC_GENLOCKFILESELECT,375,240,10,15
+ CONTROL "Include alpha channel in screenshots and video captures.",IDC_GENLOCK_ALPHA,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,226,214,10
END
IDD_CHIPSET2 DIALOGEX 0, 0, 396, 305
IDD_CHIPSET, DIALOG
BEGIN
- BOTTOMMARGIN, 192
+ BOTTOMMARGIN, 258
END
IDD_CHIPSET2, DIALOG
#define USE_XAUDIO 0
+#ifndef _WIN64
+
// only in 8.1+ SDKs
typedef enum _AUDIO_STREAM_CATEGORY {
};
+#else
+
+#define AudioCategory_Media 11
+#define AUDCLNT_STREAMOPTIONS_MATCH_FORMAT 0x2
+
+#endif
+
EXTERN_C const IID IID_IAudioClient3;
MIDL_INTERFACE("7ED4EE07-8E67-4CD4-8C1A-2B7A5987AD42")
if (s->AudioClientVersion >= 3) {
BOOL cap = FALSE;
- hr = s->pAudioClient->IsOffloadCapable(AudioCategory_Media, &cap);
+ hr = s->pAudioClient->IsOffloadCapable((AUDIO_STREAM_CATEGORY)AudioCategory_Media, &cap);
write_log(_T("WASAPI: IsOffloadCapable() returned %d %08x\n"), cap, hr);
}
AudioClientProperties props;
props.bIsOffload = FALSE;
props.cbSize = sizeof props;
- props.eCategory = AudioCategory_Media;
- props.Options = AUDCLNT_STREAMOPTIONS_MATCH_FORMAT;
+ props.eCategory = (AUDIO_STREAM_CATEGORY)AudioCategory_Media;
+ props.Options = (AUDCLNT_STREAMOPTIONS)AUDCLNT_STREAMOPTIONS_MATCH_FORMAT;;
hr = s->pAudioClient->SetClientProperties(&props);
if (FAILED(hr)) {
write_log(_T("WASAPI: SetClientProperties() %08X\n"), hr);
flush_log ();
savedump (dump, f, pExceptionPointers);
CloseHandle (f);
+ ClipCursor(NULL);
+ ReleaseCapture();
+ ShowCursor(TRUE);
if (isfullscreen () <= 0) {
_stprintf (msg, _T("Crash detected. MiniDump saved as:\n%s\n"), path3);
MessageBox (NULL, msg, _T("Crash"), MB_OK | MB_ICONWARNING | MB_TASKMODAL | MB_SETFOREGROUND);
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("11")
+#define WINUAEBETA _T("12")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2016, 10, 8)
+#define WINUAEDATE MAKEBD(2016, 10, 15)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
c |= currprefs.monitoremu != changed_prefs.monitoremu ? (2 | 8) : 0;
c |= currprefs.genlock_image != changed_prefs.genlock_image ? (2 | 8) : 0;
c |= currprefs.genlock != changed_prefs.genlock ? (2 | 8) : 0;
+ c |= currprefs.genlock_alpha != changed_prefs.genlock_alpha ? (1 | 8) : 0;
c |= currprefs.genlock_mix != changed_prefs.genlock_mix ? (1 | 256) : 0;
c |= _tcsicmp(currprefs.genlock_image_file, changed_prefs.genlock_image_file) ? (2 | 8) : 0;
c |= _tcsicmp(currprefs.genlock_video_file, changed_prefs.genlock_video_file) ? (2 | 8) : 0;
currprefs.genlock_image = changed_prefs.genlock_image;
currprefs.genlock = changed_prefs.genlock;
currprefs.genlock_mix = changed_prefs.genlock_mix;
+ currprefs.genlock_alpha = changed_prefs.genlock_alpha;
_tcscpy(currprefs.genlock_image_file, changed_prefs.genlock_image_file);
_tcscpy(currprefs.genlock_video_file, changed_prefs.genlock_video_file);
S2X_configure (red_bits, green_bits, blue_bits, red_shift,green_shift, blue_shift);
#endif
#ifdef AVIOUTPUT
- AVIOutput_RGBinfo (red_bits, green_bits, blue_bits, red_shift, green_shift, blue_shift);
+ AVIOutput_RGBinfo (red_bits, green_bits, blue_bits, alpha_bits, red_shift, green_shift, blue_shift, alpha_shift);
#endif
- Screenshot_RGBinfo (red_bits, green_bits, blue_bits, red_shift, green_shift, blue_shift);
+ Screenshot_RGBinfo (red_bits, green_bits, blue_bits, alpha_bits, red_shift, green_shift, blue_shift, alpha_shift);
}
#ifdef PICASSO96
#define MIN_REFRESH_RATE 1
#define MAX_REFRESH_RATE 10
#define MIN_SOUND_MEM 0
-#define MAX_SOUND_MEM 9
+#define MAX_SOUND_MEM 10
struct romscandata {
UAEREG *fkey;
ew(hDlg, IDC_GENLOCKMODE, workprefs.genlock ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCKMIX, workprefs.genlock ? TRUE : FALSE);
+ ew(hDlg, IDC_GENLOCK_ALPHA, workprefs.genlock ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCKFILE, workprefs.genlock && workprefs.genlock_image >= 3 && workprefs.genlock_image < 5 ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCKFILESELECT, workprefs.genlock && workprefs.genlock_image >= 3 && workprefs.genlock_image < 5 ? TRUE : FALSE);
}
SendDlgItemMessage(hDlg, IDC_MONITOREMU, CB_SETCURSEL, workprefs.monitoremu, 0);
SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_SETCURSEL, workprefs.genlock_image, 0);
SendDlgItemMessage(hDlg, IDC_GENLOCKMIX, CB_SETCURSEL, workprefs.genlock_mix / 25, 0);
+ CheckDlgButton(hDlg, IDC_GENLOCK_ALPHA, workprefs.genlock_alpha);
}
static int cs_compatible = CP_GENERIC;
int id = LOWORD(wParam);
workprefs.genlock = ischecked (hDlg, IDC_GENLOCK);
+ workprefs.genlock_alpha = ischecked(hDlg, IDC_GENLOCK_ALPHA);
+
workprefs.immediate_blits = ischecked (hDlg, IDC_BLITIMM);
workprefs.waiting_blits = ischecked (hDlg, IDC_BLITWAIT) ? 1 : 0;
+
n2 = ischecked (hDlg, IDC_CYCLEEXACTMEMORY);
n1 = ischecked (hDlg, IDC_CYCLEEXACT);
if (workprefs.cpu_cycle_exact != n1 || workprefs.cpu_memory_cycle_exact != n2) {
static int getsoundbufsizeindex (int size)
{
int idx;
+ if (size < sndbufsizes[0])
+ return 0;
for (idx = 0; sndbufsizes[idx] < size && sndbufsizes[idx + 1] >= 0 ; idx++);
- return idx;
+ return idx + 1;
}
static void update_soundgui (HWND hDlg)
int bufsize;
TCHAR txt[20];
- bufsize = getsoundbufsizeindex (workprefs.sound_maxbsiz) + 1;
- _stprintf (txt, _T("%d"), bufsize);
+ bufsize = getsoundbufsizeindex (workprefs.sound_maxbsiz);
+ if (bufsize <= 0) {
+ _tcscpy(txt, _T("Min"));
+ } else {
+ _stprintf (txt, _T("%d"), bufsize);
+ }
SetDlgItemText (hDlg, IDC_SOUNDBUFFERMEM, txt);
SendDlgItemMessage (hDlg, IDC_SOUNDVOLUME, TBM_SETPOS, TRUE, 100 - workprefs.sound_volume_master);
CheckDlgButton (hDlg, IDC_SOUND_CDPAULAMIX, workprefs.sound_cdaudio);
if (workprefs.sound_maxbsiz < SOUND_BUFFER_MULTIPLIER)
- workprefs.sound_maxbsiz = SOUND_BUFFER_MULTIPLIER;
+ workprefs.sound_maxbsiz = 0;
SendDlgItemMessage (hDlg, IDC_SOUNDBUFFERRAM, TBM_SETPOS, TRUE, getsoundbufsizeindex (workprefs.sound_maxbsiz));
SendDlgItemMessage (hDlg, IDC_SOUNDVOLUME, TBM_SETPOS, TRUE, 0);
case WM_HSCROLL:
if ((HWND)lParam == GetDlgItem (hDlg, IDC_SOUNDBUFFERRAM)) {
int v = SendMessage (GetDlgItem (hDlg, IDC_SOUNDBUFFERRAM), TBM_GETPOS, 0, 0);
- if (v >= 0)
- workprefs.sound_maxbsiz = sndbufsizes[v];
+ if (v >= 0) {
+ if (v == 0)
+ workprefs.sound_maxbsiz = 0;
+ else
+ workprefs.sound_maxbsiz = sndbufsizes[v - 1];
+ }
}
workprefs.sound_volume_master = 100 - SendMessage (GetDlgItem (hDlg, IDC_SOUNDVOLUME), TBM_GETPOS, 0, 0);
(*volumeselection) = 100 - SendMessage (GetDlgItem (hDlg, IDC_SOUNDVOLUMEEXT), TBM_GETPOS, 0, 0);
static int getfloppybox (HWND hDlg, int f_text, TCHAR *out, int maxlen, int type)
{
LRESULT val;
- TCHAR *p1, *p2, *p;
- TCHAR *tmp;
+ TCHAR *p;
int i;
out[0] = 0;
case WM_NOTIFY:
if (((LPNMHDR)lParam)->idFrom == IDC_LISTDIALOG_LIST)
{
- TCHAR name[256];
int column, entry;
NM_LISTVIEW *nmlistview = (NM_LISTVIEW *)lParam;
list = nmlistview->hdr.hwndFrom;
{
entry = listview_entry_from_click(list, &column);
if (entry >= 0 && inputmap_selected >= 0) {
- int devnum, num, sub;
if (inputmap_handle(NULL, -1, -1, NULL, NULL, -1, NULL, inputmap_selected,
remapcustoms[entry].flags, IDEV_MAPPED_AUTOFIRE_SET | IDEV_MAPPED_TOGGLE | IDEV_MAPPED_INVERTTOGGLE, NULL)) {
inputdevice_generate_jport_custom(&workprefs, inputmap_port);
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
\r
+Beta 12:\r
+\r
+- If genlock is active, mode is not "-" and new genlock alpha option is checked, screenshots and avioutput videos\r
+ include alpha-channel generated from genlock transparency data. Only works in 32-bit mode and may not work if capture\r
+ before filtering is not set.\r
+- Added genlock video input events: restart, pause/unpause, next and previous frame.\r
+- WASAPI shared mode uses lower latency mode introduced in Windows 10 that allows sub-10ms latencies in shared mode (if sound driver\r
+ supports it). Buffers larger than 10ms and non-Windows 10 systems use "old" method.\r
+- "Min" (WASAPI only) sound buffer setting added. Selects smallest buffer size that driver supports.\r
+- WASAPI sound buffer size adjusted. All buffer size values now allocate smaller buffer than previously, pull (event) mode\r
+ is much more stable than previously used push mode, there is no need for very large buffer sizes anymore.\r
+- WASAPI sound automatically switches to default device if current device disappears (for example unplugged USB sound card/headset)\r
+- Added RTL8019 9346 EEPROM emulation.\r
+- Ariadne II NIC emulation. RTL8019AS based. (9346 contents are not correct but driver does not seem to care)\r
+- X-Surf NIC emulation, also RTL8019AS based. (Including ISA PNP emulation that driver needs...) No IDE support.\r
+- X-Surf 100 (Z2 and Z3) NIC emulation, uses RTL8019AS "compatible" chip. Does not emulate any AX88796B extra features (=only works\r
+ if driver assumes chip only supports NE2000/RTL8019AS features. Official driver does not seem to use any extra features.)\r
+- Ariadne II and X-Surfs are currently SLIRP-only, no configuration available. Multiple enabled NICs are still also not supported.\r
+- Disable horizontal/vertical filter configured blanking if display port adapter is active that needs RGBI control lines.\r
+- Try to uncapture mouse before showing crash report dialog.\r
+\r
Beta 11:\r
\r
- Added generic Z2/Z3 autoconfig support to expansion.cpp. Previously each expansion type needed own separate autoconfig handling.\r