From 786ae703e5d6021876329445f6d605ef288cf1ec Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 18 Apr 2015 14:30:16 +0300 Subject: [PATCH] 3100b16 --- cfgfile.cpp | 10 ++++-- debug.cpp | 6 ++-- expansion.cpp | 9 +++++- include/options.h | 12 +++---- od-win32/parser.cpp | 15 +++++++-- od-win32/registry.cpp | 7 +++-- od-win32/registry.h | 2 +- od-win32/resources/resource.h | 3 +- od-win32/resources/winuae.rc | 22 ++++++------- od-win32/rp.cpp | 1 + od-win32/serial_win32.cpp | 19 ++++++++--- od-win32/win32.cpp | 40 +++++++++++++++++++++--- od-win32/win32.h | 4 +-- od-win32/win32_scaler.cpp | 16 +++++----- od-win32/win32gfx.cpp | 1 + od-win32/win32gui.cpp | 59 ++++++++++++++++++++++++++--------- 16 files changed, 159 insertions(+), 67 deletions(-) diff --git a/cfgfile.cpp b/cfgfile.cpp index 654a6d6b..5af28f07 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -181,8 +181,9 @@ static const TCHAR *maxvert[] = { _T("nointerlace"), _T("interlace"), 0 }; static const TCHAR *abspointers[] = { _T("none"), _T("mousehack"), _T("tablet"), 0 }; static const TCHAR *magiccursors[] = { _T("both"), _T("native"), _T("host"), 0 }; static const TCHAR *autoscale[] = { _T("none"), _T("auto"), _T("standard"), _T("max"), _T("scale"), _T("resize"), _T("center"), _T("manual"), - _T("integer"), _T("half-integer"), _T("integer_auto"), _T("half-integer_auto"), _T("separator"), _T("overscan_blanking"), 0 }; + _T("integer"), _T("integer_auto"), _T("separator"), _T("overscan_blanking"), 0 }; static const TCHAR *autoscale_rtg[] = { _T("resize"), _T("scale"), _T("center"), _T("integer"), 0 }; +static const TCHAR *autoscalelimit[] = { _T("1/1"), _T("1/2"), _T("1/4"), _T("1/8"), 0 }; static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("mousenowheel"), _T("djoy"), _T("gamepad"), _T("ajoy"), _T("cdtvjoy"), _T("cd32joy"), _T("lightpen"), 0 }; static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), _T("always"), 0 }; static const TCHAR *epsonprinter[] = { _T("none"), _T("ascii"), _T("epson_matrix_9pin"), _T("epson_matrix_24pin"), _T("epson_matrix_48pin"), 0 }; @@ -199,7 +200,7 @@ static const TCHAR *dongles[] = }; static const TCHAR *cdmodes[] = { _T("disabled"), _T(""), _T("image"), _T("ioctl"), _T("spti"), _T("aspi"), 0 }; static const TCHAR *cdconmodes[] = { _T(""), _T("uae"), _T("ide"), _T("scsi"), _T("cdtv"), _T("cd32"), 0 }; -static const TCHAR *specialmonitors[] = { _T("none"), _T("autodetect"), _T("a2024"), _T("graffiti"), _T("ham_e"), _T("dctv"), 0 }; +static const TCHAR *specialmonitors[] = { _T("none"), _T("autodetect"), _T("a2024"), _T("graffiti"), _T("ham_e"), _T("ham_e_plus"), _T("dctv"), 0 }; static const TCHAR *rtgtype[] = { _T("ZorroII"), _T("ZorroIII"), _T("PicassoII"), @@ -1469,6 +1470,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_dwrite_ext (f, _T("gfx_filter_keep_autoscale_aspect"), ext, _T("%d"), gf->gfx_filter_keep_autoscale_aspect); cfgfile_dwrite_str (f, _T("gfx_filter_keep_aspect"), ext, aspects[gf->gfx_filter_keep_aspect]); cfgfile_dwrite_str(f, _T("gfx_filter_autoscale"), ext, ext == NULL ? autoscale[gf->gfx_filter_autoscale] : autoscale_rtg[gf->gfx_filter_autoscale]); + cfgfile_dwrite_str (f, _T("gfx_filter_autoscale_limit"), ext, autoscalelimit[gf->gfx_filter_integerscalelimit]); cfgfile_dwrite_ext (f, _T("gfx_filter_aspect_ratio"), ext, _T("%d:%d"), gf->gfx_filter_aspect >= 0 ? (gf->gfx_filter_aspect / ASPECTMULT) : -1, gf->gfx_filter_aspect >= 0 ? (gf->gfx_filter_aspect & (ASPECTMULT - 1)) : -1); @@ -2482,8 +2484,10 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value) struct gfx_filterdata *gf = &p->gf[j]; const TCHAR *ext = j == 0 ? NULL : _T("_rtg"); if (cfgfile_strval (option, value, _T("gfx_filter_autoscale"), ext, &gf->gfx_filter_autoscale, j == 0 ? autoscale : autoscale_rtg, 0) - || cfgfile_strval (option, value, _T("gfx_filter_keep_aspect"), ext, &gf->gfx_filter_keep_aspect, aspects, 0)) + || cfgfile_strval (option, value, _T("gfx_filter_keep_aspect"), ext, &gf->gfx_filter_keep_aspect, aspects, 0) + || cfgfile_strval (option, value, _T("gfx_filter_autoscale_limit"), ext, &gf->gfx_filter_integerscalelimit, autoscalelimit, 0)) return 1; + if (cfgfile_floatval (option, value, _T("gfx_filter_vert_zoomf"), ext, &gf->gfx_filter_vert_zoom) || cfgfile_floatval (option, value, _T("gfx_filter_horiz_zoomf"), ext, &gf->gfx_filter_horiz_zoom) || cfgfile_floatval (option, value, _T("gfx_filter_vert_zoom_multf"), ext, &gf->gfx_filter_vert_zoom_mult) diff --git a/debug.cpp b/debug.cpp index 7b80be56..bb0c971e 100644 --- a/debug.cpp +++ b/debug.cpp @@ -123,7 +123,9 @@ static TCHAR help[] = { _T(" fp \"\"/ Step forward until process or is active.\n") _T(" fl List breakpoints.\n") _T(" fd Remove all breakpoints.\n") - _T(" fs Break when (SR & mask) = val.\n") + _T(" fs | Wait n scanlines/position.\n") + _T(" fc Wait n color clocks.\n") + _T(" fS Break when (SR & mask) = val.\n") _T(" f Step forward until <= PC <= .\n") _T(" e Dump contents of all custom registers, ea = AGA colors.\n") _T(" i [] Dump contents of interrupt and trap vectors.\n") @@ -3563,7 +3565,7 @@ static void breakfunc(uae_u32 v) static int cycle_breakpoint(TCHAR **c) { - TCHAR nc = _totupper((*c)[0]); + TCHAR nc = (*c)[0]; next_char(c); if (more_params(c)) { int count = readint(c); diff --git a/expansion.cpp b/expansion.cpp index 2aed10e9..8d4928ed 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -2391,7 +2391,14 @@ const struct expansionromtype expansionroms[] = { add500_init, add500_add_scsi_unit, ROMTYPE_ADD500, 0, 0, 2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, - 8498, 27, 0, + 8498, 27, 0 + }, + { + _T("rochard"), _T("RocHard RH800C"), _T("Roctec"), + rochard_init, rochard_add_ide_unit, ROMTYPE_ROCHARD | ROMTYPE_NONE, 0, 0, 2, false, + NULL, 0, + true, EXPANSIONTYPE_IDE, + 2144, 2, 0 }, #if 0 { diff --git a/include/options.h b/include/options.h index a1510c29..bf0c7d38 100644 --- a/include/options.h +++ b/include/options.h @@ -202,18 +202,17 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CDTVCR, CP_CD32, CP_A500, CP_A500P, CP_A600, #define AUTOSCALE_CENTER 6 #define AUTOSCALE_MANUAL 7 // use gfx_xcenter_pos and gfx_ycenter_pos #define AUTOSCALE_INTEGER 8 -#define AUTOSCALE_HALF_INTEGER 9 -#define AUTOSCALE_INTEGER_AUTOSCALE 10 -#define AUTOSCALE_HALF_INTEGER_AUTOSCALE 11 -#define AUTOSCALE_SEPARATOR 12 -#define AUTOSCALE_OVERSCAN_BLANK 13 +#define AUTOSCALE_INTEGER_AUTOSCALE 9 +#define AUTOSCALE_SEPARATOR 10 +#define AUTOSCALE_OVERSCAN_BLANK 11 #define MONITOREMU_NONE 0 #define MONITOREMU_AUTO 1 #define MONITOREMU_A2024 2 #define MONITOREMU_GRAFFITI 3 #define MONITOREMU_HAM_E 4 -#define MONITOREMU_DCTV 5 +#define MONITOREMU_HAM_E_PLUS 5 +#define MONITOREMU_DCTV 6 #define MAX_FILTERSHADERS 4 @@ -283,6 +282,7 @@ struct gfx_filterdata int gfx_filter_gamma, gfx_filter_gamma_ch[3]; int gfx_filter_keep_aspect, gfx_filter_aspect; int gfx_filter_autoscale; + int gfx_filter_integerscalelimit; int gfx_filter_keep_autoscale_aspect; }; diff --git a/od-win32/parser.cpp b/od-win32/parser.cpp index 20f76e85..8e87bcfe 100644 --- a/od-win32/parser.cpp +++ b/od-win32/parser.cpp @@ -954,9 +954,11 @@ static int opentcp (const TCHAR *sername) goto end; } - while (tcp_is_connected () == false) { - Sleep (1000); - write_log (_T("SERIAL_TCP: waiting for connect...\n")); + if (waitmode) { + while (tcp_is_connected () == false) { + Sleep (1000); + write_log (_T("SERIAL_TCP: waiting for connect...\n")); + } } xfree (port); @@ -1532,6 +1534,13 @@ int enumserialports (void) comports[cnt]->name = my_strdup (comports[cnt]->dev); cnt++; } + if (cnt < MAX_SERPAR_PORTS) { + comports[cnt] = xcalloc(struct serparportinfo, 1); + comports[cnt]->dev = my_strdup (_T("TCP://0.0.0.0:1234/wait")); + comports[cnt]->cfgname = my_strdup (comports[cnt]->dev); + comports[cnt]->name = my_strdup (comports[cnt]->dev); + cnt++; + } write_log (_T("Parallel port enumeration..\n")); enumports_2 (parports, 0, true); diff --git a/od-win32/registry.cpp b/od-win32/registry.cpp index eaeb804c..a6e09e35 100644 --- a/od-win32/registry.cpp +++ b/od-win32/registry.cpp @@ -413,6 +413,7 @@ int reginitializeinit (TCHAR **pppath) FILE *f; TCHAR *ppath = *pppath; + inimode = 0; if (!ppath) { int ok = 0; TCHAR *posn; @@ -473,9 +474,9 @@ void regstatus (void) write_log (_T("'%s' enabled\n"), inipath); } -int getregmode (void) +const TCHAR *getregmode (void) { if (!inimode) - return 0; - return inimode; + return NULL; + return inipath; } diff --git a/od-win32/registry.h b/od-win32/registry.h index 2d248813..d00978fe 100644 --- a/od-win32/registry.h +++ b/od-win32/registry.h @@ -5,7 +5,7 @@ typedef struct UAEREG { TCHAR *inipath; } UAEREG; -extern int getregmode (void); +extern const TCHAR *getregmode (void); extern int reginitializeinit (TCHAR **path); extern void regstatus (void); diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 153b612c..9b7e1944 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -396,8 +396,6 @@ #define IDS_DISPLAY_ATTRIBUTES 403 #define IDS_NUMSG_NO_PPC 404 #define IDS_NUMSG_UAEBOOTROM_PCC 405 -#define IDS_AUTOSCALE_HALF_INTEGER 406 -#define IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE 407 #define IDS_AUTOSCALE_OVERSCAN_BLANK 408 #define IDS_QS_MODELS 1000 #define IDS_QS_MODEL_A500 1001 @@ -1204,6 +1202,7 @@ #define IDC_CS_DF0IDHW 1817 #define IDC_FILTERSTACK 1818 #define IDC_INPUTMAP_CAPTURE 1819 +#define IDC_FILTERINTEGER 1819 #define IDC_INPUTMAP_CUSTOM 1820 #define IDC_INPUTMAP_DELETE 1821 #define IDC_INPUTMAP_TEST 1822 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index e776af74..e33844ea 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -1,7 +1,7 @@ // Microsoft Visual C++ generated resource script. // -#include "winres.h" #include "resource.h" +#include "winres.h" ///////////////////////////////////////////////////////////////////////////// // English resources @@ -831,13 +831,13 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN GROUPBOX "Filter Settings",-1,1,1,393,160 - COMBOBOX IDC_FILTERMODE,9,31,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERSTACK,182,31,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERFILTER,215,31,63,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,283,31,106,14 - COMBOBOX IDC_FILTEROVERLAYTYPE,9,52,118,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTEROVERLAY,134,52,145,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERAUTOSCALE,284,52,104,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + 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 + PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,268,31,121,14 + 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_FILTERAUTOSCALE,268,52,88,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "Horiz. size:",-1,7,79,81,10,SS_CENTERIMAGE COMBOBOX IDC_FILTERHZMULT,92,78,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "Vert. size:",-1,7,100,81,10,SS_CENTERIMAGE @@ -868,7 +868,8 @@ 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_FILTER_NATIVERTG,284,12,104,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 + COMBOBOX IDC_FILTERINTEGER,361,52,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP END IDD_HARDDRIVE DIALOGEX 0, 0, 396, 109 @@ -1479,7 +1480,6 @@ BEGIN IDD_FILTER, DIALOG BEGIN - BOTTOMMARGIN, 288 END IDD_HARDDRIVE, DIALOG @@ -1967,8 +1967,6 @@ BEGIN IDS_NUMSG_NO_PPC "PPC CPU was started but PPC CPU emulation core plugin was not found. Download available from http://www.winuae.net/" IDS_NUMSG_UAEBOOTROM_PCC "PPC native OS booted with UAE boot ROM active. UAE expansions are not hardware emulated and are not PPC compatible. (UAE HD controller, uaescsi.device, uaeserial, bsdsocket and so on..)" - IDS_AUTOSCALE_HALF_INTEGER "Half-integer scaling" - IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE "Auto Half-integer scaling" IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking" END diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index 383de459..9fb16704 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -843,6 +843,7 @@ static void set_screenmode (struct RPScreenMode *sm, struct uae_prefs *p) } else if (integerscale) { hmult = vmult = 1; p->gf[0].gfx_filter_autoscale = AUTOSCALE_INTEGER; + p->gf[0].gfx_filter_integerscalelimit = 0; if (sm->dwClipFlags & RP_CLIPFLAGS_AUTOCLIP) { p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1; diff --git a/od-win32/serial_win32.cpp b/od-win32/serial_win32.cpp index 09ae885f..c5fce8aa 100644 --- a/od-win32/serial_win32.cpp +++ b/od-win32/serial_win32.cpp @@ -160,6 +160,7 @@ static int data_in_serdat; /* new data written to SERDAT */ static int data_in_serdatr; /* new data received */ static int data_in_sershift; /* data transferred from SERDAT to shift register */ static uae_u16 serdatshift; /* serial shift register */ +static uae_u16 serdatshift_masked; /* stop bit masked */ static int ovrun; static int dtr; static int serial_period_hsyncs, serial_period_hsync_counter; @@ -333,7 +334,7 @@ static void checksend(void) if (checkserwrite()) { if (ninebit) writeser(((serdatshift >> 8) & 1) | 0xa8); - writeser(serdatshift); + writeser(serdatshift_masked); } else { // buffer full, try again later sent = false; @@ -362,31 +363,39 @@ static void sersend_ce(uae_u32 v) static void serdatcopy(void) { + int bits; + if (data_in_sershift || !data_in_serdat) return; serdatshift = serdat; + bits = 8; + if ((serdatshift & 0xff80) == 0x80) { + bits = 7; + } + serdatshift_masked = serdatshift & ((1 << bits) - 1); data_in_sershift = 1; data_in_serdat = 0; INTREQ(0x8000 | 0x0001); serial_check_irq(); checksend(); + if (seriallog) { gotlogwrite = true; - write_log(_T("%c"), dochar(serdatshift)); + write_log(_T("%c"), dochar(serdatshift_masked)); } if (serper == 372) { if (enforcermode & 2) { - console_out_f(_T("%c"), dochar(serdatshift)); - if (serdatshift == 256 + 10) + console_out_f(_T("%c"), dochar(serdatshift_masked)); + if (serdatshift_masked == 10) console_out(_T("\n")); } } // if someone uses serial port as some kind of timer.. if (currprefs.cpu_cycle_exact) { - int per, bits; + int per; bits = 16 + 1; for (int i = 15; i >= 0; i--) { diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 3d4c30d3..beac687b 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -5087,10 +5087,12 @@ static void makeverstr (TCHAR *s) } } -static TCHAR *getdefaultini (void) +static TCHAR *getdefaultini (int *tempfile) { FILE *f; TCHAR path[MAX_DPATH], orgpath[MAX_DPATH]; + + *tempfile = 0; path[0] = 0; if (!GetFullPathName (_wpgmptr, sizeof path / sizeof (TCHAR), path, NULL)) _tcscpy (path, _wpgmptr); @@ -5111,6 +5113,7 @@ static TCHAR *getdefaultini (void) return my_strdup (path); } #endif + *tempfile = 1; int v = GetTempPath (sizeof path / sizeof (TCHAR), path); if (v == 0 || v > sizeof path / sizeof (TCHAR)) return my_strdup (orgpath); @@ -5324,7 +5327,8 @@ static int parseargs (const TCHAR *argx, const TCHAR *np, const TCHAR *np2) return 2; } if (!_tcscmp (arg, _T("portable"))) { - inipath = getdefaultini (); + int temp; + inipath = getdefaultini (&temp); createbootlog = false; return 2; } @@ -5598,15 +5602,16 @@ static TCHAR **WIN32_InitRegistry (TCHAR **argv) reginitializeinit (&inipath); hWinUAEKey = NULL; - if (getregmode () == 0 || WINUAEPUBLICBETA > 0) { + if (getregmode () == NULL || WINUAEPUBLICBETA > 0) { /* Create/Open the hWinUAEKey which points our config-info */ RegCreateKeyEx (HKEY_CURRENT_USER, _T("Software\\Arabuusimiehet\\WinUAE"), 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL, &hWinUAEKey, &disposition); if (hWinUAEKey == NULL) { FILE *f; TCHAR *path; + int tempfile; - path = getdefaultini (); + path = getdefaultini (&tempfile); f = _tfopen (path, _T("r")); if (!f) f = _tfopen (path, _T("w")); @@ -5622,6 +5627,33 @@ static TCHAR **WIN32_InitRegistry (TCHAR **argv) return NULL; } +bool switchreginimode(void) +{ + TCHAR *path; + const TCHAR *inipath = getregmode(); + if (inipath == NULL) { + // reg -> ini + FILE *f; + int tempfile; + + path = getdefaultini(&tempfile); + if (tempfile) + return false; + f = _tfopen (path, _T("w")); + if (f) { + fclose(f); + return reginitializeinit(&path) != 0; + } + } else { + // ini -> reg + DeleteFile(inipath); + path = NULL; + reginitializeinit(&path); + return true; + } + return false; +} + static const TCHAR *pipename = _T("\\\\.\\pipe\\WinUAE"); static bool singleprocess (void) diff --git a/od-win32/win32.h b/od-win32/win32.h index e36f70b9..a68618fa 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("15") +#define WINUAEBETA _T("16") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2015, 4, 5) +#define WINUAEDATE MAKEBD(2015, 4, 18) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32_scaler.cpp b/od-win32/win32_scaler.cpp index d3ca8737..848b89e7 100644 --- a/od-win32/win32_scaler.cpp +++ b/od-win32/win32_scaler.cpp @@ -255,8 +255,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height filterymult = scale; if (scalemode == AUTOSCALE_STATIC_MAX || scalemode == AUTOSCALE_STATIC_NOMINAL || - scalemode == AUTOSCALE_INTEGER || scalemode == AUTOSCALE_INTEGER_AUTOSCALE || - scalemode == AUTOSCALE_HALF_INTEGER || scalemode == AUTOSCALE_HALF_INTEGER_AUTOSCALE) { + scalemode == AUTOSCALE_INTEGER || scalemode == AUTOSCALE_INTEGER_AUTOSCALE) { if (specialmode) { cx = 0; @@ -280,8 +279,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height scl = true; } - if (scalemode == AUTOSCALE_INTEGER || scalemode == AUTOSCALE_INTEGER_AUTOSCALE || - scalemode == AUTOSCALE_HALF_INTEGER || scalemode == AUTOSCALE_HALF_INTEGER_AUTOSCALE) { + if (scalemode == AUTOSCALE_INTEGER || scalemode == AUTOSCALE_INTEGER_AUTOSCALE) { int maxw = currprefs.gfx_size.width; int maxh = currprefs.gfx_size.height; double mult = 1; @@ -295,12 +293,12 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height get_custom_topedge (&cx, &cy, false); } - if (scalemode == AUTOSCALE_INTEGER_AUTOSCALE || scalemode == AUTOSCALE_HALF_INTEGER_AUTOSCALE) { + if (scalemode == AUTOSCALE_INTEGER_AUTOSCALE) { ok = get_custom_limits (&cw, &ch, &cx, &cy, &crealh) != 0; if (ok) store_custom_limits (cw, ch, cx, cy); } - if (scalemode == AUTOSCALE_INTEGER || scalemode == AUTOSCALE_HALF_INTEGER || ok == false) { + if (scalemode == AUTOSCALE_INTEGER || ok == false) { getmanualpos (&cx, &cy, &cw, &ch); store_custom_limits (cw, ch, cx, cy); } @@ -317,7 +315,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height filter_horiz_zoom_mult = 1.0; filter_vert_zoom_mult = 1.0; - double multadd = (scalemode == AUTOSCALE_HALF_INTEGER || scalemode == AUTOSCALE_HALF_INTEGER_AUTOSCALE) ? 0.5 : 1.0; + double multadd = 1.0 / (1 << currprefs.gf[picasso_on].gfx_filter_integerscalelimit); if (cw2 > maxw || ch2 > maxh) { while (cw2 / mult > maxw || ch2 / mult > maxh) mult += multadd; @@ -378,7 +376,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height autoaspectratio = 0; if (currprefs.gf[picasso_on].gfx_filter_keep_autoscale_aspect && cw > 0 && ch > 0 && crealh > 0 && (scalemode == AUTOSCALE_NORMAL || - scalemode == AUTOSCALE_INTEGER_AUTOSCALE || scalemode == AUTOSCALE_HALF_INTEGER_AUTOSCALE || scalemode == AUTOSCALE_MANUAL)) { + scalemode == AUTOSCALE_INTEGER_AUTOSCALE || scalemode == AUTOSCALE_MANUAL)) { float cw2 = cw; float ch2 = ch; int res = currprefs.gfx_resolution - currprefs.gfx_vresolution; @@ -459,7 +457,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height lastdelay = 0; } float scalex = currprefs.gf[picasso_on].gfx_filter_horiz_zoom_mult > 0 ? currprefs.gf[picasso_on].gfx_filter_horiz_zoom_mult : 1.0f; - float scaley = currprefs.gf[picasso_on].gfx_filter_vert_zoom_mult > 0 ? currprefs.gf[picasso_on].gfx_filter_horiz_zoom_mult : 1.0f; + float scaley = currprefs.gf[picasso_on].gfx_filter_vert_zoom_mult > 0 ? currprefs.gf[picasso_on].gfx_filter_vert_zoom_mult : 1.0f; SetRect (sr, 0, 0, cw * scale * scalex, ch * scale * scaley); dr->left = (temp_width - aws) /2; dr->top = (temp_height - ahs) / 2; diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 870e6e82..f1e2134d 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -1873,6 +1873,7 @@ int check_prefs_changed_gfx (void) c |= gf->gfx_filter_contrast != gfc->gfx_filter_contrast ? (1) : 0; c |= gf->gfx_filter_saturation != gfc->gfx_filter_saturation ? (1) : 0; c |= gf->gfx_filter_gamma != gfc->gfx_filter_gamma ? (1) : 0; + c |= gf->gfx_filter_integerscalelimit != gfc->gfx_filter_integerscalelimit ? (1) : 0; if (j && gf->gfx_filter_autoscale != gfc->gfx_filter_autoscale) c |= 8 | 64; //c |= gf->gfx_filter_ != gfc->gfx_filter_ ? (1|8) : 0; diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 7dda287d..f3be5b34 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -5488,8 +5488,7 @@ static INT_PTR CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM CheckDlgButton(hDlg, IDC_PATHS_CONFIGCACHE, configurationcache); CheckDlgButton(hDlg, IDC_PATHS_SAVEIMAGEORIGINALPATH, saveimageoriginalpath); CheckDlgButton(hDlg, IDC_PATHS_RELATIVE, relativepaths); - CheckDlgButton(hDlg, IDC_REGISTRYMODE, getregmode() != 0); - ew(hDlg, IDC_REGISTRYMODE, FALSE); + CheckDlgButton(hDlg, IDC_REGISTRYMODE, getregmode() != NULL); currentpage = PATHS_ID; ShowWindow (GetDlgItem (hDlg, IDC_RESETREGISTRY), FALSE); numtypes = 0; @@ -5564,6 +5563,11 @@ static INT_PTR CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM switch (LOWORD (wParam)) { + case IDC_REGISTRYMODE: + bool switchreginimode(void); + switchreginimode(); + CheckDlgButton(hDlg, IDC_REGISTRYMODE, getregmode() != NULL); + break; case IDC_LOGSAVE: savelog (hDlg, 1); break; @@ -7331,6 +7335,7 @@ static INT_PTR CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)_T("A2024")); SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)_T("Graffiti")); SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)_T("HAM-E")); + SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)_T("HAM-E Plus")); //SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)_T("DCTV")); #ifndef AGA @@ -13467,9 +13472,24 @@ static void values_to_portsdlg (HWND hDlg) int i; LRESULT result = -1; for (i = 0; i < MAX_SERPAR_PORTS && comports[i]; i++) { - if (!_tcscmp (comports[i]->dev, workprefs.sername) || (!_tcsncmp (workprefs.sername, _T("TCP:"), 4) && !_tcsncmp (comports[i]->dev, workprefs.sername, 4))) { - result = SendDlgItemMessage (hDlg, IDC_SERIAL, CB_SETCURSEL, i + 1, 0L); - break; + if (!_tcsncmp (workprefs.sername, _T("TCP:"), 4) && !_tcsncmp (comports[i]->dev, workprefs.sername, 4)) { + const TCHAR *p1 = _tcschr(workprefs.sername + 4, ':'); + const TCHAR *p2 = _tcschr(comports[i]->dev + 4, ':'); + if (p1) { + p1 = _tcschr(p1 + 1, '/'); + } + if (p2) { + p2 = _tcschr(p2 + 1, '/'); + } + if ((p1 == NULL && p2 == NULL) || (p1 && p2 && !_tcsicmp(p1, p2))) { + result = SendDlgItemMessage (hDlg, IDC_SERIAL, CB_SETCURSEL, i + 1, 0L); + break; + } + } else { + if (!_tcscmp (comports[i]->dev, workprefs.sername) || (!_tcsncmp (workprefs.sername, _T("TCP:"), 4) && !_tcsncmp (comports[i]->dev, workprefs.sername, 4))) { + result = SendDlgItemMessage (hDlg, IDC_SERIAL, CB_SETCURSEL, i + 1, 0L); + break; + } } } if(result < 0 && workprefs.sername[0]) { @@ -15395,14 +15415,16 @@ static void enable_for_hw3ddlg (HWND hDlg) ew (hDlg, IDC_FILTERASPECT, v); ew (hDlg, IDC_FILTERASPECT2, v && workprefs.gf[filter_nativertg].gfx_filter_keep_aspect); ew (hDlg, IDC_FILTERKEEPAUTOSCALEASPECT, (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_NORMAL || - workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE || - workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER_AUTOSCALE)); + workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE)); ew (hDlg, IDC_FILTEROVERLAY, workprefs.gfx_api); ew (hDlg, IDC_FILTEROVERLAYTYPE, workprefs.gfx_api); ew (hDlg, IDC_FILTERPRESETSAVE, filterpreset_builtin < 0); ew (hDlg, IDC_FILTERPRESETLOAD, filterpreset_selected > 0); ew (hDlg, IDC_FILTERPRESETDELETE, filterpreset_selected > 0 && filterpreset_builtin < 0); + + ew (hDlg, IDC_FILTERINTEGER, workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER || + workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE); } static TCHAR *filtermultnames[] = { @@ -15556,6 +15578,12 @@ static void values_to_hw3ddlg (HWND hDlg) SendDlgItemMessage (hDlg, IDC_FILTERASPECT2, CB_SETCURSEL, workprefs.gf[filter_nativertg].gfx_filter_keep_aspect, 0); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_RESETCONTENT, 0, 0L); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_ADDSTRING, 0, (LPARAM)_T("1/1")); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_ADDSTRING, 0, (LPARAM)_T("1/2")); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_ADDSTRING, 0, (LPARAM)_T("1/4")); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_ADDSTRING, 0, (LPARAM)_T("1/8")); + SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_RESETCONTENT, 0, 0L); WIN32GUI_LoadUIString (IDS_AUTOSCALE_DISABLED, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); @@ -15576,12 +15604,8 @@ static void values_to_hw3ddlg (HWND hDlg) SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); WIN32GUI_LoadUIString (IDS_AUTOSCALE_INTEGER, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); - WIN32GUI_LoadUIString (IDS_AUTOSCALE_HALF_INTEGER, txt, sizeof (txt) / sizeof (TCHAR)); - SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); WIN32GUI_LoadUIString (IDS_AUTOSCALE_INTEGER_AUTOSCALE, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); - WIN32GUI_LoadUIString (IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE, txt, sizeof (txt) / sizeof (TCHAR)); - SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)_T("-")); WIN32GUI_LoadUIString (IDS_AUTOSCALE_OVERSCAN_BLANK, txt, sizeof (txt) / sizeof (TCHAR)); @@ -15597,6 +15621,7 @@ static void values_to_hw3ddlg (HWND hDlg) #endif } SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_SETCURSEL, workprefs.gf[filter_nativertg].gfx_filter_autoscale, 0); + SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_SETCURSEL, workprefs.gf[filter_nativertg].gfx_filter_integerscalelimit, 0); SendDlgItemMessage (hDlg, IDC_FILTERSTACK, CB_RESETCONTENT, 0, 0); for (i = -MAX_FILTERSHADERS; i < MAX_FILTERSHADERS; i++) { @@ -15630,9 +15655,7 @@ static void values_to_hw3ddlg (HWND hDlg) yrange1 = 0; yrange2 = 700; } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER || - workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE || - workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER || - workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER_AUTOSCALE) { + workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE) { xrange1 = -99; xrange2 = 99; yrange1 = xrange1; @@ -16195,6 +16218,14 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM enable_for_hw3ddlg (hDlg); } break; + case IDC_FILTERINTEGER: + item = SendDlgItemMessage (hDlg, IDC_FILTERINTEGER, CB_GETCURSEL, 0, 0L); + if (item != CB_ERR) { + workprefs.gf[filter_nativertg].gfx_filter_integerscalelimit = item; + values_to_hw3ddlg (hDlg); + enable_for_hw3ddlg (hDlg); + } + break; case IDC_FILTERAUTOSCALE: item = SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_GETCURSEL, 0, 0L); if (item != CB_ERR) { -- 2.47.3