]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3100b16
authorToni Wilen <twilen@winuae.net>
Sat, 18 Apr 2015 11:30:16 +0000 (14:30 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 18 Apr 2015 11:30:16 +0000 (14:30 +0300)
16 files changed:
cfgfile.cpp
debug.cpp
expansion.cpp
include/options.h
od-win32/parser.cpp
od-win32/registry.cpp
od-win32/registry.h
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/rp.cpp
od-win32/serial_win32.cpp
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32_scaler.cpp
od-win32/win32gfx.cpp
od-win32/win32gui.cpp

index 654a6d6b5b20a3644c9af5177650a586869d644a..5af28f0790f764ac0190d2e05c251708f5b55ce5 100644 (file)
@@ -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)
index 7b80be5665dcd20f09600499af271a35a845a4d0..bb0c971e1fdc3c84003cdf7a4f3ea91a11b24505 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -123,7 +123,9 @@ static TCHAR help[] = {
        _T("  fp \"<name>\"/<addr>    Step forward until process <name> or <addr> is active.\n")
        _T("  fl                    List breakpoints.\n")
        _T("  fd                    Remove all breakpoints.\n")
-       _T("  fs <val> <mask>       Break when (SR & mask) = val.\n")                   
+       _T("  fs <lines to wait> | <vpos> <hpos> Wait n scanlines/position.\n")
+       _T("  fc <CCKs to wait>     Wait n color clocks.\n")
+       _T("  fS <val> <mask>       Break when (SR & mask) = val.\n")                   
        _T("  f <addr1> <addr2>     Step forward until <addr1> <= PC <= <addr2>.\n")
        _T("  e                     Dump contents of all custom registers, ea = AGA colors.\n")
        _T("  i [<addr>]            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);
index 2aed10e9c563b9597df4cc4c11d83b34cc1606a0..8d4928edec81e2814de276abf640a4d79aeb417f 100644 (file)
@@ -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
        {
index a1510c295ff93c08d9e15da3a196f98b00c39420..bf0c7d385bd5491fc5a11c993fb37b4b3ff79c59 100644 (file)
@@ -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;
 };
 
index 20f76e8596d26466198f8adcdbdff841f5c70fdd..8e87bcfef7be3cea517c40948babb30f75fc076f 100644 (file)
@@ -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);
index eaeb804cb4eec640e44089f9865f653c8728cd80..a6e09e354188f002c3835b3155c398b4fdaea4b8 100644 (file)
@@ -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;
 }
index 2d2488137e93947d783b8b072d2a384103e289d2..d00978fe4312a584ef624451529ec7d753c01b2a 100644 (file)
@@ -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);
 
index 153b612c4cfad561d3a204d3274e271404d4c03b..9b7e1944a5950dd2e729a545dd0f263f0653a81d 100644 (file)
 #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
 #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
index e776af746e29a0bb9bd7e8fd2415e69f72f51543..e33844eacd812b84548db94c49359276e008ea3f 100644 (file)
@@ -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
 
index 383de45983ad37890370933fcb8b21ea96349897..9fb16704a6b4f72fadc63d8ed85bee449c2d38d4 100644 (file)
@@ -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;
index 09ae885f9db200da3ff25066ec867d240b46ca6c..c5fce8aae7fa101ee4d65a75f600e38fc9985761 100644 (file)
@@ -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--) {
index 3d4c30d33c5f489ee9e34245cca6bd35edb9fac2..beac687b34c03195d6a7a75e47ca9bb4258df41a 100644 (file)
@@ -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)
index e36f70b9c4cc069a75cd2ef7b11b0deb8c8a8833..a68618facd071eb7d1f4fdafa469718017dd089c 100644 (file)
 #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")
index d3ca873752662c2d4ed213ab51b5aec61ec56016..848b89e7c1e37c7eac52b4dc6f6cc489f209866c 100644 (file)
@@ -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;
index 870e6e8273e67f0d8acf7b5f6bff2984651eb5ef..f1e2134db2befde52b8b60502572a9b72d3b4b12 100644 (file)
@@ -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;
index 7dda287d392dfdc998a3954ae0ddf303943531d6..f3be5b347b98e94811cd5ce21437ab793962605f 100644 (file)
@@ -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) {