From 30a103d69981bed3f9d41c4223bf6d45f24a7ad3 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 29 Oct 2016 16:15:31 +0300 Subject: [PATCH] 3400b14 --- .gitignore | 1 + audio.cpp | 21 ++++++++++-------- cfgfile.cpp | 21 +++++++++++------- cpuboard.cpp | 2 +- debug.cpp | 6 +++--- expansion.cpp | 15 +++++++++++++ flashrom.cpp | 4 ++-- od-win32/resources/winuae.rc | 18 ++++++++++------ od-win32/win32.cpp | 24 +++++++++++++++++++++ od-win32/win32.h | 4 ++-- od-win32/win32gui.cpp | 42 ++++++++++++++++++++++++------------ od-win32/winuaechangelog.txt | 13 ++++++++++- 12 files changed, 124 insertions(+), 47 deletions(-) diff --git a/.gitignore b/.gitignore index a5939064..aa098746 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,4 @@ aros.rom.cpp *.opendb packages packages.config +*.sqlite diff --git a/audio.cpp b/audio.cpp index b3ff3044..757d5d69 100644 --- a/audio.cpp +++ b/audio.cpp @@ -1323,6 +1323,16 @@ STATIC_INLINE int is_audio_active (void) return audio_work_to_do; } +static void update_volume(int nr, uae_u16 v) +{ + struct audio_channel_data *cdp = audio_channel + nr; + // 7 bit register in Paula. + v &= 127; + if (v > 64) + v = 64; + cdp->data.vol = v; +} + uae_u16 audio_dmal (void) { uae_u16 dmal = 0; @@ -1403,10 +1413,7 @@ static void loaddat (int nr, bool modper) else cdp[1].per = PERIOD_MIN * CYCLE_UNIT; } else if (audav) { - cdp[1].data.vol = cdp->dat; - cdp[1].data.vol &= 127; - if (cdp[1].data.vol > 64) - cdp[1].data.vol = 64; + update_volume(nr + 1, cdp->dat); } } else { #if TEST_AUDIO > 0 @@ -2216,13 +2223,9 @@ void AUDxVOL (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; - // 7 bit register in Paula. - v &= 127; - if (v > 64) - v = 64; audio_activate (); update_audio (); - cdp->data.vol = v; + update_volume(nr, v); #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dVOL: %d %08X\n"), nr, v, M68K_GETPC); diff --git a/cfgfile.cpp b/cfgfile.cpp index e7ede28c..d60deb24 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -4615,17 +4615,21 @@ static void addbcromtype(struct uae_prefs *p, int romtype, bool add, const TCHAR static void addbcromtypenet(struct uae_prefs *p, int romtype, const TCHAR *netname, int devnum) { + int is = is_device_rom(p, romtype, devnum); if (netname == NULL || netname[0] == 0) { - clear_device_rom(p, romtype, devnum, true); + if (is < 0) + clear_device_rom(p, romtype, devnum, true); } else { - struct boardromconfig *brc = get_device_rom_new(p, romtype, devnum, NULL); - if (brc) { - if (!brc->roms[0].romfile[0]) { - _tcscpy(brc->roms[0].romfile, _T(":ENABLED")); + if (is < 0) { + struct boardromconfig *brc = get_device_rom_new(p, romtype, devnum, NULL); + if (brc) { + if (!brc->roms[0].romfile[0]) { + _tcscpy(brc->roms[0].romfile, _T(":ENABLED")); + } + ethernet_updateselection(); + if (!brc->roms[0].device_settings) + brc->roms[0].device_settings = ethernet_getselection(netname); } - ethernet_updateselection(); - if (!brc->roms[0].device_settings) - brc->roms[0].device_settings = ethernet_getselection(netname); } } } @@ -5166,6 +5170,7 @@ static void romtype_restricted(struct uae_prefs *p, const int *list) while (list[i]) { romtype = list[i]; if (is_board_enabled(p, romtype, 0)) { + write_log(_T("ROMTYPE %08x removed\n"), romtype); addbcromtype(p, romtype, false, NULL, 0); } i++; diff --git a/cpuboard.cpp b/cpuboard.cpp index 12b0ca0d..9f5d03c5 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -2037,7 +2037,7 @@ bool cpuboard_io_special(int addr, uae_u32 *val, int size, bool write) uae_u16 w = *val; if (is_a2630(&currprefs)) { if ((addr == 0x0040 && size == 2) || (addr == 0x0041 && size == 1)) { - write_log(_T("A2630 write %04x PC=%08x\n"), w, M68K_GETPC); + write_log(_T("A2630 write %04x s=%d PC=%08x\n"), w, size, M68K_GETPC); a2630_io = w; // bit 0: unmap 0x000000 // bit 1: unmap 0xf80000 diff --git a/debug.cpp b/debug.cpp index a27f100e..a0f53b6f 100644 --- a/debug.cpp +++ b/debug.cpp @@ -3744,7 +3744,7 @@ fail: static TCHAR *getfrombstr(uaecptr pp) { uae_u8 *p = get_real_address ((uaecptr)(pp << 2)); - TCHAR *s = xmalloc (TCHAR, p[0] + 1); + TCHAR *s = xcalloc (TCHAR, p[0] + 1); return au_copy (s, p[0] + 1, (char*)p + 1); } @@ -3791,8 +3791,8 @@ static void show_exec_lists (TCHAR *t) while (doslist) { int type = get_long_debug (doslist + 4); uaecptr msgport = get_long_debug (doslist + 8); - TCHAR *name = getfrombstr (get_long_debug (doslist + 40)); - console_out_f (_T("%08x: %d %08x '%s'\n"), doslist, type, msgport, name); + TCHAR *name = getfrombstr(get_long_debug(doslist + 40)); + console_out_f(_T("%08x: %d %08x '%s'\n"), doslist, type, msgport, name); if (type == 0) { uaecptr fssm = get_long_debug(doslist + 28) << 2; console_out_f (_T(" - H=%08x Stack=%5d Pri=%2d Start=%08x Seg=%08x GV=%08x\n"), diff --git a/expansion.cpp b/expansion.cpp index 5390d1a8..f9799836 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -2277,6 +2277,7 @@ static void add_expansions(struct uae_prefs *p, int zorro, int *fastmem_nump, in cards_set[cardno].initrc = ert->init; cards_set[cardno].rc = rc; cards_set[cardno].zorro = zorro; + cards_set[cardno].ert = ert; cards_set[cardno++].map = NULL; if (ert->init2) { cards_set[cardno].flags = CARD_FLAG_CHILD; @@ -4811,6 +4812,16 @@ const struct expansionromtype expansionroms[] = { false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, false, 0, ethernet_settings, + { 0xc1, 0x70, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + _T("ariadne"), _T("Ariadne"), _T("Village Tronic"), + ariadne_init, NULL, NULL, ROMTYPE_ARIADNE | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, 0, + false, EXPANSIONTYPE_NET, + 0, 0, 0, false, NULL, + false, 0, ethernet_settings, + { 0xc1, 0xc9, 0x00, 0x00, 2167 >> 8, 2167 & 255, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, { _T("ariadne2"), _T("Ariadne II"), _T("Village Tronic"), @@ -5437,6 +5448,10 @@ const struct cpuboardtype cpuboards[] = { const struct memoryboardtype memoryboards[] { // z2 + { + _T("UAE"), _T("0xf00000 RAM"), + 2, 0xf00000, 0xffff, 0xff + }, { _T("DKB"), _T("Insider I/II"), 2, 0x800000, 0xffff, 0xff diff --git a/flashrom.cpp b/flashrom.cpp index 63571caa..86d71419 100644 --- a/flashrom.cpp +++ b/flashrom.cpp @@ -226,7 +226,7 @@ void *eeprom93xx_new(const uae_u8 *memory, int nwords, struct zfile *zf) } /* Output DO is tristate, read results in 1. */ eeprom->eedo = 1; - write_log("eeprom = 0x%p, nwords = %u\n", eeprom, nwords); +// write_log("eeprom = 0x%p, nwords = %u\n", eeprom, nwords); return eeprom; } @@ -235,7 +235,7 @@ void eeprom93xx_free(void *eepromp) eeprom93xx_eeprom_t *eeprom = (eeprom93xx_eeprom_t*)eepromp; /* Destroy EEPROM. */ - write_log("eeprom = 0x%p\n", eeprom); +// write_log("eeprom = 0x%p\n", eeprom); xfree(eeprom); } diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 204471e3..2b9a5a7c 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -917,7 +917,7 @@ BEGIN PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,272,55,14 END -IDD_HARDDRIVE DIALOGEX 0, 0, 396, 109 +IDD_HARDDRIVE DIALOGEX 0, 0, 397, 136 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Harddrive Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 @@ -926,13 +926,15 @@ BEGIN COMBOBOX IDC_HARDDRIVE,49,9,339,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_HDFINFO,5,29,385,12,ES_CENTER | ES_READONLY EDITTEXT IDC_HDFINFO2,5,46,385,12,ES_CENTER | ES_READONLY - DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,40,67,115,14 - EDITTEXT IDC_PATH_NAME,188,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE + DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,5,67,158,14 + EDITTEXT IDC_PATH_NAME,178,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,315,71,60,10 - COMBOBOX IDC_HDF_CONTROLLER,8,89,164,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_HDF_CONTROLLER_UNIT,179,89,25,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Add hard drive",IDOK,236,87,73,14 - PUSHBUTTON "Cancel",IDCANCEL,316,87,73,14 + COMBOBOX IDC_HDF_CONTROLLER,8,113,218,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_HDF_CONTROLLER_UNIT,65,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Add hard drive",IDOK,236,113,73,14 + PUSHBUTTON "Cancel",IDCANCEL,316,113,73,14 + COMBOBOX IDC_HDF_CONTROLLER_TYPE,178,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_HDF_FEATURE_LEVEL,291,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP END IDD_MISC2 DIALOGEX 0, 0, 396, 278 @@ -1566,6 +1568,8 @@ BEGIN IDD_HARDDRIVE, DIALOG BEGIN + RIGHTMARGIN, 396 + BOTTOMMARGIN, 109 END IDD_MISC2, DIALOG diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index e3f0b9f4..2359b7ec 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -6962,6 +6962,20 @@ const TCHAR **uaenative_get_library_dirs (void) typedef BOOL (CALLBACK* CHANGEWINDOWMESSAGEFILTER)(UINT, DWORD); +#ifndef NDEBUG +typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY { + union { + DWORD Flags; + struct { + DWORD RaiseExceptionOnInvalidHandleReference : 1; + DWORD HandleExceptionsPermanentlyEnabled : 1; + DWORD ReservedFlags : 30; + }; + }; +} PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY; +typedef BOOL (WINAPI* SETPROCESSMITIGATIONPOLICY)(DWORD, PVOID, SIZE_T); +static SETPROCESSMITIGATIONPOLICY pSetProcessMitigationPolicy; +#endif int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { @@ -6983,6 +6997,16 @@ int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL } #endif #endif + +#ifndef NDEBUG + PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY p = { 0 }; + p.HandleExceptionsPermanentlyEnabled = 1; + p.RaiseExceptionOnInvalidHandleReference = 1; + //ProcessStrictHandleCheckPolicy = 3 + pSetProcessMitigationPolicy = (SETPROCESSMITIGATIONPOLICY)GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "SetProcessMitigationPolicy"); + pSetProcessMitigationPolicy(3, &p, sizeof p); +#endif + executable_path[0] = 0; GetModuleFileName(NULL, executable_path, sizeof executable_path / sizeof(TCHAR)); diff --git a/od-win32/win32.h b/od-win32/win32.h index 70ce0969..ccda6d49 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("13") +#define WINUAEBETA _T("14") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2016, 10, 21) +#define WINUAEDATE MAKEBD(2016, 10, 29) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index aa174089..beb11be5 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -11939,8 +11939,8 @@ static void values_from_sounddlg (HWND hDlg) } if (workprefs.sound_freq < 8000) workprefs.sound_freq = 8000; - if (workprefs.sound_freq > 96000) - workprefs.sound_freq = 96000; + if (workprefs.sound_freq > 192000) + workprefs.sound_freq = 192000; workprefs.produce_sound = (ischecked (hDlg, IDC_SOUND0) ? 0 : ischecked (hDlg, IDC_SOUND1) ? 1 : 3); @@ -12408,6 +12408,21 @@ STATIC_INLINE bool is_hdf_rdb (void) static int hdmenutable[256]; +static void sethardfiletypes(HWND hDlg) +{ + bool ide = current_hfdlg.ci.controller_type >= HD_CONTROLLER_TYPE_IDE_FIRST && current_hfdlg.ci.controller_type <= HD_CONTROLLER_TYPE_IDE_LAST; + bool scsi = current_hfdlg.ci.controller_type >= HD_CONTROLLER_TYPE_SCSI_FIRST && current_hfdlg.ci.controller_type <= HD_CONTROLLER_TYPE_SCSI_LAST; + ew(hDlg, IDC_HDF_CONTROLLER_TYPE, ide); + ew(hDlg, IDC_HDF_FEATURE_LEVEL, ide || scsi); + if (!ide) { + current_hfdlg.ci.controller_media_type = 0; + } + if (current_hfdlg.ci.controller_media_type && current_hfdlg.ci.unit_feature_level == 0) + current_hfdlg.ci.unit_feature_level = 1; + SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_TYPE, CB_SETCURSEL, current_hfdlg.ci.controller_media_type, 0); + SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_SETCURSEL, current_hfdlg.ci.unit_feature_level, 0); +} + static void sethardfile (HWND hDlg) { bool rdb = is_hdf_rdb (); @@ -12451,15 +12466,7 @@ static void sethardfile (HWND hDlg) hide(hDlg, IDC_CYLINDERS_TEXT, !rdb); gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, current_hfdlg.ci.controller_type + current_hfdlg.ci.controller_type_unit * HD_CONTROLLER_NEXT_UNIT); SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0); - ew(hDlg, IDC_HDF_CONTROLLER_TYPE, ide); - ew(hDlg, IDC_HDF_FEATURE_LEVEL, ide || scsi); - if (!ide) { - current_hfdlg.ci.controller_media_type = 0; - } - if (current_hfdlg.ci.controller_media_type && current_hfdlg.ci.unit_feature_level == 0) - current_hfdlg.ci.unit_feature_level = 1; - SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_TYPE, CB_SETCURSEL, current_hfdlg.ci.controller_media_type, 0); - SendDlgItemMessage (hDlg, IDC_HDF_FEATURE_LEVEL, CB_SETCURSEL, current_hfdlg.ci.unit_feature_level, 0); + sethardfiletypes(hDlg); } static void addhdcontroller(HWND hDlg, const struct expansionromtype *erc, int *hdmenutable, int firstid, int flags) @@ -13232,6 +13239,7 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara oposn = -1; hdf_init_target (); recursive++; + sethardfiletypes(hDlg); inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF); CheckDlgButton (hDlg, IDC_HDF_RW, !current_hfdlg.ci.readonly); SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_RESETCONTENT, 0, 0); @@ -13251,7 +13259,8 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_SETCURSEL, index, 0); gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, current_hfdlg.ci.controller_type + current_hfdlg.ci.controller_type_unit * HD_CONTROLLER_NEXT_UNIT); SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0); - SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_TYPE, CB_SETCURSEL, current_hfdlg.ci.controller_media_type, 0); + SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_TYPE, CB_SETCURSEL, current_hfdlg.ci.controller_media_type, 0); + SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_SETCURSEL, current_hfdlg.ci.unit_feature_level, 0); } recursive--; return TRUE; @@ -13301,8 +13310,6 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara current_hfdlg.ci.blocksize = 512; current_hfdlg.forcedcylinders = 0; current_hfdlg.ci.cyls = current_hfdlg.ci.highcyl = current_hfdlg.ci.sectors = current_hfdlg.ci.surfaces = 0; - ew (hDlg, IDC_HDF_CONTROLLER, ena); - ew (hDlg, IDC_HDF_CONTROLLER_UNIT, ena); SetDlgItemText (hDlg, IDC_HDFINFO, _T("")); SetDlgItemText (hDlg, IDC_HDFINFO2, _T("")); updatehdfinfo (hDlg, true, true); @@ -13310,6 +13317,7 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0); CheckDlgButton(hDlg, IDC_HDF_RW, !current_hfdlg.ci.readonly); _tcscpy (current_hfdlg.ci.rootdir, hdf_getnameharddrive ((int)posn, 4, ¤t_hfdlg.ci.blocksize, NULL)); + sethardfiletypes(hDlg); } } } else if (LOWORD (wParam) == IDC_HDF_CONTROLLER) { @@ -13324,6 +13332,7 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara updatehdfinfo (hDlg, true, true); inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF); SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0); + sethardfiletypes(hDlg); } } else if (LOWORD(wParam) == IDC_HDF_CONTROLLER_UNIT) { posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_GETCURSEL, 0, 0); @@ -13338,6 +13347,11 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara if (posn != CB_ERR) { current_hfdlg.ci.controller_media_type = posn; } + } else if (LOWORD(wParam) == IDC_HDF_FEATURE_LEVEL) { + posn = SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_GETCURSEL, 0, 0); + if (posn != CB_ERR) { + current_hfdlg.ci.unit_feature_level = posn; + } } recursive--; break; diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 31b527bf..e49a54e0 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -4,7 +4,18 @@ JIT Direct current rules are less complex now. It automatically switches off onl - RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel. 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: + +Beta 14: + +- Ariadne network adapter emulation added. (Am79c960 based, improved Am79c90) +- uaesnd update, sample format byte changed, added support for little-endian and signed samples. +- Old NE2000 config entries overrode new style entries until config file was rewritten at least once. +- Sound output frequency max limit increased from 96KHz to 192KHz. (Useless but if you really want to do it..) +- Added missing drive type/feature level options to add harddrive dialog. +- Opalvision updates, OpalPaint palette is now fully visible, interlace mode missing lines fixed. + King of Karate confirmed working. PlayAnim24 (which uses sort of polarity inverted control line) works. + +Beta 13: - Fixed double free in RTL8019 9346 EEPROM emulation. Caused random crashes. - Implemented DP8390 NIC support (Same register set as NE2000 but without on board RAM "fake DMA" support) -- 2.47.3