cfgfile_write_bool (f, L"serial_on_demand", p->serial_demand);
cfgfile_write_bool (f, L"serial_hardware_ctsrts", p->serial_hwctsrts);
cfgfile_write_bool (f, L"serial_direct", p->serial_direct);
+ cfgfile_dwrite (f, L"serial_stopbits", L"%d", p->serial_stopbits);
cfgfile_write_str (f, L"scsi", scsimode[p->scsi]);
cfgfile_write_bool (f, L"uaeserial", p->uaeserial);
cfgfile_write_bool (f, L"sana2", p->sana2);
return 1;
if (cfgfile_intval (option, value, L"cachesize", &p->cachesize, 1)
+ || cfgfile_intval (option, value, L"serial_stopbits", &p->serial_stopbits, 1)
|| cfgfile_intval (option, value, L"cpu060_revision", &p->cpu060_revision, 1)
|| cfgfile_intval (option, value, L"fpu_revision", &p->fpu_revision, 1)
|| cfgfile_intval (option, value, L"cdtvramcard", &p->cs_cdtvcard, 1)
p->use_serial = 0;
p->serial_demand = 0;
p->serial_hwctsrts = 1;
+ p->serial_stopbits = 0;
p->parallel_demand = 0;
p->parallel_matrix_emulation = 0;
p->parallel_postscript_emulation = 0;
}
if (currprefs.cs_ciaatod == 0)
- rate = vblank_hz;
+ rate = (int)(vblank_hz + 0.5);
else if (currprefs.cs_ciaatod == 1)
rate = 50;
else
static int maxvpos_total = 511;
int minfirstline = VBLANK_ENDLINE_PAL;
int equ_vblank_endline = EQU_ENDLINE_PAL;
-double vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz;
+double vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz, vblank_hz_stored;
int vblank_skip, doublescan;
frame_time_t syncbase;
static int fmode;
uae_u16 beamcon0, new_beamcon0;
uae_u16 vtotal = MAXVPOS_PAL, htotal = MAXHPOS_PAL;
-static int maxvpos_stored, maxhpos_stored, vblank_hz_stored;
+static int maxvpos_stored, maxhpos_stored;
static uae_u16 hsstop, hbstrt, hbstop, vsstop, vbstrt, vbstop, hsstrt, vsstrt, hcenter;
static int ciavsyncmode;
static int diw_hstrt, diw_hstop;
interlace_seen = (bplcon0 & 4) ? 1 : 0;
reset_drawing ();
}
- if (DBLEQU (vblank_hz, 50) || DBLEQU (vblank_hz, 60) && isvsync () == 2) {
+ if ((DBLEQU (vblank_hz, 50) || DBLEQU (vblank_hz, 60)) && isvsync () == 2) {
if (getvsyncrate (currprefs.gfx_refreshrate) != vblank_hz)
vsync_switchmode (vblank_hz, currprefs.gfx_refreshrate);
}
bool serial_demand;
bool serial_hwctsrts;
bool serial_direct;
+ int serial_stopbits;
bool parallel_demand;
int parallel_matrix_emulation;
bool parallel_postscript_emulation;
#endif
-#define DBLEQU(f, i) (abs ((f) - (i)) < 0.0001)
\ No newline at end of file
+#define DBLEQU(f, i) (abs ((f) - (i)) < 0.000001)
\ No newline at end of file
uae_u8 *realbufmem;
uae_u8 *linemem;
uae_u8 *emergmem;
+ bool bufmem_allocated;
int rowbytes; /* Bytes per row in the memory pointed at by bufmem. */
int pixbytes; /* Bytes per pixel. */
int width;
flag |= (flags & IDEV_MAPPED_TOGGLE) ? ID_FLAG_TOGGLE : 0;
flag |= (flags & IDEV_MAPPED_INVERTTOGGLE) ? ID_FLAG_INVERTTOGGLE : 0;
}
- flag |= (flags & ID_FLAG_GAMEPORTSCUSTOM1) ? ID_FLAG_GAMEPORTSCUSTOM1 : 0;
- flag |= (flags & ID_FLAG_GAMEPORTSCUSTOM2) ? ID_FLAG_GAMEPORTSCUSTOM2 : 0;
+ flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM1) ? ID_FLAG_GAMEPORTSCUSTOM1 : 0;
+ flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM2) ? ID_FLAG_GAMEPORTSCUSTOM2 : 0;
if (port >= 0)
portp = port;
put_event_data (idf, devindex, num, eid, custom, flag, portp, sub);
{
avioutput_width = avioutput_height = avioutput_bits = 0;
- avioutput_fps = vblank_hz;
+ avioutput_fps = (int)(vblank_hz + 0.5);
if (!avioutput_fps)
avioutput_fps = ispal () ? 50 : 60;
if (avioutput_originalsize)
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.fParity = FALSE;
- dcb.StopBits = ONESTOPBIT;
+ dcb.StopBits = currprefs.serial_stopbits;
dcb.fDsrSensitivity = FALSE;
dcb.fOutxDsrFlow = FALSE;
}
}
- if (j < MAX_SERPAR_PORTS) {
- comports[j].dev = my_strdup (L"TCP://0.0.0.0:1234");
- comports[j].cfgname = my_strdup (comports[j].dev);
- comports[j].name = my_strdup (comports[j].dev);
+ if (cnt < MAX_SERPAR_PORTS) {
+ comports[cnt].dev = my_strdup (L"TCP://0.0.0.0:1234");
+ comports[cnt].cfgname = my_strdup (comports[cnt].dev);
+ comports[cnt].name = my_strdup (comports[cnt].dev);
cnt++;
}
#define IDC_DISPLAYSELECT 1024
#define IDC_AUTOCONFIG 1025
#define IDC_PRINTERLIST 1025
-#define IDC_RESOLUTION3 1025
#define IDC_RESOLUTIONDEPTH 1025
#define IDC_CHIPMEM 1026
#define IDC_CREATELOGFILE 1026
#define IDC_PORT3_JOYS 1032
#define IDC_PARALLEL 1033
#define IDC_PORT0_AF 1033
-#define IDC_PORT0_AF2 1034
#define IDC_PORT1_AF 1034
#define IDC_JULIAN 1040
#define IDC_FOCUSMINIMIZE 1041
#define IDC_RICHEDIT2 1092
#define IDC_CONTRIBUTORS 1124
#define IDC_BLACKER_THAN_BLACK 1170
-#define IDC_BLIT32 1173
#define IDC_BLITIMM 1174
#define IDC_LORES 1176
#define IDC_LORES_SMOOTHED 1179
#define IDC_DF1TYPE 1596
#define IDC_DF2TYPE 1597
#define IDC_SOUNDSPEEDSLIDER 1598
-#define IDC_DF0TYPE4 1598
#define IDC_DF3TYPE 1598
#define IDC_SOUNDSPEEDTEXT 1599
#define IDC_SOUNDSPEEDCAPTION 1600
CONTROL "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,17,125,92,10\r
LTEXT "Refresh:",IDC_REFRESHTEXT,18,173,28,8\r
CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,168,75,20\r
- EDITTEXT IDC_RATETEXT,124,172,77,12,ES_CENTER | ES_READONLY\r
+ EDITTEXT IDC_RATETEXT,126,172,79,12,ES_CENTER | ES_READONLY\r
GROUPBOX "Centering",IDC_STATIC,221,73,61,49\r
CONTROL "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,87,49,10\r
CONTROL "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,103,49,10\r
COMBOBOX IDC_DA_MODE,20,218,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,214,101,20\r
LTEXT "FPS adj.:",IDC_REFRESH2TEXT,16,193,32,8\r
- CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,127,20\r
- EDITTEXT IDC_RATE2TEXT,175,192,26,12,ES_CENTER | ES_READONLY\r
+ CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,109,20\r
+ EDITTEXT IDC_RATE2TEXT,159,192,46,12,ES_AUTOHSCROLL\r
COMBOBOX IDC_RESOLUTIONDEPTH,134,27,46,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
CONTROL "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,125,89,10\r
- COMBOBOX IDC_SCREENMODE_NATIVE,100,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_SCREENMODE_RTG,100,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+ COMBOBOX IDC_SCREENMODE_NATIVE,103,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+ COMBOBOX IDC_SCREENMODE_RTG,103,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
RTEXT "Native mode:",IDC_STATIC,19,85,59,15,SS_CENTERIMAGE\r
RTEXT "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE\r
PUSHBUTTON "Reset to defaults",IDC_DA_RESET,212,218,73,14\r
RTEXT "Resolution:",IDC_STATIC,27,152,59,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_LORES,100,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+ COMBOBOX IDC_LORES,103,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
CONTROL "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,139,99,10\r
RTEXT "Windowed:",IDC_STATIC,17,46,40,15,SS_CENTERIMAGE\r
RTEXT "Fullscreen:",IDC_STATIC,17,19,40,15,SS_CENTERIMAGE\r
data_in_serdatr = 1;
serial_check_irq ();
#if SERIALDEBUG > 2
- write_log (L"SERIAL: received %02X (%c)\n", serdatr & 0xff, doTCHAR (serdatr));
+ write_log (L"SERIAL: received %02X (%c)\n", serdatr & 0xff, dochar (serdatr));
#endif
#endif
}
data_in_serdatr = 1;
serial_check_irq ();
#if SERIALDEBUG > 2
- write_log (L"SERIAL: received %02X (%c)\n", serdatr & 0xff, doTCHAR (serdatr));
+ write_log (L"SERIAL: received %02X (%c)\n", serdatr & 0xff, dochar (serdatr));
#endif
#endif
}
data_in_serdat = 0;
INTREQ (0x8000 | 0x0001);
#if SERIALDEBUG > 2
- write_log (L"SERIAL: send %04X (%c)\n", serdatshift, doTCHAR (serdatshift));
+ write_log (L"SERIAL: send %04X (%c)\n", serdatshift, dochar (serdatshift));
#endif
}
}
checksend (1);
#if SERIALDEBUG > 2
- write_log (L"SERIAL: wrote 0x%04x (%c) PC=%x\n", w, doTCHAR (w), M68K_GETPC);
+ write_log (L"SERIAL: wrote 0x%04x (%c) PC=%x\n", w, dochar (w), M68K_GETPC);
#endif
return;
if (ovrun)
serdatr |= 0x8000;
#if SERIALDEBUG > 2
- write_log ( "SERIAL: read 0x%04x (%c) %x\n", serdatr, doTCHAR (serdatr), M68K_GETPC);
+ write_log (L"SERIAL: read 0x%04x (%c) %x\n", serdatr, dochar (serdatr), M68K_GETPC);
#endif
ovrun = 0;
data_in_serdatr = 0;
#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
-#define WINUAEBETA L"5"
-#define WINUAEDATE MAKEBD(2011, 4, 16)
+#define WINUAEBETA L"6"
+#define WINUAEDATE MAKEBD(2011, 4, 23)
#define WINUAEEXTRA L""
#define WINUAEREV L""
currentmode->current_height != wc->current_height ||
currentmode->current_depth != wc->current_depth)
return -1;
+ if (!gfxvidinfo.bufmem_allocated)
+ return -1;
}
} else if (isfullscreen () == 0) {
/* windowed to windowed */
S2X_free ();
#endif
xfree (gfxvidinfo.realbufmem);
- gfxvidinfo.realbufmem = 0;
+ gfxvidinfo.bufmem_allocated = false;
+ gfxvidinfo.realbufmem = NULL;
DirectDraw_Release ();
close_hwnds ();
}
currentmode->amiga_height = currentmode->current_height;
}
gfxvidinfo.pixbytes = currentmode->current_depth >> 3;
- gfxvidinfo.bufmem = 0;
- gfxvidinfo.linemem = 0;
+ gfxvidinfo.bufmem = NULL;
+ gfxvidinfo.linemem = NULL;
gfxvidinfo.width = (currentmode->amiga_width + 7) & ~7;
gfxvidinfo.height = currentmode->amiga_height;
gfxvidinfo.maxblocklines = 0; // flush_screen actually does everything
xfree (gfxvidinfo.realbufmem);
gfxvidinfo.realbufmem = NULL;
gfxvidinfo.bufmem = NULL;
+ gfxvidinfo.bufmem_allocated = false;
if (!screen_is_picasso) {
if ((currentmode->flags & DM_DDRAW) && !(currentmode->flags & (DM_D3D | DM_SWSCALE))) {
- ;
+ gfxvidinfo.bufmem_allocated = true;
} else if (currentmode->flags & DM_SWSCALE) {
gfxvidinfo.bufmem = gfxvidinfo.realbufmem + (w + (w * 2) * h) * gfxvidinfo.pixbytes;
gfxvidinfo.rowbytes = w * 2 * gfxvidinfo.pixbytes;
gfxvidinfo.bufmemend = gfxvidinfo.realbufmem + size - gfxvidinfo.rowbytes;
+ gfxvidinfo.bufmem_allocated = true;
} else if (currentmode->flags & DM_D3D) {
gfxvidinfo.bufmem = gfxvidinfo.realbufmem;
gfxvidinfo.rowbytes = currentmode->amiga_width * gfxvidinfo.pixbytes;
gfxvidinfo.bufmemend = gfxvidinfo.bufmem + size;
+ gfxvidinfo.bufmem_allocated = true;
}
init_row_map ();
ew (hDlg, IDC_YCENTER, TRUE);
ew (hDlg, IDC_LM_SCANLINES, TRUE);
ew (hDlg, IDC_FRAMERATE2, !workprefs.gfx_avsync);
+ ew (hDlg, IDC_RATE2TEXT, !workprefs.gfx_avsync);
ew (hDlg, IDC_FRAMERATE, !workprefs.cpu_cycle_exact);
ew (hDlg, IDC_LORES, !workprefs.gfx_autoresolution);
ew (hDlg, IDC_LM_NORMAL, !workprefs.gfx_autoresolution);
if (abs (d) < 1)
d = currprefs.ntscmode ? 60.0 : 50.0;
SendDlgItemMessage (hDlg, IDC_FRAMERATE2, TBM_SETPOS, TRUE, (LPARAM)d);
- _stprintf (buffer, L"%0.2f", d);
+ _stprintf (buffer, L"%0.6f", d);
SetDlgItemText (hDlg, IDC_RATE2TEXT, buffer);
v = workprefs.cpu_cycle_exact ? 1 : workprefs.gfx_framerate;
int gfx_width = workprefs.gfx_size_win.width;
int gfx_height = workprefs.gfx_size_win.height;
LRESULT posn;
+ bool updaterate = false;
+ TCHAR tmp[200];
display_fromselect (SendDlgItemMessage (hDlg, IDC_SCREENMODE_NATIVE, CB_GETCURSEL, 0, 0),
&workprefs.gfx_afullscreen, &workprefs.gfx_avsync, 0);
workprefs.gfx_scanlines = ischecked (hDlg, IDC_LM_SCANLINES);
workprefs.gfx_backbuffers = SendDlgItemMessage (hDlg, IDC_DISPLAY_BUFFERCNT, CB_GETCURSEL, 0, 0);
workprefs.gfx_framerate = SendDlgItemMessage (hDlg, IDC_FRAMERATE, TBM_GETPOS, 0, 0);
- workprefs.chipset_refreshrate = (double)SendDlgItemMessage (hDlg, IDC_FRAMERATE2, TBM_GETPOS, 0, 0);
- {
- TCHAR buffer[MAX_FRAMERATE_LENGTH];
- TCHAR Nth[MAX_NTH_LENGTH];
- TCHAR *blah[1] = { Nth };
- TCHAR *string = NULL;
-
- WIN32GUI_LoadUIString(IDS_FRAMERATE, buffer, MAX_FRAMERATE_LENGTH);
- LoadNthString(workprefs.gfx_framerate - 1, Nth, MAX_NTH_LENGTH);
- if(FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_ALLOCATE_BUFFER,
- buffer, 0, 0, (LPTSTR)&string, MAX_FRAMERATE_LENGTH + MAX_NTH_LENGTH, (va_list *)blah ) == 0)
- {
- DWORD dwLastError = GetLastError();
- _stprintf (buffer, L"Every %s Frame", nth[workprefs.gfx_framerate - 1]);
- SetDlgItemText(hDlg, IDC_RATETEXT, buffer);
- }
- else
- {
- SetDlgItemText(hDlg, IDC_RATETEXT, string);
- LocalFree(string);
+ if (msg == WM_HSCROLL) {
+ i = SendDlgItemMessage (hDlg, IDC_FRAMERATE2, TBM_GETPOS, 0, 0);
+ if (i != (int)workprefs.chipset_refreshrate)
+ workprefs.chipset_refreshrate = (double)i;
+ updaterate = true;
+ } else if (LOWORD (wParam) == IDC_RATE2TEXT && HIWORD (wParam) == EN_KILLFOCUS) {
+ if (GetDlgItemText(hDlg, IDC_RATE2TEXT, tmp, sizeof tmp / sizeof (TCHAR))) {
+ workprefs.chipset_refreshrate = _tstof (tmp);
+ SendDlgItemMessage (hDlg, IDC_FRAMERATE2, TBM_SETPOS, TRUE, (LPARAM)workprefs.chipset_refreshrate);
+ updaterate = true;
}
- _stprintf (buffer, L"%.02f", workprefs.chipset_refreshrate);
+ }
+
+ if (workprefs.chipset_refreshrate > 0 && workprefs.chipset_refreshrate < 1) {
+ workprefs.chipset_refreshrate = currprefs.ntscmode ? 60.0 : 50.0;
+ updaterate = true;
+ }
+ if (workprefs.chipset_refreshrate > 300) {
+ workprefs.chipset_refreshrate = currprefs.ntscmode ? 60.0 : 50.0;
+ updaterate = true;
+ }
+
+ TCHAR buffer[MAX_FRAMERATE_LENGTH];
+ TCHAR Nth[MAX_NTH_LENGTH];
+ TCHAR *blah[1] = { Nth };
+ TCHAR *string = NULL;
+
+ WIN32GUI_LoadUIString(IDS_FRAMERATE, buffer, MAX_FRAMERATE_LENGTH);
+ LoadNthString(workprefs.gfx_framerate - 1, Nth, MAX_NTH_LENGTH);
+ if(FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ buffer, 0, 0, (LPTSTR)&string, MAX_FRAMERATE_LENGTH + MAX_NTH_LENGTH, (va_list *)blah ) == 0) {
+ DWORD dwLastError = GetLastError();
+ _stprintf (buffer, L"Every %s Frame", nth[workprefs.gfx_framerate - 1]);
+ SetDlgItemText(hDlg, IDC_RATETEXT, buffer);
+ } else {
+ SetDlgItemText(hDlg, IDC_RATETEXT, string);
+ LocalFree(string);
+ }
+ if (updaterate) {
+ _stprintf (buffer, L"%.06f", workprefs.chipset_refreshrate);
SetDlgItemText (hDlg, IDC_RATE2TEXT, buffer);
- workprefs.gfx_size_win.width = GetDlgItemInt(hDlg, IDC_XSIZE, &success, FALSE);
- if(!success)
- workprefs.gfx_size_win.width = 800;
- workprefs.gfx_size_win.height = GetDlgItemInt(hDlg, IDC_YSIZE, &success, FALSE);
- if(!success)
- workprefs.gfx_size_win.height = 600;
- }
- if (abs (workprefs.chipset_refreshrate - (currprefs.ntscmode ? 60.0 : 50.0)) < 0.0001)
+ }
+ workprefs.gfx_size_win.width = GetDlgItemInt (hDlg, IDC_XSIZE, &success, FALSE);
+ if(!success)
+ workprefs.gfx_size_win.width = 800;
+ workprefs.gfx_size_win.height = GetDlgItemInt (hDlg, IDC_YSIZE, &success, FALSE);
+ if(!success)
+ workprefs.gfx_size_win.height = 600;
+
+ if (DBLEQU (workprefs.chipset_refreshrate, currprefs.ntscmode ? 60.0 : 50.0))
workprefs.chipset_refreshrate = 0.0;
workprefs.gfx_xcenter = ischecked (hDlg, IDC_XCENTER) ? 2 : 0; /* Smart centering */
workprefs.gfx_ycenter = ischecked (hDlg, IDC_YCENTER) ? 2 : 0; /* Smart centering */
+Beta 6:
+
+- Display panel overwrites chipset_refreshrate decimal part only when slider is adjusted
+- Display panel directly accepts non-integer refresh rates
+- last serial port device was not listed (b1)
+- added serial_stopbits configuration parameter, sets Paula serial port emulation stop bit length.
+ (0 = 1bit, 1 = 1.5bits, 2 = 2bits) Technically it should always work but at least some USB
+ adapters don't seem to reliably read Amiga serial data at 19200 without setting it to 1 or 2.
+ (interestingly for example 115200 works fine, this is quite confusing)
+- Gameports panel remapping fixed (b4)
+- avioutput refresh rate was not rounded to nearest integer (b5)
+- fixed crash when switching from RTG mode to native mode (old bug, only in specific combination of filter and display settings)
+
Beta 5:
- floppy step signal's previous state was not restored properly from statefile (possible one skipped