Bit8u r, g, b;
getcolor (Tpage, Tcpage, x, y, Tpage_pitch, &r, &g, &b);
if (r != 255 || g != 255 || b != 255)
- SetPixel (TmemHDC, x, y, (r << 16) | (g << 8) | b);
+ SetPixel (TmemHDC, x, y, RGB(r, g, b));
}
}
extern uae_u32 p96_rgbx16[65536];
extern int graphics_setup (void);
-extern int graphics_init (void);
+extern int graphics_init (bool);
extern void graphics_leave (void);
extern void handle_events (void);
extern int handle_msgpump (void);
}
goto root_found;
} else {
- /* Unknown supplementary volume descriptor */
- sec = NULL;
+ /* Unknown supplementary volume descriptor */
+ sec = NULL;
}
}
} else {
gui_update ();
- if (graphics_init ()) {
+ if (graphics_init (true)) {
setup_brkhandler ();
if (currprefs.start_debugger && debuggable ())
activate_debugger ();
cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles = adjust_cycles (cpu_cycles);
if (r->spcflags) {
- if (do_specialties (cpu_cycles))
+ if (do_specialties (cpu_cycles)) {
+ regs.ipl = regs.ipl_pin;
return;
+ }
}
regs.ipl = regs.ipl_pin;
- if (!currprefs.cpu_compatible || (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000))
+ if (!currprefs.cpu_compatible || (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68000))
return;
}
}
}
}
-// full prefetch
+// full prefetch 020+
static void m68k_run_2p (void)
{
struct regstruct *r = ®s;
cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles = adjust_cycles (cpu_cycles);
if (r->spcflags) {
- if (do_specialties (cpu_cycles))
+ if (do_specialties (cpu_cycles)) {
+ ipl_fetch ();
return;
+ }
}
+ ipl_fetch ();
}
}
vres = max_vert_dbl;
vres += getmult (vmult, &half);
+#if 0
if (hres > RES_SUPERHIRES)
hres = RES_SUPERHIRES;
if (vres > VRES_QUAD)
vres = VRES_QUAD;
+#endif
- if (hres == RES_HIRES) {
+ if (hres == RES_SUPERHIRES) {
m = half ? RP_SCREENMODE_SCALE_3X : RP_SCREENMODE_SCALE_2X;
- } else if (hres >= RES_SUPERHIRES) {
+ } else if (hres >= RES_SUPERHIRES + 1) {
m = half ? RP_SCREENMODE_SCALE_3X : RP_SCREENMODE_SCALE_4X;
+ } else {
+ m = RP_SCREENMODE_SCALE_1X;
}
sm->lClipLeft = p->gfx_xcenter_pos < 0 ? -1 : p->gfx_xcenter_pos;
if (smm == RP_SCREENMODE_SCALE_3X) {
- hdbl = RES_HIRES;
- vdbl = VRES_DOUBLE;
+ hdbl = RES_SUPERHIRES;
+ vdbl = VRES_QUAD;
hmult = 1.5;
vmult = 1.5;
half = true;
half = false;
if (smm == RP_SCREENMODE_SCALE_2X) {
- hdbl = RES_HIRES;
- vdbl = VRES_DOUBLE;
- } else if (smm == RP_SCREENMODE_SCALE_4X) {
+ // 2X
hdbl = RES_SUPERHIRES;
vdbl = VRES_QUAD;
+ } else if (smm == RP_SCREENMODE_SCALE_4X) {
+ // 4X
+ hdbl = RES_SUPERHIRES + 1;
+ vdbl = VRES_QUAD + 1;
} else {
- hdbl = RES_LORES;
- vdbl = VRES_NONDOUBLE;
+ // 1X
+ hdbl = RES_HIRES;
+ vdbl = VRES_DOUBLE;
}
if (smm > RP_SCREENMODE_SCALE_4X || smm == RP_SCREENMODE_SCALE_MAX) {
return 0;
case WM_RBUTTONDOWN:
case WM_RBUTTONDBLCLK:
- if (dinput_winmouse () >= 0 && isfocus ())
+ if (dinput_winmouse () >= 0 && isfocus () > 0)
setmousebuttonstate (dinput_winmouse (), 1, 1);
return 0;
case WM_MBUTTONUP:
if (mouseactive)
setmouseactive (0);
} else {
- if (dinput_winmouse () >= 0 && isfocus ())
+ if (dinput_winmouse () >= 0 && isfocus () > 0)
setmousebuttonstate (dinput_winmouse (), 2, 1);
}
return 0;
return 0;
case WM_XBUTTONDOWN:
case WM_XBUTTONDBLCLK:
- if (dinput_winmouse () >= 0 && isfocus ()) {
+ if (dinput_winmouse () >= 0 && isfocus () > 0) {
handleXbutton (wParam, 1);
return TRUE;
}
return 0;
case WM_MOUSEWHEEL:
- if (dinput_winmouse () >= 0 && isfocus ()) {
+ if (dinput_winmouse () >= 0 && isfocus () > 0) {
int val = ((short)HIWORD (wParam));
setmousestate (dinput_winmouse (), 2, val, 0);
if (val < 0)
}
return 0;
case WM_MOUSEHWHEEL:
- if (dinput_winmouse () >= 0 && isfocus ()) {
+ if (dinput_winmouse () >= 0 && isfocus () > 0) {
int val = ((short)HIWORD (wParam));
setmousestate (dinput_winmouse (), 3, val, 0);
if (val < 0)
#endif
case WM_DWMCOMPOSITIONCHANGED:
case WM_THEMECHANGED:
- WIN32GFX_DisplayChangeRequested ();
+ WIN32GFX_DisplayChangeRequested (-1);
return 0;
case WM_GETMINMAXINFO:
while (checkIPC (globalipc, &currprefs));
#endif
if (was_paused) {
+ pause_emulation = was_paused;
resumepaused (was_paused);
sound_closed = 0;
manual_painting_needed--;
#define LANG_DLL 1
//#define WINUAEBETA _T("")
-#define WINUAEBETA _T("1")
-#define WINUAEDATE MAKEBD(2012, 12, 10)
+#define WINUAEBETA _T("2")
+#define WINUAEDATE MAKEBD(2012, 12, 12)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
#define WINUAEREV _T("")
}
-static int open_windows (int full)
+static int open_windows (bool full)
{
static bool started = false;
int ret, i;
return wi.rcWindow.bottom - wi.rcWindow.top;
}
-void WIN32GFX_DisplayChangeRequested (void)
+void WIN32GFX_DisplayChangeRequested (int mode)
{
- display_change_requested = 1;
+ display_change_requested = mode;
}
int check_prefs_changed_gfx (void)
if (display_change_requested || c)
{
+ bool setpause = false;
+ bool dontcapture = false;
int keepfsmode =
currprefs.gfx_apmode[0].gfx_fullscreen == changed_prefs.gfx_apmode[0].gfx_fullscreen &&
currprefs.gfx_apmode[1].gfx_fullscreen == changed_prefs.gfx_apmode[1].gfx_fullscreen;
if (display_change_requested) {
c = 2;
keepfsmode = 0;
+ if (display_change_requested <= -1) {
+ dontcapture = true;
+ if (display_change_requested == -2)
+ setpause = true;
+ if (pause_emulation)
+ setpause = true;
+ }
display_change_requested = 0;
}
unacquired = true;
}
close_windows ();
- graphics_init ();
+ graphics_init (false);
graphics_mode_changed = 1;
}
init_custom ();
reset_sound ();
resume_sound ();
}
+
+ if (setpause || dontcapture) {
+ if (!unacquired)
+ inputdevice_unacquire ();
+ unacquired = false;
+ }
+
if (unacquired)
inputdevice_acquire (TRUE);
+
+ if (setpause)
+ setpaused (1);
+
return 1;
}
#endif
}
-int graphics_init (void)
+int graphics_init (bool first)
{
systray (hHiddenWnd, TRUE);
systray (hHiddenWnd, FALSE);
gfxmode_reset ();
graphics_mode_changed = 1;
- return open_windows (1);
+ return open_windows (first);
}
int graphics_setup (void)
}
if (currprefs.win32_statusbar == 0)
return;
+ if (currentmode->flags & DM_W_FULLSCREEN)
+ return;
+#ifdef RETROPLATFORMR
+ if (rp_isactive ())
+ return;
+#endif
+ if (currprefs.win32_borderless)
+ return;
+
hStatusWnd = CreateWindowEx (
0, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE,
0, 0, 0, 0, hMainWnd, (HMENU) 1, hInst, NULL);
GetWindowRect (hMainWnd, &rc2);
window_extra_width = rc2.right - rc2.left - currentmode->current_width;
window_extra_height = rc2.bottom - rc2.top - currentmode->current_height;
- if (!(currentmode->flags & DM_W_FULLSCREEN))
- createstatuswindow ();
+ createstatuswindow ();
} else {
x = rc.left;
y = rc.top;
int WIN32GFX_GetWidth (void);
int WIN32GFX_GetHeight(void);
int WIN32GFX_GetDepth (int real);
-void WIN32GFX_DisplayChangeRequested (void);
+void WIN32GFX_DisplayChangeRequested (int);
void WIN32GFX_DisablePicasso (void);
void WIN32GFX_EnablePicasso (void);
void WIN32GFX_WindowMove (void);
ew (hDlg, IDC_CPU_FREQUENCY, workprefs.cpu_cycle_exact);
ew (hDlg, IDC_CPU_FREQUENCY2, workprefs.cpu_cycle_exact && !workprefs.cpu_clock_multiplier);
- ew (hDlg, IDC_FPU1, workprefs.cpu_model < 68040);
- ew (hDlg, IDC_FPU2, workprefs.cpu_model < 68040);
+ ew (hDlg, IDC_FPU1, workprefs.cpu_model < 68040 && (workprefs.cpu_model >= 68020 || !workprefs.cpu_compatible));
+ ew (hDlg, IDC_FPU2, workprefs.cpu_model < 68040 && (workprefs.cpu_model >= 68020 || !workprefs.cpu_compatible));
ew (hDlg, IDC_FPU3, workprefs.cpu_model >= 68040);
ew (hDlg, IDC_MMUENABLE, workprefs.cpu_model == 68040 && workprefs.cachesize == 0);
oldcache = workprefs.cachesize;
jitena = ischecked (hDlg, IDC_JITENABLE) ? 1 : 0;
workprefs.cachesize = SendMessage (GetDlgItem (hDlg, IDC_CACHE), TBM_GETPOS, 0, 0) * 1024;
+ if (!workprefs.cachesize)
+ setchecked (hDlg, IDC_JITENABLE, false);
if (!jitena) {
cachesize_prev = workprefs.cachesize;
trust_prev = workprefs.comptrustbyte;
<FixedBaseAddress>false</FixedBaseAddress>
<DataExecutionPrevention>true</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
- <MinimumRequiredVersion>
- </MinimumRequiredVersion>
+ <MinimumRequiredVersion>5.01</MinimumRequiredVersion>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<Manifest>
This is usual quick 2.5.0 bug fix version. Estimated release date: before Christmas.
I try not to do any GUI changes this time, 2.5.0 translation DLLs should still work with 2.5.1.
+Beta 2:
+
+- Resuming pause with input event didn't restore sound. (b1)
+- Do not capture mouse when theme changes, keep pause state (Window may not get refreshed until unpaused, this won't be fixed until later) (b1)
+- Windows mouse mode and mouse not captured: right, middle and other possible extra mouse buttons leaked to Amiga side.
+- Fixed GUI JIT slider weird behavior when cache size slider was moved to zero.
+- Windowed mode status bar appeared in full window modes after mode change (b1)
+- Epson matrix color printing swapped red and blue fixed. (Printing only, png output worked)
+- Fixed 68010 + cycle-exact broken interrupt handling. (This is not recommended option, it is far from cycle-exact)
+- Optimized build (official b1) had wrong settings, didn't load on Windows XP.
+
+Beta 1:
+
- Internal mouse counter under/overflow fixed, while moving mouse far enough, mouse jumped in opposite direction. (old bug)
- Directory filesystem file modification date resolution support is now 1 microsecond (was 1 second). AmigaDOS file
time 1/50s "tick" resolution is now fully supported (if NTFS, FAT only has 2 second resolution)