_tcscat(tmp2, _T(","));
_stprintf(tmp2 + _tcslen(tmp2), _T("monitor=%d"), rbc->monitor_id);
}
+ if (!rbc->autoswitch) {
+ if (tmp2)
+ _tcscat(tmp2, _T(","));
+ _tcscat(tmp2 + _tcslen(tmp2), _T("noautoswitch"));
+ }
if (tmp2[0]) {
if (i > 0)
_stprintf(tmp, _T("gfxcard%d_options"), i + 1);
rbc->monitor_id = _tstol(s);
xfree(s);
}
+ rbc->autoswitch = !cfgfile_option_find(value, _T("noautoswitch"));
+ if (cfgfile_option_find(value, _T("autoswitch"))) {
+ rbc->autoswitch = true;
+ }
return 1;
}
if (i > 0)
}
}
#endif
- if (!gb->board->hasswitcher && gb->vram) {
+ if ((!gb->board->hasswitcher && gb->rbc->autoswitch) && gb->vram) {
bool svga_on(void *p);
bool on = svga_on(gb->pcemobject2);
set_monswitch(gb, on);
return gb->board->configtype;
}
+bool gfxboard_get_switcher(struct rtgboardconfig *rbc)
+{
+ int type = rbc->rtgmem_type;
+ if (type < GFXBOARD_HARDWARE)
+ return true;
+ const struct gfxboard *b = find_board(type);
+ return b->hasswitcher;
+}
+
bool gfxboard_need_byteswap (struct rtgboardconfig *rbc)
{
int type = rbc->rtgmem_type;
extern int gfxboard_get_vram_max (struct rtgboardconfig*);
extern bool gfxboard_need_byteswap (struct rtgboardconfig*);
extern int gfxboard_get_autoconfig_size(struct rtgboardconfig*);
+extern bool gfxboard_get_switcher(struct rtgboardconfig *rbc);
extern double gfxboard_get_vsync (void);
extern void gfxboard_refresh (int monid);
extern int gfxboard_toggle (int monid, int mode, int msg);
uae_u32 rtgmem_size;
int device_order;
int monitor_id;
+ bool autoswitch;
};
struct boardloadfile
{
#define IDC_RTG_INTEGERSCALE 1801
#define IDC_INFOBOX_TEXT2 1802
#define IDC_INPUTMAPOUTM 1802
+#define IDC_RTG_SWITCHER 1802
#define IDC_INFOBOX_TEXT1 1803
#define IDC_INFOBOX_TEXT3 1804
#define IDC_CD_EJECT 1804
CONTROL "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,103,20
EDITTEXT IDC_P96RAM,201,97,40,12,ES_CENTER | ES_READONLY
CONTROL "Scale if smaller than display size setting",IDC_RTG_SCALE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,130,175,10
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,130,162,10
CONTROL "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,143,162,10
CONTROL "Always center",IDC_RTG_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,156,162,10
CONTROL "Integer scaling",IDC_RTG_INTEGERSCALE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,169,161,10
- CONTROL "Multithreaded",IDC_RTG_THREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,143,83,10
+ CONTROL "Multithreaded",IDC_RTG_THREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,143,96,10
CONTROL "Hardware sprite emulation",IDC_RTG_HWSPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,156,96,10
CONTROL "Hardware vertical blank interrupt",IDC_RTG_VBINTERRUPT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,169,129,10
COMBOBOX IDC_RTG_BUFFERCNT,153,227,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CTEXT "Aspect ratio:",IDC_STATIC,282,212,83,10,SS_CENTERIMAGE
COMBOBOX IDC_RTG_SCALE_ASPECTRATIO,282,227,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Native/RTG autoswitch",IDC_RTG_SWITCHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,130,95,10
END
IDD_INPUTMAP DIALOGEX 0, 0, 421, 293
static void enable_for_expansiondlg(HWND hDlg)
{
+ struct rtgboardconfig *rbc = &workprefs.rtgboards[gui_rtg_index];
int z3 = true;
int en;
ew(hDlg, IDC_RTG_VBINTERRUPT, rtg3);
ew(hDlg, IDC_RTG_THREAD, rtg3 && en);
ew(hDlg, IDC_RTG_HWSPRITE, rtg3);
+
+ ew(hDlg, IDC_RTG_SWITCHER, rbc->rtgmem_size > 0 && !gfxboard_get_switcher(rbc));
}
static void values_to_expansiondlg(HWND hDlg)
CheckDlgButton(hDlg, IDC_RTG_VBINTERRUPT, workprefs.rtg_hardwareinterrupt);
CheckDlgButton(hDlg, IDC_RTG_HWSPRITE, workprefs.rtg_hardwaresprite);
CheckDlgButton(hDlg, IDC_RTG_THREAD, workprefs.rtg_multithread);
+ CheckDlgButton(hDlg, IDC_RTG_SWITCHER, rbc->rtgmem_size > 0 && (rbc->autoswitch || gfxboard_get_switcher(rbc) || rbc->rtgmem_type < GFXBOARD_HARDWARE));
xSendDlgItemMessage(hDlg, IDC_RTG_SCALE_ASPECTRATIO, CB_SETCURSEL,
(workprefs.win32_rtgscaleaspectratio == 0) ? 0 :
case IDC_RTG_THREAD:
workprefs.rtg_multithread = ischecked(hDlg, IDC_RTG_THREAD);
break;
+ case IDC_RTG_SWITCHER:
+ {
+ struct rtgboardconfig *rbc = &workprefs.rtgboards[gui_rtg_index];
+ rbc->autoswitch = ischecked(hDlg, IDC_RTG_SWITCHER);
+ break;
+ }
}
if (HIWORD (wParam) == CBN_SELENDOK || HIWORD (wParam) == CBN_KILLFOCUS || HIWORD (wParam) == CBN_EDITCHANGE) {
uae_u32 mask = workprefs.picasso96_modeflags;