From 4e668927b5f90bf3a7cfc62cb08e47c29161c7d9 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 15 Oct 2016 20:23:27 +0300 Subject: [PATCH] 3400b12 --- cfgfile.cpp | 8 +++++--- devices.cpp | 8 ++++++-- include/options.h | 1 + od-win32/dinput.cpp | 4 +++- od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 14 ++++++++------ od-win32/sounddep/sound.cpp | 15 ++++++++++++--- od-win32/win32.cpp | 3 +++ od-win32/win32.h | 4 ++-- od-win32/win32gfx.cpp | 6 ++++-- od-win32/win32gui.cpp | 34 +++++++++++++++++++++++----------- od-win32/winuaechangelog.txt | 21 +++++++++++++++++++++ 12 files changed, 89 insertions(+), 30 deletions(-) diff --git a/cfgfile.cpp b/cfgfile.cpp index d73dda6f..f4c34088 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -1834,6 +1834,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) 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); @@ -4670,7 +4671,8 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH || 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) @@ -5207,7 +5209,7 @@ void cfgfile_compatibility_rtg(struct uae_prefs *p) } else if (romtype == ROMTYPE_x86_VGA) { romname = _T(""); } - addbcromtype(p, romtype, romname, NULL, devnum); + addbcromtype(p, romtype, false, romname, devnum); devnum++; } } @@ -5258,7 +5260,7 @@ void cfgfile_compatibility_romtype(struct uae_prefs *p) 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); diff --git a/devices.cpp b/devices.cpp index 16b42ef2..b146faa1 100644 --- a/devices.cpp +++ b/devices.cpp @@ -194,6 +194,7 @@ void devices_hsync(void) #ifdef WITH_TOCCATA sndboard_hsync(); #endif + ne2000_hsync(); DISK_hsync (); audio_hsync (); CIA_hsync_prehandler (); @@ -205,6 +206,7 @@ void devices_hsync(void) #endif } +// these really should be dynamically allocated.. void devices_rethink(void) { rethink_cias (); @@ -238,6 +240,7 @@ void devices_rethink(void) #ifdef WITH_TOCCATA sndboard_rethink(); #endif + rethink_ne2000(); rethink_gayle (); idecontroller_rethink(); rethink_uae_int(); @@ -303,6 +306,7 @@ void reset_all_systems (void) #if defined (PARALLEL_PORT) initparallel (); #endif + ne2000_reset(); native2amiga_reset (); dongle_reset (); sampler_init (); @@ -462,7 +466,7 @@ void devices_pause(void) #ifdef RETROPLATFORM rp_pause(pause_emulation); #endif - pausevideograb(true); + pausevideograb(1); } void devices_unpause(void) @@ -474,5 +478,5 @@ void devices_unpause(void) #ifdef WITH_PPC uae_ppc_pause(0); #endif - pausevideograb(false); + pausevideograb(0); } diff --git a/include/options.h b/include/options.h index 5993141e..4b7a6a05 100644 --- a/include/options.h +++ b/include/options.h @@ -509,6 +509,7 @@ struct uae_prefs { 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; diff --git a/od-win32/dinput.cpp b/od-win32/dinput.cpp index 49fe3112..7a531ecc 100644 --- a/od-win32/dinput.cpp +++ b/od-win32/dinput.cpp @@ -2663,7 +2663,9 @@ void handle_rawinput (LPARAM lParam) 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 ()); diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 616399cd..a55b0f2d 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -529,6 +529,7 @@ #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 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index b642a716..2697f824 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -702,7 +702,7 @@ BEGIN 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 @@ -728,7 +728,7 @@ 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 @@ -745,9 +745,11 @@ BEGIN 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 @@ -1550,7 +1552,7 @@ BEGIN IDD_CHIPSET, DIALOG BEGIN - BOTTOMMARGIN, 192 + BOTTOMMARGIN, 258 END IDD_CHIPSET2, DIALOG diff --git a/od-win32/sounddep/sound.cpp b/od-win32/sounddep/sound.cpp index 6960a317..92857808 100644 --- a/od-win32/sounddep/sound.cpp +++ b/od-win32/sounddep/sound.cpp @@ -47,6 +47,8 @@ #define USE_XAUDIO 0 +#ifndef _WIN64 + // only in 8.1+ SDKs typedef enum _AUDIO_STREAM_CATEGORY { @@ -105,6 +107,13 @@ public: }; +#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") @@ -1340,7 +1349,7 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive) 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); } @@ -1352,8 +1361,8 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive) 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); diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index b65c7c6f..439cbf4e 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -6417,6 +6417,9 @@ static void create_dump (struct _EXCEPTION_POINTERS *pExceptionPointers) 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); diff --git a/od-win32/win32.h b/od-win32/win32.h index c2cd3291..bbd6f148 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("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") diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 6354b451..ee18a0cc 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -2044,6 +2044,7 @@ int check_prefs_changed_gfx (void) 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; @@ -2141,6 +2142,7 @@ int check_prefs_changed_gfx (void) 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); @@ -2437,9 +2439,9 @@ void init_colors (void) 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 diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 05192998..108fcacd 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1409,7 +1409,7 @@ static const int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #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; @@ -6694,6 +6694,7 @@ static void enable_for_chipsetdlg (HWND hDlg) 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); } @@ -7684,6 +7685,7 @@ static void values_to_chipsetdlg (HWND hDlg) 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; @@ -7696,8 +7698,11 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l 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) { @@ -11816,8 +11821,10 @@ static int sounddrivesel; 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) @@ -11825,8 +11832,12 @@ 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); @@ -11958,7 +11969,7 @@ static void values_to_sounddlg (HWND hDlg) 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); @@ -12214,8 +12225,12 @@ static INT_PTR CALLBACK SoundDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM 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); @@ -14181,8 +14196,7 @@ static void getfloppytypeq (HWND hDlg, int n) 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; @@ -16637,7 +16651,6 @@ static INT_PTR CALLBACK RemapSpecialsProc(HWND hDlg, UINT msg, WPARAM wParam, LP 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; @@ -16648,7 +16661,6 @@ static INT_PTR CALLBACK RemapSpecialsProc(HWND hDlg, UINT msg, WPARAM wParam, LP { 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); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 95980e06..64ba3cb5 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -5,6 +5,27 @@ JIT Direct current rules are less complex now. It automatically switches off onl Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI) +Beta 12: + +- If genlock is active, mode is not "-" and new genlock alpha option is checked, screenshots and avioutput videos + include alpha-channel generated from genlock transparency data. Only works in 32-bit mode and may not work if capture + before filtering is not set. +- Added genlock video input events: restart, pause/unpause, next and previous frame. +- WASAPI shared mode uses lower latency mode introduced in Windows 10 that allows sub-10ms latencies in shared mode (if sound driver + supports it). Buffers larger than 10ms and non-Windows 10 systems use "old" method. +- "Min" (WASAPI only) sound buffer setting added. Selects smallest buffer size that driver supports. +- WASAPI sound buffer size adjusted. All buffer size values now allocate smaller buffer than previously, pull (event) mode + is much more stable than previously used push mode, there is no need for very large buffer sizes anymore. +- WASAPI sound automatically switches to default device if current device disappears (for example unplugged USB sound card/headset) +- Added RTL8019 9346 EEPROM emulation. +- Ariadne II NIC emulation. RTL8019AS based. (9346 contents are not correct but driver does not seem to care) +- X-Surf NIC emulation, also RTL8019AS based. (Including ISA PNP emulation that driver needs...) No IDE support. +- X-Surf 100 (Z2 and Z3) NIC emulation, uses RTL8019AS "compatible" chip. Does not emulate any AX88796B extra features (=only works + if driver assumes chip only supports NE2000/RTL8019AS features. Official driver does not seem to use any extra features.) +- Ariadne II and X-Surfs are currently SLIRP-only, no configuration available. Multiple enabled NICs are still also not supported. +- Disable horizontal/vertical filter configured blanking if display port adapter is active that needs RGBI control lines. +- Try to uncapture mouse before showing crash report dialog. + Beta 11: - Added generic Z2/Z3 autoconfig support to expansion.cpp. Previously each expansion type needed own separate autoconfig handling. -- 2.47.3