static uae_u32 last_play_end;
static int cd_play_audio (uae_u32 startmsf, uae_u32 endmsf, int scan)
{
-#if 0
+#if 1
uae_u8 *buf = cdrom_toc_cd_buffer;
uae_u8 *s;
uae_u32 addr;
- int i, changed;
+ int i;
- changed = 0;
for (i = 0; i < cdrom_toc_entries; i++) {
s = buf + 4 + i * 11;
addr = (s[8] << 16) | (s[9] << 8) | (s[10] << 0);
if (s[3] > 0 && s[3] < 100 && addr >= startmsf)
break;
}
- addr = lsn2msf (cdrom_leadout);
- if (i + 1 < cdrom_toc_entries) {
+ if ((s[1] & 0x0c) == 0x04) {
+ write_log ("tried to play data track %d!\n", s[3]);
s += 11;
- addr =(s[8] << 16) | (s[9] << 8) | (s[10] << 0);
- }
- if (endmsf >= addr) {
- endmsf = addr;
- changed = 1;
- }
- if (endmsf >= lsn2msf (cdrom_leadout)) {
- endmsf = lsn2msf (cdrom_leadout);
- changed = 1;
+ startmsf = (s[8] << 16) | (s[9] << 8) | (s[10] << 0);
+ s += 11;
+ endmsf = (s[8] << 16) | (s[9] << 8) | (s[10] << 0);
+ //cdrom_audiotimeout = 312;
+ return 0;
}
-#if AKIKO_DEBUG_IO_CMD
- if (changed)
- write_log ("Adjusted from %06.6X to %06.6X\n", startmsf, endmsf);
-#endif
#endif
last_play_end = endmsf;
cdrom_audiotimeout = 0;
int cdrom_data_offset_end = msf2lsn (endpos);
cdrom_data_offset = msf2lsn (seekpos);
#if AKIKO_DEBUG_IO_CMD
- write_log ("READ DATA FROM %06.6X (%d) TO %06.6X (%d) SPEED=%dx\n",
- seekpos, cdrom_data_offset, endpos, cdrom_data_offset_end, cdrom_speed);
+ write_log ("READ DATA %06.6X (%d) - %06.6X (%d) SPD=%dx PC=%08X\n",
+ seekpos, cdrom_data_offset, endpos, cdrom_data_offset_end, cdrom_speed, M68K_GETPC);
#endif
cdrom_result_buffer[1] |= 0x02;
} else if (cdrom_command_buffer[10] & 4) { /* play audio */
/* ROM tag area memory access */
uae_u8 *rtarea;
-uaecptr rtarea_base = 0xf00000;
+uaecptr rtarea_base;
static uae_u32 REGPARAM3 rtarea_lget (uaecptr) REGPARAM;
static uae_u32 REGPARAM3 rtarea_wget (uaecptr) REGPARAM;
do_stch();
}
-static void do_stch(void)
+static void do_stch (void)
{
static int stch_cnt;
if ((tp_cr & 1) && !(tp_air & (1 << 2)) && (tp_cd & (1 << 2))) {
}
}
-void bleh(void)
+void bleh (void)
{
#if 0
cd_playing = cd_finished = cd_motor = cd_media = 1;
|| cfgfile_intval (option, value, "gfx_refreshrate", &p->gfx_refreshrate, 1)
|| cfgfile_intval (option, value, "gfx_autoresolution", &p->gfx_autoresolution, 1)
+ || cfgfile_intval (option, value, "gfx_center_horizontal_adjust", &p->gfx_xcenter_adjust, 1)
+ || cfgfile_intval (option, value, "gfx_center_vertical_adjust", &p->gfx_ycenter_adjust, 1)
+
#ifdef GFXFILTER
|| cfgfile_intval (option, value, "gfx_filter_vert_zoom", &p->gfx_filter_vert_zoom, 1)
|| cfgfile_intval (option, value, "gfx_filter_horiz_zoom", &p->gfx_filter_horiz_zoom, 1)
p->gfx_afullscreen = 0;
p->gfx_pfullscreen = 0;
p->gfx_correct_aspect = 0;
- p->gfx_xcenter = 0;
- p->gfx_ycenter = 0;
+ p->gfx_xcenter = 0; p->gfx_xcenter_adjust = 0;
+ p->gfx_ycenter = 0; p->gfx_ycenter_adjust = 0;
p->color_mode = 2;
p->x11_use_low_bandwidth = 0;
#include "debug.h"
#include "arcadia.h"
#include "audio.h"
+#include "amax.h"
//#define CIAA_DEBUG_R
//#define CIAA_DEBUG_W
static uae_u32 REGPARAM2 clock_bget (uaecptr addr)
{
- time_t t = time(0);
+ time_t t;
struct tm *ct;
#ifdef JIT
special_mem |= S_READ;
#endif
- t += currprefs.cs_rtc_adjust;
+ //write_log("R: %x (%x), PC=%08x\n", addr, addr >> 2, M68K_GETPC);
#ifdef CDTV
if (currprefs.cs_cdtvram && addr >= 0xdc8000)
return cdtv_battram_read (addr);
#endif
- ct = localtime (&t);
addr &= 0x3f;
- if ((addr & 3) == 2 || (addr & 3) == 0) {
+ if ((addr & 3) == 2 || (addr & 3) == 0 || currprefs.cs_rtc == 0) {
int v = 0;
if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible)
v = regs.irc >> 8;
return v;
}
+ t = time (0);
+ t += currprefs.cs_rtc_adjust;
+ ct = localtime (&t);
addr >>= 2;
if (currprefs.cs_rtc == 1) { /* MSM6242B */
switch (addr) {
#ifdef JIT
special_mem |= S_WRITE;
#endif
+ //write_log("W: %x: %x, PC=%08x\n", addr, value & 0xff, M68K_GETPC);
#ifdef CDTV
if (currprefs.cs_cdtvram && addr >= 0xdc8000) {
cdtv_battram_write (addr, value);
}
#endif
addr &= 0x3f;
- if ((addr & 3) != 3)
+ if ((addr & 1) != 1 || currprefs.cs_rtc == 0)
return;
addr >>= 2;
value &= 0x0f;
{
//extern void uaenet_fake_int_handler (void);
extern int volatile uaenet_int_requested;
- extern int uaenet_vsync_requested;
+ extern int volatile uaenet_vsync_requested;
if (uaenet_int_requested || (uaenet_vsync_requested && vpos == 10)) {
INTREQ (0x8000 | 0x2000);
//uaenet_fake_int_handler ();
}
return 0;
}
+ mwhit.pc = M68K_GETPC;
mwhit.addr = addr;
mwhit.rwi = rwi;
mwhit.size = size;
seglist = BPTR2APTR(get_long (activetask + 128));
seglist = BPTR2APTR(get_long (seglist + 12));
}
- if (activetask == processptr || (processname && (!stricmp(name, processname) || (command && command[0] && !strnicmp(command + 1, processname, command[0] && processname[command[0]+1] == 0))))) {
+ if (activetask == processptr || (processname && (!stricmp(name, processname) || (command && command[0] && !strnicmp(command + 1, processname, command[0]) && processname[command[0]+1] == 0)))) {
while (seglist) {
uae_u32 size = get_long (seglist - 4) - 4;
if (pc >= (seglist + 4) && pc < (seglist + size)) {
}
}
} else {
- console_out ("Memwatch %d: break at %08.8X.%c %c%c%c %08.8X\n", memwatch_triggered - 1, mwhit.addr,
+ console_out ("Memwatch %d: break at %08X.%c %c%c%c %08.8X PC=%08X\n", memwatch_triggered - 1, mwhit.addr,
mwhit.size == 1 ? 'B' : (mwhit.size == 2 ? 'W' : 'L'),
(mwhit.rwi & 1) ? 'R' : ' ', (mwhit.rwi & 2) ? 'W' : ' ', (mwhit.rwi & 4) ? 'I' : ' ',
- mwhit.val);
+ mwhit.val, mwhit.pc);
memwatch_triggered = 0;
}
if (skipaddr_doskip > 0) {
if (doublescan)
visible_left_border = (max_diwlastword - 48) / 2 - gfxvidinfo.width;
}
+ visible_left_border += currprefs.gfx_xcenter_adjust;
+ visible_left_border &= ~((xshift (1, lores_shift)) - 1);
+
if (visible_left_border > max_diwlastword - 32)
visible_left_border = max_diwlastword - 32;
if (visible_left_border < 0)
&& prev_y_adjust + max_drawn_amiga_line > thisframe_last_drawn_line)
thisframe_y_adjust = prev_y_adjust;
}
- /* Make sure the value makes sense */
- if (thisframe_y_adjust + max_drawn_amiga_line > maxvpos_max)
- thisframe_y_adjust = maxvpos_max - max_drawn_amiga_line;
- if (thisframe_y_adjust < minfirstline)
- thisframe_y_adjust = minfirstline;
}
+ thisframe_y_adjust += currprefs.gfx_ycenter_adjust;
+ /* Make sure the value makes sense */
+ if (thisframe_y_adjust + max_drawn_amiga_line > maxvpos_max)
+ thisframe_y_adjust = maxvpos_max - max_drawn_amiga_line;
+ if (thisframe_y_adjust < minfirstline)
+ thisframe_y_adjust = minfirstline;
+
thisframe_y_adjust_real = thisframe_y_adjust << (linedbl ? 1 : 0);
tmp = (maxvpos_max - thisframe_y_adjust) << (linedbl ? 1 : 0);
if (tmp != max_ypos_thisframe) {
uaecptr need_uae_boot_rom(void)
{
+ int i;
uaecptr b = 0xf00000;
if (currprefs.cs_cdtvcd || currprefs.cs_cdtvscsi)
b = 0xe70000;
- if (nr_units() > 0)
- return b;
+ for (i = 0; i < currprefs.mountitems; i++) {
+ struct uaedev_config_info *uci = &currprefs.mountconfig[i];
+ if (uci->controller == 0)
+ return b;
+ }
if (currprefs.socket_emu)
return b;
if (currprefs.uaeserial)
uae_u8 amax_disk_status (void);
void amax_disk_select (uae_u8 v, uae_u8 ov);
void amax_reset (void);
-void amax_init (void);
\ No newline at end of file
+void amax_init (void);
uae_u32 modval;
int modval_written;
int frozen;
+ uaecptr pc;
};
extern struct memwatch_node mwnodes[MEMWATCH_TOTAL];
int gfx_linedbl;
int gfx_correct_aspect;
int gfx_afullscreen, gfx_pfullscreen;
- int gfx_xcenter;
- int gfx_ycenter;
+ int gfx_xcenter, gfx_xcenter_adjust;
+ int gfx_ycenter, gfx_ycenter_adjust;
int gfx_saturation, gfx_luminance, gfx_contrast, gfx_gamma;
int color_mode;
map_banks (&gayle_bank, 0xDD, 1, 0);
}
}
- if (currprefs.cs_rtc)
+ if (currprefs.cs_rtc || currprefs.cs_cdtvram)
map_banks (&clock_bank, 0xDC, 1, 0);
if (currprefs.cs_fatgaryrev >= 0 || currprefs.cs_ramseyrev >= 0)
map_banks (&mbres_bank, 0xDE, 1, 0);
//
#define RPIPCHM_VOLUME (WM_APP + 209)
+// Message:
+// RPIPCHM_RELEASEMOUSEKEY
+// Description:
+// the host uses the RPIPCHM_RELEASEMOUSEKEY message
+// to change the release mouse key information
+// Data sent:
+// WPARAM = VK_* identifier of the mouse-release key
+// (e.g. "0x1B" for the Esc key - see VK_* constants in winuser.h)
+// LPARAM = milliseconds value
+// (amount of time the user has to hold the above key to release the mouse)
+// Response:
+// LRESULT = non-zero if the guest accepted the new settings
+//
+#define RPIPCHM_RELEASEMOUSEKEY (WM_APP + 210)
+
+// Message:
+// RPIPCHM_EVENT
+// Description:
+// the host uses the RPIPCHM_EVENT message
+// to simulate keyboard, mouse, joystick (press/release)
+// and other guest-specific events
+// Data sent:
+// pData = (Unicode) event string (guest-specific)
+// Response:
+// LRESULT = non-zero if the guest simulated the specified event
+//
+#define RPIPCHM_EVENT (WM_APP + 211)
+
// ****************************************************************************
static int hwndset;
static int minimized;
-const char *getmsg (int msg)
+
+static char *ua (const WCHAR *s)
+{
+ char *d;
+ int len = WideCharToMultiByte (CP_ACP, 0, s, -1, NULL, 0, 0, FALSE);
+ if (!len)
+ return my_strdup ("");
+ d = xmalloc (len + 1);
+ WideCharToMultiByte (CP_ACP, 0, s, -1, d, len, 0, FALSE);
+ return d;
+}
+
+static const char *getmsg (int msg)
{
switch (msg)
{
case RPIPCHM_TURBO: return "RPIPCHM_TURBO";
case RPIPCHM_INPUTMODE: return "RPIPCHM_INPUTMODE";
case RPIPCHM_VOLUME: return "RPIPCHM_VOLUME";
+ case RPIPCHM_EVENT: return "RPIPCHM_EVENT";
default: return "UNKNOWN";
}
return v;
}
-static char *ua (WCHAR *s)
-{
- char *d;
- int len = WideCharToMultiByte (CP_ACP, 0, s, -1, NULL, 0, 0, FALSE);
- if (!len)
- return "";
- d = xmalloc (len + 1);
- WideCharToMultiByte (CP_ACP, 0, s, -1, d, len, 0, FALSE);
- return d;
-}
-
static int winok(void)
{
if (!initialized)
hwndset = 0;
return (LRESULT)INVALID_HANDLE_VALUE;
}
+ case RPIPCHM_EVENT:
+ {
+ char out[256];
+ char *s = ua ((WCHAR*)pData);
+ int idx = -1;
+ for (;;) {
+ int ret;
+ out[0] = 0;
+ ret = cfgfile_modify (idx++, s, strlen (s), out, sizeof out);
+ if (ret >= 0)
+ break;
+ }
+ xfree (s);
+ return TRUE;
+ }
+
+
}
return FALSE;
}
#include "rp.h"
#endif
+extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput;
+int log_scsi, log_net;
+
extern FILE *debugfile;
extern int console_logging;
static OSVERSIONINFO osVersion;
HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD) = NULL;
HWND hAmigaWnd, hMainWnd, hHiddenWnd;
RECT amigawin_rect;
+static int mouseposx, mouseposy;
static UINT TaskbarRestart;
static int TaskbarRestartOk;
static int forceroms;
char start_path_new2[MAX_DPATH]; /* AMIGAFOREVERDATA */
char help_file[MAX_DPATH];
int af_path_2005, af_path_old;
-
-extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput;
-int log_scsi, log_net;
DWORD quickstart = 1;
static int timeend (void)
{
int x = (amigawin_rect.right - amigawin_rect.left) / 2;
int y = (amigawin_rect.bottom - amigawin_rect.top) / 2;
- if (oldx == x && oldy == y)
+ mouseposx = oldx - x;
+ mouseposy = oldy - y;
+ if (abs (mouseposx) < 50 && abs (mouseposy) < 50)
return;
+ mouseposx = 0;
+ mouseposy = 0;
SetCursorPos (amigawin_rect.left + x, amigawin_rect.top + y);
}
if (os_winnt)
err = SetPriorityClass (GetCurrentProcess (), pri->classvalue);
else
- err = SetThreadPriority (GetCurrentThread(), pri->value);
+ err = SetThreadPriority (GetCurrentThread (), pri->value);
if (!err)
write_log ("priority set failed, %08.8X\n", GetLastError ());
}
void setmouseactive (int active)
{
- if (mouseactive == active)
+ if (mouseactive == active && active >= 0)
return;
+ if (active < 0)
+ active = 1;
mouseactive = active;
+ mouseposx = mouseposy = 0;
//write_log ("setmouseactive(%d)\n", active);
if (showcursor) {
ClipCursor(NULL);
#endif
inputdevice_unacquire ();
- setmaintitle (hMainWnd);
if (mouseactive > 0)
focus = 1;
+ if (focus) {
+ int donotfocus = 0;
+ if (SetForegroundWindow (hMainWnd) == FALSE)
+ donotfocus = 1;
+#ifdef RETROPLATFORM
+ if (rp_isactive ())
+ donotfocus = 0;
+#endif
+ if (donotfocus) {
+ focus = 0;
+ mouseactive = 0;
+ }
+ }
if (mouseactive) {
if (focus) {
if (!showcursor) {
}
if (!active)
checkpause ();
+ setmaintitle (hMainWnd);
#ifdef RETROPLATFORM
rp_mousecapture (active);
#endif
#endif
setpriority (pri);
- if (!minimized) {
- if (!avioutput_video) {
- clear_inhibit_frame (IHF_WINDOWHIDDEN);
- }
+ if (!avioutput_video) {
+ clear_inhibit_frame (IHF_WINDOWHIDDEN);
}
if (emulation_paused > 0)
emulation_paused = -1;
struct threadpriorities *pri;
int wasfocus = focus;
- //write_log("winuae_inactive(%d)\n", minimized);
+ write_log("winuae_inactive(%d)\n", minimized);
if (minimized)
exit_gui (0);
focus = 0;
setmousebuttonstate (dinput_winmouse(), num, updown);
}
-#define MSGDEBUG 0
+#define MSGDEBUG 1
static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
-
-#if 0
- case WM_SIZE:
- {
- if (recursive)
- return 0;
- recursive++;
-#if MSGDEBUG
- write_log ("WM_SIZE %x %d %d\n", hWnd, wParam, minimized);
-#endif
- if (isfullscreen () > 0) {
- v = minimized;
- switch (wParam)
- {
- case SIZE_MAXIMIZED:
- case SIZE_RESTORED:
- v = FALSE;
- break;
- default:
- v = TRUE;
- break;
- }
- exit_gui (0);
- if (v != minimized) {
- minimized = v;
- if (v) {
- winuae_inactive (hWnd, wParam == SIZE_MINIMIZED);
- } else {
- pausemode (0);
- winuae_active (hWnd, minimized);
- }
- }
- }
- recursive--;
- return 0;
- }
- break;
-#endif
-
case WM_SETFOCUS:
-#if MSGDEBUG
- write_log ("**** WM_SETFOCUS %d\n", minimized);
-#endif
- if (!minimized)
- winuae_active (hWnd, minimized);
+ winuae_active (hWnd, minimized);
minimized = 0;
return 0;
- case WM_KILLFOCUS:
-#if MSGDEBUG
- write_log ("**** WM_KILLFOCUS %d\n", minimized);
-#endif
- winuae_inactive (hWnd, 0);
- return 0;
case WM_ACTIVATE:
- if (!minimized) {
+ if (LOWORD (wParam) == WA_INACTIVE) {
minimized = HIWORD (wParam) ? 1 : 0;
- if (minimized) {
-#if MSGDEBUG
- write_log("**** minimize\n");
-#endif
- winuae_inactive (hWnd, minimized);
- }
- } else {
- winuae_active (hWnd, minimized);
- minimized = 0;
+ winuae_inactive (hWnd, minimized);
}
return 0;
#ifdef RETROPLATFORM
return 0;
#endif
-#if 0
- case WM_ACTIVATE:
- if (recursive)
- return 0;
- recursive++;
-#if MSGDEBUG
- write_log ("WM_ACTIVATE %x %d %d %d\n", hWnd, HIWORD (wParam), LOWORD (wParam), minimized);
-#endif
- if (isfullscreen () <= 0) {
- minimized = HIWORD (wParam);
- if (LOWORD (wParam) != WA_INACTIVE) {
- winuae_active (hWnd, minimized);
- } else {
- winuae_inactive (hWnd, minimized);
- }
- } else {
- if (LOWORD (wParam) == WA_INACTIVE) {
- minimized = HIWORD (wParam);
- winuae_inactive (hWnd, minimized);
- } else {
- if (!minimized)
- winuae_active (hWnd, minimized);
- if (is3dmode() && normal_display_change_starting == 0)
- normal_display_change_starting = 10;
- }
- }
- recursive--;
- return 0;
-
- case WM_ACTIVATEAPP:
- {
- if (recursive)
- return 0;
- recursive++;
-#if MSGDEBUG
- write_log ("WM_ACTIVATEAPP %x %d %d\n", hWnd, wParam, minimized);
-#endif
- activateapp = wParam;
- if (!wParam) {
- setmouseactive (0);
- normal_display_change_starting = 0;
- } else {
- if (minimized)
- minimized = 0;
- winuae_active (hWnd, minimized);
- if (is3dmode () && normal_display_change_starting == 1) {
- WIN32GFX_DisplayChangeRequested ();
- normal_display_change_starting = -1;
- }
- }
- manual_palette_refresh_needed = 1;
- recursive--;
- return 0;
- }
-#endif
-
case WM_PALETTECHANGED:
if ((HWND)wParam != hWnd)
manual_palette_refresh_needed = 1;
case WM_LBUTTONDBLCLK:
if (!mouseactive && isfullscreen() <= 0 && !gui_active) {
setmouseactive (1);
- }
- if (dinput_winmouse () >= 0)
+ } else if (dinput_winmouse () >= 0) {
setmousebuttonstate (dinput_winmouse(), 0, 1);
+ }
return 0;
case WM_RBUTTONUP:
if (dinput_winmouse () >= 0)
{
mx = (signed short) LOWORD (lParam);
my = (signed short) HIWORD (lParam);
+ mx -= mouseposx;
+ my -= mouseposy;
if (recapture && isfullscreen() <= 0) {
setmouseactive(1);
setamigamouse(mx, my);
return 0;
}
- if (normal_display_change_starting)
- return 0;
+ if (dinput_winmouse () >= 0 && !focus) {
+ if (dinput_winmousemode ()) {
+ /* absolete + mousehack */
+ setmousestate (dinput_winmouse (), 0, mx, 1);
+ setmousestate (dinput_winmouse (), 1, my, 1);
+ return 0;
+ }
+ return DefWindowProc (hWnd, message, wParam, lParam);
+ }
if (dinput_winmouse () >= 0) {
- if (dinput_winmousemode ()) {
- /* absolete + mousehack */
- setmousestate (dinput_winmouse (), 0, mx, 1);
- setmousestate (dinput_winmouse (), 1, my, 1);
- return 0;
- } else {
- /* relative */
- int mxx = (amigawin_rect.right - amigawin_rect.left) / 2;
- int myy = (amigawin_rect.bottom - amigawin_rect.top) / 2;
- mx = mx - mxx;
- my = my - myy;
- setmousestate (dinput_winmouse (), 0, mx, 0);
- setmousestate (dinput_winmouse (), 1, my, 0);
+ if (dinput_winmousemode () == 0) {
+ /* relative */
+ int mxx = (amigawin_rect.right - amigawin_rect.left) / 2;
+ int myy = (amigawin_rect.bottom - amigawin_rect.top) / 2;
+ mx = mx - mxx;
+ my = my - myy;
+ setmousestate (dinput_winmouse (), 0, mx, 0);
+ setmousestate (dinput_winmouse (), 1, my, 0);
}
} else if (!mouseactive && isfullscreen() <= 0) {
setmousestate (0, 0, mx, 1);
}
if (showcursor || mouseactive)
setcursor (LOWORD (lParam), HIWORD (lParam));
+ return 0;
}
- return 0;
+ break;
case WM_MOVING:
{
SetCurrentDirectory (start_path_data);
logging_init ();
+ write_log ("params:\n");
+ for (i = 1; i < __argc; i++)
+ write_log ("%d: '%s'\n", i, __argv[i]);
if(WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL)) {
DEVMODE devmode;
#define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
#define GETBDD(x) ((x) % 100)
-#define WINUAEBETA 14
+#define WINUAEBETA 15
#define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 11, 29)
+#define WINUAEDATE MAKEBD(2007, 12, 2)
#define WINUAEEXTRA ""
#define WINUAEREV ""
} while (ret < 0);
setpriority(&priorities[currprefs.win32_active_priority]);
- setmouseactive (1);
+ setmouseactive (-1);
for (i = 0; i < NUM_LEDS; i++)
gui_led (i, 0);
gui_fps (0, 0);
}
if (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect ||
+ currprefs.gfx_xcenter_adjust != changed_prefs.gfx_xcenter_adjust ||
+ currprefs.gfx_ycenter_adjust != changed_prefs.gfx_ycenter_adjust ||
currprefs.gfx_xcenter != changed_prefs.gfx_xcenter ||
currprefs.gfx_ycenter != changed_prefs.gfx_ycenter)
{
currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect;
+ currprefs.gfx_xcenter_adjust = changed_prefs.gfx_xcenter_adjust;
+ currprefs.gfx_ycenter_adjust = changed_prefs.gfx_ycenter_adjust;
currprefs.gfx_xcenter = changed_prefs.gfx_xcenter;
currprefs.gfx_ycenter = changed_prefs.gfx_ycenter;
return 1;
ShowWindow (hMainWnd, SW_SHOWNORMAL);
UpdateWindow (hMainWnd);
}
- UpdateWindow (hAmigaWnd);
ShowWindow (hAmigaWnd, SW_SHOWNORMAL);
#ifdef RETROPLATFORM
rp_set_hwnd ();
#endif
+ UpdateWindow (hAmigaWnd);
return 1;
}
+Beta 15:
+
+- fullscreen switching should work correctly again
+- mouse moves are now ignored if winuae is not active
+- do not get in "semi mouse captured" mode if WinUAE opens without
+ focus (for example other program got focus before WinUAE opened)
+- some uaenet.device tweaks
+
Beta 14:
- BPLCON3 BRDRBLNK-bit didn't work when chipset was ECS Denise
- some (bad) software firewalls may block some/all packets..
(at least Vista x64 + eset smart security fw seems to eat all
non-broadcast packets..)
- - fixed bug in dropped packet (packet that nobody wanted) handing
+ - fixed bug in dropped packet (packet that nobody wanted) handling
*) Vista note: winpcap kernel mode driver will be loaded when it is
first required. This needs admin privileges (only once after boot)
};
volatile int uaenet_int_requested;
-int uaenet_vsync_requested;
+volatile int uaenet_vsync_requested;
static uaecptr timerdevname;
if (kickstart_version >= 36) {
m68k_areg (&context->regs, 0) = get_long (4) + 350;
m68k_areg (&context->regs, 1) = timerdevname;
- CallLib (context, get_long (4), -0x114); /*FindName() */
+ CallLib (context, get_long (4), -0x114); /* FindName('timer.device') */
pdev->timerbase = m68k_dreg (&context->regs, 0);
}
if (!dev->online)
return;
/* drop if bogus size */
- if (len <= ETH_HEADER_SIZE + 2 || len >= dev->td->mtu + ETH_HEADER_SIZE + 2)
+ if (len < ETH_HEADER_SIZE || len >= dev->td->mtu + ETH_HEADER_SIZE + 2)
return;
/* drop if dst == broadcast and src == me */
if (isbroadcast (d) && !memcmp (d + 6, dev->td->mac, ADDR_SIZE))
struct asyncreq *ar;
struct devstruct *dev;
- uae_sem_wait (&async_sem);
dev = getdevstruct (pdev->unit);
ar = dev->ar;
while (ar) {
}
ar = ar->next;
}
- uae_sem_post (&async_sem);
}
static int dev_do_io (struct devstruct *dev, uaecptr request, int quick)
case CMD_FLUSH:
if (log_net)
write_log ("flush started %08x\n", request);
+ uae_sem_wait (&async_sem);
flush (pdev);
+ uae_sem_post (&async_sem);
async = 1;
uaenet_vsync_requested++;
break;
dev->online = 1;
write_comm_pipe_u32 (&dev->requests, request, 1);
uaenet_vsync_requested--;
- } else if (command == CMD_FLUSH && dev->ar->next == NULL) {
- /* do not reply CMD_FLUSH until all others are gone */
- if (log_net)
- write_log ("flush replied %08x\n", request);
- write_comm_pipe_u32 (&dev->requests, request, 1);
- uaenet_vsync_requested--;
+ } else if (command == CMD_FLUSH) {
+ /* do not reply CMD_FLUSH until all other requests are gone */
+ if (dev->ar->next == NULL) {
+ if (log_net)
+ write_log ("flush replied %08x\n", request);
+ write_comm_pipe_u32 (&dev->requests, request, 1);
+ uaenet_vsync_requested--;
+ } else {
+ static int cnt;
+ struct priv_devstruct *pdev = getpdevstruct (request);
+ if (pdev) {
+ cnt--;
+ if (cnt <= 0) {
+ if (log_net)
+ write_log ("flushing %08x..\n", request);
+ cnt = 25;
+ flush (pdev);
+ }
+ }
+ }
}
}
ar = ar->next;