}
p->gfx_resolution = 1;
p->gfx_linedbl = 1;
- p->gfx_afullscreen = 0;
- p->gfx_pfullscreen = 0;
+ p->gfx_afullscreen = GFX_WINDOW;
+ p->gfx_pfullscreen = GFX_WINDOW;
p->gfx_xcenter = 0; p->gfx_ycenter = 0;
p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1;
p->gfx_xcenter_size = -1; p->gfx_ycenter_size = -1;
//activate_debugger ();
map_overlay (0);
}
- } else if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) {
+ }
+ if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) {
oldcd32mute = v & 1;
akiko_mute (oldcd32mute ? 0 : 1);
}
#endif
if (savestate_state) {
bfe001_change ();
+ if (!currprefs.cs_ciaoverlay) {
+ map_overlay (1);
+ oldovl = false;
+ }
/* select drives */
DISK_select (ciabprb);
}
unlockscr ();
if (start <= stop)
flush_screen (start, stop);
- else if (currprefs.gfx_afullscreen && currprefs.gfx_avsync)
+ else if (currprefs.gfx_afullscreen == 1 && currprefs.gfx_avsync)
flush_screen (0, 0); /* vsync mode */
}
else if (currprefs.cpu_cycle_exact)
init_hardware_for_drawing_frame ();
} else {
- if (currprefs.gfx_afullscreen && currprefs.gfx_avsync)
+ if (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_avsync)
flush_screen (0, 0); /* vsync mode */
}
gui_flicker_led (-1, 0, 0);
enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_FREEZEBUTTON,
AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3,
AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3,
- AKS_TOGGLEFULLSCREEN, AKS_ENTERDEBUGGER, AKS_IRQ7,
+ AKS_TOGGLEDEFAULTSCREEN,
+ AKS_TOGGLEWINDOWEDFULLSCREEN, AKS_TOGGLEFULLWINDOWFULLSCREEN, AKS_TOGGLEWINDOWFULLWINDOW,
+ AKS_ENTERDEBUGGER, AKS_IRQ7,
AKS_PAUSE, AKS_WARP, AKS_INHIBITSCREEN, AKS_STATEREWIND,
AKS_VOLDOWN, AKS_VOLUP, AKS_VOLMUTE,
AKS_MVOLDOWN, AKS_MVOLUP, AKS_MVOLMUTE,
#define IDE_A600A1200 1
#define IDE_A4000 2
+#define GFX_WINDOW 0
+#define GFX_FULLSCREEN 1
+#define GFX_FULLWINDOW 2
+
struct uae_prefs {
struct strlist *all_lines;
extern uae_u8 *restore_cpu (uae_u8 *);
extern void restore_cpu_finish (void);
extern uae_u8 *save_cpu (int *, uae_u8 *);
+extern uae_u8 *restore_cpu_extra (uae_u8 *);
+extern uae_u8 *save_cpu_extra (int *, uae_u8 *);
extern uae_u8 *restore_mmu (uae_u8 *);
extern uae_u8 *save_mmu (int *, uae_u8 *);
extern uae_u8 *restore_custom (uae_u8 *);
extern uae_u8 *save_custom (int *, uae_u8 *, int);
+extern uae_u8 *restore_custom_extra (uae_u8 *);
+extern uae_u8 *save_custom_extra (int *, uae_u8 *);
extern uae_u8 *restore_custom_sprite (int num, uae_u8 *src);
extern uae_u8 *save_custom_sprite (int num, int *len, uae_u8 *);
extern int handle_msgpump (void);
extern void setup_brkhandler (void);
extern int isfullscreen (void);
-extern void toggle_fullscreen (void);
+extern void toggle_fullscreen (int);
extern void toggle_mousegrab (void);
extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h);
extern bool vsync_switchmode (int, int);
case AKS_STATERESTOREQUICK9:
savestate_quick ((code - AKS_STATERESTOREQUICK) / 2, 0);
break;
- case AKS_TOGGLEFULLSCREEN:
- toggle_fullscreen ();
+ case AKS_TOGGLEDEFAULTSCREEN:
+ toggle_fullscreen (-1);
+ break;
+ case AKS_TOGGLEWINDOWEDFULLSCREEN:
+ toggle_fullscreen (0);
+ break;
+ case AKS_TOGGLEFULLWINDOWFULLSCREEN:
+ toggle_fullscreen (1);
+ break;
+ case AKS_TOGGLEWINDOWFULLWINDOW:
+ toggle_fullscreen (2);
break;
case AKS_TOGGLEMOUSEGRAB:
toggle_mousegrab ();
DEFEVENT(SPC_STATERESTORE,L"Quick restore state",AM_K,0,0,AKS_STATERESTOREQUICK)
DEFEVENT(SPC_STATESAVEDIALOG,L"Save state",AM_K,0,0,AKS_STATESAVEDIALOG)
DEFEVENT(SPC_STATERESTOREDIALOG,L"Restore state",AM_K,0,0,AKS_STATERESTOREDIALOG)
-DEFEVENT(SPC_TOGGLEFULLSCREEN,L"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEFULLSCREEN)
+DEFEVENT(SPC_TOGGLEFULLSCREEN,L"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEWINDOWEDFULLSCREEN)
+DEFEVENT(SPC_TOGGLEFULLWINDOWFULLSCREEN,L"Toggle full-window/fullscreen",AM_K,0,0,AKS_TOGGLEFULLWINDOWFULLSCREEN)
+DEFEVENT(SPC_TOGGLEWINDOWFULLWINDOW,L"Toggle window/full-window",AM_K,0,0,AKS_TOGGLEWINDOWFULLWINDOW)
DEFEVENT(SPC_TOGGLEMOUSEGRAB,L"Toggle between mouse grabbed and un-grabbed",AM_K,0,0,AKS_TOGGLEMOUSEGRAB)
DEFEVENT(SPC_DECREASE_REFRESHRATE,L"Decrease emulation speed",AM_K,0,0,AKS_DECREASEREFRESHRATE)
DEFEVENT(SPC_INCREASE_REFRESHRATE,L"Increase emulation speed",AM_K,0,0,AKS_INCREASEREFRESHRATE)
DEFEVENT(SPC_INPUT_CONFIG3,L"Select Input Configuration #3",AM_K,0,0,AKS_INPUT_CONFIG_3)
DEFEVENT(SPC_INPUT_CONFIG4,L"Select GamePorts Input Configuration",AM_K,0,0,AKS_INPUT_CONFIG_4)
-DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,L"Arcadia diagnostics dip switch",AM_K,0,0,AKS_ARCADIADIAGNOSTICS)
+DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,L"Arcadia diagnostics DIP switch",AM_K,0,0,AKS_ARCADIADIAGNOSTICS)
DEFEVENT(SPC_ARCADIA_PLAYER1,L"Arcadia player 1",AM_K,0,0,AKS_ARCADIAPLY1)
DEFEVENT(SPC_ARCADIA_PLAYER2,L"Arcadia player 2",AM_K,0,0,AKS_ARCADIAPLY2)
DEFEVENT(SPC_ARCADIA_COIN1,L"Arcadia coin player 1",AM_K,0,0,AKS_ARCADIACOIN1)
#define CPUTYPE_EC 1
#define CPUMODE_HALT 1
+
+
uae_u8 *restore_cpu (uae_u8 *src)
{
int i, flags, model;
}
+uae_u8 *restore_cpu_extra (uae_u8 *src)
+{
+ restore_u32 ();
+ uae_u32 flags = restore_u32 ();
+
+ currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact = (flags & 1) ? true : false;
+ currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact = currprefs.cpu_cycle_exact;
+ currprefs.cpu_compatible = changed_prefs.cpu_compatible = (flags & 2) ? true : false;
+ currprefs.cpu_frequency = changed_prefs.cpu_frequency = restore_u32 ();
+ currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier = restore_u32 ();
+ currprefs.cachesize = changed_prefs.cachesize = (flags & 8) ? 8192 : 0;
+
+ currprefs.m68k_speed = changed_prefs.m68k_speed = 0;
+ if (flags & 4)
+ currprefs.m68k_speed = changed_prefs.m68k_speed = -1;
+
+ currprefs.cpu060_revision = changed_prefs.cpu060_revision = restore_u8 ();
+ currprefs.fpu_revision = changed_prefs.fpu_revision = restore_u8 ();
+
+ return src;
+}
+
+uae_u8 *save_cpu_extra (int *len, uae_u8 *dstptr)
+{
+ uae_u8 *dstbak, *dst;
+ uae_u32 flags;
+
+ if (dstptr)
+ dstbak = dst = dstptr;
+ else
+ dstbak = dst = xmalloc (uae_u8, 1000);
+ save_u32 (0); // version
+ flags = 0;
+ flags |= currprefs.cpu_cycle_exact ? 1 : 0;
+ flags |= currprefs.cpu_compatible ? 2 : 0;
+ flags |= currprefs.m68k_speed < 0 ? 4 : 0;
+ flags |= currprefs.cachesize > 0 ? 8 : 0;
+ save_u32 (flags);
+ save_u32 (currprefs.cpu_frequency);
+ save_u32 (currprefs.cpu_clock_multiplier);
+ save_u8 (currprefs.cpu060_revision);
+ save_u8 (currprefs.fpu_revision);
+ *len = dst - dstbak;
+ return dstbak;
+}
+
uae_u8 *save_cpu (int *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
static int normalkb, superkb, rawkb;
static bool rawinput_enabled;
-int rawkeyboard = -1;
-int no_rawinput;
+int no_rawinput = 0;
int dinput_enum_all;
int dinput_winmouse (void)
HANDLE h = ridl[i].hDevice;
int type = ridl[i].dwType;
- if (type == RIM_TYPEKEYBOARD && !rawkeyboard)
- continue;
-
if (type == RIM_TYPEKEYBOARD || type == RIM_TYPEMOUSE) {
struct didata *did = type == RIM_TYPEMOUSE ? di_mouse : di_keyboard;
PRID_DEVICE_INFO rdi;
} else if (did->type == DID_KEYBOARD) {
//did->buttonmappings[did->buttons] = pdidoi->dwOfs;
did->buttonmappings[did->buttons] = DIDFT_GETINSTANCE (pdidoi->dwType);
- if (rawkeyboard && (!_tcsicmp (bname, L"kana") || 0)) { // buggy layout?
- if (rawkeyboard != 2) {
- write_log (L"Possible buggy directinput keyboard layout detected, switching to raw keyboard mode\n");
- rawkeyboard = 2;
- }
- }
}
did->buttons++;
}
if (scancode == DIK_F12 || scancode == currprefs.win32_guikey) {
if (ctrlpressed ()) {
- code = AKS_TOGGLEFULLSCREEN;
+ code = AKS_TOGGLEDEFAULTSCREEN;
} else if (shiftpressed () || specialpressed ()) {
if (isfullscreen() <= 0) {
disablecapture ();
static int isvsync (void)
{
- return currprefs.gfx_avsync && currprefs.gfx_afullscreen;
+ return currprefs.gfx_avsync && currprefs.gfx_afullscreen == GFX_FULLSCREEN;
}
float scaled_sample_evtime_orig;
#include "rp.h"
#endif
-extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput, rawkeyboard;
+extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput;
extern int force_directsound;
int log_scsi, log_net, uaelib_debug;
int pissoff_value = 25000;
case WM_NCLBUTTONDBLCLK:
if (wParam == HTCAPTION) {
- toggle_fullscreen ();
+ toggle_fullscreen (-1);
return 0;
}
break;
return 1;
}
if (!_tcscmp (arg, L"-rawkeyboard")) {
- rawkeyboard = 1;
+ // obsolete
return 1;
}
if (!_tcscmp (arg, L"-directsound")) {
#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
-#define WINUAEBETA L"3"
-#define WINUAEDATE MAKEBD(2010, 5, 19)
+#define WINUAEBETA L"4"
+#define WINUAEDATE MAKEBD(2010, 5, 22)
#define WINUAEEXTRA L""
#define WINUAEREV L""
static int isfullscreen_2 (struct uae_prefs *p)
{
if (screen_is_picasso)
- return p->gfx_pfullscreen == 1 ? 1 : (p->gfx_pfullscreen == 2 ? -1 : 0);
+ return p->gfx_pfullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_pfullscreen == GFX_FULLWINDOW ? -1 : 0);
else
- return p->gfx_afullscreen == 1 ? 1 : (p->gfx_afullscreen == 2 ? -1 : 0);
+ return p->gfx_afullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_afullscreen == GFX_FULLWINDOW ? -1 : 0);
}
int isfullscreen (void)
{
currprefs.color_mode = changed_prefs.color_mode;
currprefs.gfx_api = changed_prefs.gfx_api;
- if (changed_prefs.gfx_afullscreen == 1) {
+ if (changed_prefs.gfx_afullscreen == GFX_FULLSCREEN) {
if (currprefs.gfx_api != changed_prefs.gfx_api)
display_change_requested = 1;
}
static int ifs (struct uae_prefs *p)
{
if (screen_is_picasso)
- return p->gfx_pfullscreen == 1 ? 1 : (p->gfx_pfullscreen == 2 ? -1 : 0);
+ return p->gfx_pfullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_pfullscreen == GFX_FULLWINDOW ? -1 : 0);
else
- return p->gfx_afullscreen == 1 ? 1 : (p->gfx_afullscreen == 2 ? -1 : 0);
+ return p->gfx_afullscreen == GFX_FULLSCREEN ? 1 : (p->gfx_afullscreen == GFX_FULLWINDOW ? -1 : 0);
}
static int reopen (int full)
/* fullscreen to fullscreen? */
if (isfullscreen () > 0 && currprefs.gfx_afullscreen == changed_prefs.gfx_afullscreen &&
- currprefs.gfx_pfullscreen == changed_prefs.gfx_pfullscreen && currprefs.gfx_afullscreen == 1) {
+ currprefs.gfx_pfullscreen == changed_prefs.gfx_pfullscreen && currprefs.gfx_afullscreen == GFX_FULLSCREEN) {
quick = 1;
}
/* windowed to windowed */
updatemodes ();
update_gfxparams ();
clearscreen ();
- if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen || (currprefs.gfx_afullscreen == 1 && currprefs.gfx_api)) {
+ if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen || (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_api)) {
mode = 1;
} else {
mode = modeswitchneeded (&wc);
int mult = 0;
if (wasfullwindow_a == 0)
- wasfullwindow_a = currprefs.gfx_afullscreen == 2 ? 1 : -1;
+ wasfullwindow_a = currprefs.gfx_afullscreen == GFX_FULLWINDOW ? 1 : -1;
if (wasfullwindow_p == 0)
- wasfullwindow_p = currprefs.gfx_pfullscreen == 2 ? 1 : -1;
+ wasfullwindow_p = currprefs.gfx_pfullscreen == GFX_FULLWINDOW ? 1 : -1;
colortype = DirectDraw_GetPixelFormat ();
gfxmode_reset ();
gui_message (tmpstr);
DirectDraw_Start (displayGUID);
if (screen_is_picasso)
- changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = 1;
+ changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = GFX_FULLSCREEN;
else
- changed_prefs.gfx_afullscreen = currprefs.gfx_afullscreen = 1;
+ changed_prefs.gfx_afullscreen = currprefs.gfx_afullscreen = GFX_FULLSCREEN;
updatewinfsmode (&currprefs);
updatewinfsmode (&changed_prefs);
currentmode->current_depth = tmp_depth;
config_changed = 1;
}
-void toggle_fullscreen (void)
+void toggle_fullscreen (int mode)
{
int *p = picasso_on ? &changed_prefs.gfx_pfullscreen : &changed_prefs.gfx_afullscreen;
int wfw = picasso_on ? wasfullwindow_p : wasfullwindow_a;
int v = *p;
- if (v == 2)
- v = 1;
- else if (v == 0)
- v = 1;
- else if (v == 1)
- if (wfw > 0)
- v = 2;
+
+ if (mode < 0) {
+ // fullscreen <> window (if in fullwindow: fullwindow <> fullscreen)
+ if (v == GFX_FULLWINDOW)
+ v = GFX_FULLSCREEN;
+ else if (v == GFX_WINDOW)
+ v = GFX_FULLSCREEN;
+ else if (v == GFX_FULLSCREEN)
+ if (wfw > 0)
+ v = GFX_FULLWINDOW;
+ else
+ v = GFX_WINDOW;
+ } else if (mode == 0) {
+ // fullscreen <> window
+ if (v == GFX_FULLSCREEN)
+ v = GFX_WINDOW;
else
- v = 0;
+ v = GFX_FULLSCREEN;
+ } else if (mode == 1) {
+ // fullscreen <> fullwindow
+ if (v == GFX_FULLSCREEN)
+ v = GFX_FULLWINDOW;
+ else
+ v = GFX_FULLSCREEN;
+ } else if (mode == 2) {
+ // window <> fullwindow
+ if (v == GFX_FULLWINDOW)
+ v = GFX_WINDOW;
+ else
+ v = GFX_FULLWINDOW;
+ }
*p = v;
updatewinfsmode (&changed_prefs);
}
+Beta 4:
+
+- keyboard input configuration didn't load correctly (was overwritten by default mappings
+ or mappings were completely erased)
+- if at least one rawinput keyboard and mouse is found: skip directinput keyboard and mouse
+ enumeration. Prevents stupid side-effects if both are used simultaneously, for example fullscreen
+ and directinput keyboard enabled: rawinput stops getting any input (and technically directinput
+ is less direct than rawinput, it is only good for joysticks/pads today)
+- fixed possible division by zero in new power led code
+- statefile_quit=<path> configuration file parameter added, automatically saves state to <path>
+ when emulator is quit normally
+- CPU speed and advanced chipset configuration stored in statefiles
+- in some situations full-window mode tried to use vsync frame wait (which did nothing and caused
+ warp-mode like speedup)
+- added toggle fullwindow<>fullscreen and fullwindow<>window input events
+- yet another sprite update, Total Perspective Vortex / Frantic background smallest sprites
+ missed last line of data
+
+WARNING: Configuration files saved with previous 2.2 betas won't be fully compatible with later
+versions. Keyboard input data is handled slightly differently (no more "super" keyboard that
+gets all keyboard input), beta 1-3 written config files may not have all keyboards enabled if
+Configuration #1-#3 mode is enabled. Older configuration files should work correctly.
+
Beta 3:
- added XZ compressed file support
restore_pram (totallen, filepos);
continue;
#endif
- } else if (!_tcscmp (name, L"CPU "))
+ } else if (!_tcscmp (name, L"CPU ")) {
end = restore_cpu (chunk);
+ } else if (!_tcscmp (name, L"CPUX"))
+ end = restore_cpu_extra (chunk);
#ifdef FPUEMU
else if (!_tcscmp (name, L"FPU "))
end = restore_fpu (chunk);
end = restore_cia (1, chunk);
else if (!_tcscmp (name, L"CHIP"))
end = restore_custom (chunk);
+ else if (!_tcscmp (name, L"CHPX"))
+ end = restore_custom_extra (chunk);
else if (!_tcscmp (name, L"AUD0"))
end = restore_audio (0, chunk);
else if (!_tcscmp (name, L"AUD1"))
save_chunk (f, dst, len, L"CPU ", 0);
xfree (dst);
+ dst = save_cpu_extra (&len, 0);
+ save_chunk (f, dst, len, L"CPUX", 0);
+ xfree (dst);
+
#ifdef FPUEMU
dst = save_fpu (&len,0 );
save_chunk (f, dst, len, L"FPU ", 0);
save_chunk (f, dst, len, L"CHIP", 0);
xfree (dst);
+ dst = save_custom_extra (&len, 0);
+ save_chunk (f, dst, len, L"CHPX", 0);
+ xfree (dst);
+
dst = save_custom_agacolors (&len, 0);
save_chunk (f, dst, len, L"AGAC", 0);
xfree (dst);
p2 = st->end;
write_log (L"rewinding from %d\n", replaycounter);
p = restore_cpu (p);
+ p = restore_cpu_extra (p);
#ifdef FPUEMU
if (restore_u32_func (&p))
p = restore_fpu (p);
}
p = restore_floppy (p);
p = restore_custom (p);
+ p = restore_custom_extra (p);
p = restore_blitter (p);
p = restore_custom_agacolors (p);
for (i = 0; i < 8; i++) {
save_cpu (&len, p);
tlen += len;
p += len;
+ if (bufcheck (&p, 0))
+ goto retry;
+ save_cpu_extra (&len, p);
+ tlen += len;
+ p += len;
#ifdef FPUEMU
if (bufcheck (&p, 0))
goto retry;
save_custom (&len, p, 0);
tlen += len;
p += len;
+ if (bufcheck (&p, 0))
+ goto retry;
+ save_custom_extra (&len, p);
+ tlen += len;
+ p += len;
if (bufcheck (&p, 0))
goto retry;
save_blitter (&len, p);