From: Toni Wilen Date: Fri, 25 May 2012 17:31:11 +0000 (+0300) Subject: 2420b3 X-Git-Tag: 2500~28 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=e7917d6a54944f5fd2310d8104df4133e90b159b;p=francis%2Fwinuae.git 2420b3 --- diff --git a/akiko.cpp b/akiko.cpp index a812d61a..d220aa98 100644 --- a/akiko.cpp +++ b/akiko.cpp @@ -1418,10 +1418,17 @@ static void *akiko_thread (void *null) mediachanged = 1; cdaudiostop_do (); } else if (media != lastmediastate) { - write_log (_T("CD32: media changed = %d\n"), media); - lastmediastate = cdrom_disk = media; - mediachanged = 1; - cdaudiostop_do (); + if (!media && lastmediastate > 1) { + // ignore missing media if statefile restored with cd present + if (lastmediastate == 2) + write_log (_T("CD32: CD missing but statefile was stored with CD inserted: faking media present\n")); + lastmediastate = 3; + } else { + write_log (_T("CD32: media changed = %d\n"), media); + lastmediastate = cdrom_disk = media; + mediachanged = 1; + cdaudiostop_do (); + } } } @@ -1975,7 +1982,7 @@ uae_u8 *restore_akiko (uae_u8 *src) cdrom_paused = 1; if (v & 4) cdrom_disk = 1; - lastmediastate = cdrom_disk; + lastmediastate = cdrom_disk ? 2 : 0; last_play_pos = msf2lsn (restore_u32 ()); last_play_end = msf2lsn (restore_u32 ()); diff --git a/blkdev.cpp b/blkdev.cpp index ca065dad..2f89581b 100644 --- a/blkdev.cpp +++ b/blkdev.cpp @@ -18,6 +18,7 @@ #include "crc32.h" #include "threaddep/thread.h" #include "execio.h" +#include "zfile.h" #ifdef RETROPLATFORM #include "rp.h" #endif @@ -1838,8 +1839,10 @@ uae_u8 *restore_cd (int num, uae_u8 *src) int type = restore_u32 (); restore_u32 (); if (flags & 4) { - _tcscpy (changed_prefs.cdslots[num].name, s); - _tcscpy (currprefs.cdslots[num].name, s); + if (currprefs.cdslots[num].name[0] == 0 || zfile_exists (s)) { + _tcscpy (changed_prefs.cdslots[num].name, s); + _tcscpy (currprefs.cdslots[num].name, s); + } changed_prefs.cdslots[num].type = currprefs.cdslots[num].type = type; } if (flags & 8) { diff --git a/bsdsocket.cpp b/bsdsocket.cpp index 291d244e..97157d96 100644 --- a/bsdsocket.cpp +++ b/bsdsocket.cpp @@ -1031,7 +1031,18 @@ static uae_u32 REGPARAM2 bsdsocklib_getprotobynumber (TrapContext *context) /* Syslog(level, format, ap)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_vsyslog (TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: vsyslog()\n")); + uae_char format_dst[256]; + TCHAR *s; + + uae_u32 level = m68k_dreg (regs, 0); + uaecptr format = m68k_areg (regs, 0); + uaecptr params = m68k_areg (regs, 1); + + strcpyah_safe (format_dst, format, sizeof format_dst); + + s = au (format_dst); + write_log (_T("SYSLOG: %s\n"), s); + xfree (s); return 0; } diff --git a/custom.cpp b/custom.cpp index c9ff4925..393e74b7 100644 --- a/custom.cpp +++ b/custom.cpp @@ -5309,7 +5309,7 @@ static bool framewait (void) } frame_shown = true; - return status != 0; + return 1; } else if (vs < 0) { @@ -5405,10 +5405,11 @@ static bool framewait (void) status = vsync_busywait_do (&freetime, (bplcon0 & 4) != 0 && !lof_changed && !lof_changing, lof_store != 0); vsync_busywait_start (); + now = read_processor_time (); + if (extraframewait && !currprefs.turbo_emulation) sleep_millis_main (extraframewait); - now = read_processor_time (); adjust = (int)now - (int)curr_time; int adjustx = adjust; if (adjust < 0) @@ -5456,6 +5457,8 @@ static bool framewait (void) return status != 0; } + status = 1; + int clockadjust = 0; #if 0 static uae_u32 prevtick; @@ -5482,6 +5485,7 @@ static bool framewait (void) clockadjust *= 100; write_log (_T("%d:%d:%d\n"), framems - tickdiff, diff, clockadjust); #endif + if (currprefs.m68k_speed < 0) { if (!frame_rendered && !picasso_on) @@ -5553,6 +5557,7 @@ static bool framewait (void) vsynctimeperline = 0; else if (vsynctimeperline > vsynctimebase / 3) vsynctimeperline = vsynctimebase / 3; + frame_shown = true; } @@ -5619,6 +5624,7 @@ static void vsync_handler_pre (void) if (isvsync_rtg () >= 0) rtg_vsync (); #endif + audio_vsync (); blkdev_vsync (); CIA_vsync_prehandler (); diff --git a/debug.cpp b/debug.cpp index 9731c7a0..65d14b08 100644 --- a/debug.cpp +++ b/debug.cpp @@ -3805,6 +3805,7 @@ void debug (void) inputdevice_unacquire (); pause_sound (); + setmouseactive (0); do_skip = 0; skipaddr_start = 0xffffffff; skipaddr_end = 0xffffffff; diff --git a/drawing.cpp b/drawing.cpp index b3072ece..6f7ea8f1 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -206,6 +206,7 @@ int thisframe_first_drawn_line, thisframe_last_drawn_line; interlace mode. */ static int last_redraw_point; +#define MAX_STOP 30000 static int first_drawn_line, last_drawn_line; static int first_block_line, last_block_line; @@ -367,14 +368,14 @@ void set_custom_limits (int w, int h, int dx, int dy) if (w <= 0 || dx < 0) { visible_left_start = 0; - visible_right_stop = 1 << 30; + visible_right_stop = MAX_STOP; } else { visible_left_start = visible_left_border + dx; visible_right_stop = visible_left_start + w; } if (h <= 0 || dy < 0) { visible_top_start = 0; - visible_bottom_stop = 1 << 30; + visible_bottom_stop = MAX_STOP; } else { visible_top_start = min_ypos_for_screen + dy; visible_bottom_stop = visible_top_start + h; @@ -1852,6 +1853,11 @@ void init_aspect_maps (void) gfxvidinfo.xchange = 1 << (RES_MAX - currprefs.gfx_resolution); gfxvidinfo.ychange = linedbl ? 1 : 2; + + visible_left_start = 0; + visible_right_stop = MAX_STOP; + visible_top_start = 0; + visible_bottom_stop = MAX_STOP; } /* diff --git a/inputdevice.cpp b/inputdevice.cpp index 244eaf56..f1595ad6 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -2188,7 +2188,7 @@ static int handle_custom_event (TCHAR *custom) if (custom == NULL) return 0; - //write_log (_T("%s\n"), custom); + write_log (_T("%s\n"), custom); p = buf = my_strdup (custom); while (p && *p) { TCHAR *p2; @@ -3324,14 +3324,39 @@ static int getqualmask (struct uae_input_device *id, int num, bool *qualonly) return mask; } -static void process_custom_event (struct uae_input_device *id, int offset, int state, int qualmask, int autofire) + +static void process_custom_event (struct uae_input_device *id, int offset, int state, int qualmask, int autofire, int sub) { - int idx, slotoffset, flags, custompos; + int idx, slotoffset, flags, custompos, qual; TCHAR *custom; - queue_input_event (-1, NULL, -1, 0, 0, 1); if (!id) return; + + slotoffset = sub / 4; + flags = id->flags[offset][slotoffset]; + qual = flags & ID_FLAG_QUALIFIER_MASK; + custompos = (flags & ID_FLAG_CUSTOMEVENT_TOGGLED) ? 1 : 0; + + // check that slots 0 and 2 have same qualifiers, only allow toggle if both are same + if ((id->flags[offset][slotoffset + 2] & ID_FLAG_QUALIFIER_MASK) != qual) { + id->flags[offset][slotoffset] &= ~ID_FLAG_CUSTOMEVENT_TOGGLED; + if (checkqualifiers (id->eventid[offset][slotoffset + sub], id->flags[offset][slotoffset + sub], qualmask)) { + custom = id->custom[offset][slotoffset + sub]; + if (custom) { + if (autofire) + queue_input_event (-1, custom, 1, 1, currprefs.input_autofire_linecnt, 1); + if (state && custom) + handle_custom_event (custom); + } + return; + } + } + + if (sub != 0) + return; + + queue_input_event (-1, NULL, -1, 0, 0, 1); slotoffset = 0; if (!checkqualifiers (id->eventid[offset][slotoffset], id->flags[offset][slotoffset], qualmask)) { @@ -3363,11 +3388,11 @@ static void process_custom_event (struct uae_input_device *id, int offset, int s if (autofire) queue_input_event (-1, custom, 1, 1, currprefs.input_autofire_linecnt, 1); - if (state) { + if (state && custom) handle_custom_event (custom); - id->flags[offset][slotoffset] &= ~ID_FLAG_CUSTOMEVENT_TOGGLED; - id->flags[offset][slotoffset] |= custompos ? ID_FLAG_CUSTOMEVENT_TOGGLED : 0; - } + + id->flags[offset][slotoffset] &= ~ID_FLAG_CUSTOMEVENT_TOGGLED; + id->flags[offset][slotoffset] |= custompos ? ID_FLAG_CUSTOMEVENT_TOGGLED : 0; } static void setbuttonstateall (struct uae_input_device *id, struct uae_input_device2 *id2, int button, int state) @@ -3410,8 +3435,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; if (!state) { - if (i == 0) - process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire); + process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } setqualifiers (flags, state > 0); @@ -3423,7 +3447,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev continue; handle_input_event (evt, 1, 1, 0, true, false); queue_input_event (evt, NULL, 0, 1, 1, 0); /* send release event next frame */ - process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, 0); + process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, 0, i); } else if (inverttoggle) { /* pressed = firebutton, not pressed = autofire */ if (state) { @@ -3432,8 +3456,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev } else { handle_input_event (evt, 1, 1, autofire, true, false); } - if (i == 0) - process_custom_event (id, ID_BUTTON_OFFSET + button, 1, qualmask, autofire); + process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } else if (toggle) { if (!state) continue; @@ -3444,8 +3467,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev *flagsp ^= ID_FLAG_TOGGLED; int toggled = (*flagsp & ID_FLAG_TOGGLED) ? 1 : 0; handle_input_event (evt, toggled, 1, autofire, true, false); - if (i == 0) - process_custom_event (id, ID_BUTTON_OFFSET + button, toggled, qualmask, autofire); + process_custom_event (id, ID_BUTTON_OFFSET + button, toggled, qualmask, autofire, i); } else { if (!checkqualifiers (evt, flags, qualmask)) { if (!state && !(flags & ID_FLAG_CANRELEASE)) { @@ -3460,8 +3482,8 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev *flagsp |= ID_FLAG_CANRELEASE; if ((omask ^ nmask) & mask) { handle_input_event (evt, state, 1, autofire, true, false); - if (i == 0) - process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire); + if (state) + process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } } } @@ -4947,7 +4969,7 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state return handled; if (!state) - process_custom_event (NULL, 0, 0, 0, 0); + process_custom_event (NULL, 0, 0, 0, 0, 0); j = 0; while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) { @@ -4992,8 +5014,7 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state } else { handled |= handle_input_event (evt, 1, 1, autofire, true, false); } - if (k == 0) - process_custom_event (na, j, state, qualmask, autofire); + process_custom_event (na, j, state, qualmask, autofire, k); } else if (toggle) { if (!state) continue; @@ -5003,7 +5024,7 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state toggled = (*flagsp & ID_FLAG_TOGGLED) ? 1 : 0; handled |= handle_input_event (evt, toggled, 1, autofire, true, false); if (k == 0) - process_custom_event (na, j, state, qualmask, autofire); + process_custom_event (na, j, state, qualmask, autofire, k); } else { if (!checkqualifiers (evt, flags, qualmask)) { if (!state && !(flags & ID_FLAG_CANRELEASE)) @@ -5016,8 +5037,7 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state else *flagsp &= ~ID_FLAG_CANRELEASE; handled |= handle_input_event (evt, state, 1, autofire, true, false); - if (k == 0) - process_custom_event (na, j, state, qualmask, autofire); + process_custom_event (na, j, state, qualmask, autofire, k); } } return handled; diff --git a/memory.cpp b/memory.cpp index 420b2fbb..b6f48db6 100644 --- a/memory.cpp +++ b/memory.cpp @@ -3032,16 +3032,16 @@ uae_char *strcpyah_safe (uae_char *dst, uaecptr src, int maxsize) { uae_char *res = dst; uae_u8 b; + dst[0] = 0; do { if (!addr_valid (_T("_tcscpyah"), src, 1)) return res; b = get_byte (src++); *dst++ = b; + *dst = 0; maxsize--; - if (maxsize <= 1) { - *dst++= 0; + if (maxsize <= 1) break; - } } while (b); return res; } diff --git a/newcpu.cpp b/newcpu.cpp index 775f4223..3ffe333a 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -4002,6 +4002,7 @@ static void m68k_run_2ce (void) { struct regstruct *r = ®s; uae_u16 opcode; + bool exit = false; if (cpu_tracer < 0) { memcpy (&r->regs, &cputrace.regs, 16 * sizeof (uae_u32)); @@ -4086,7 +4087,7 @@ static void m68k_run_2ce (void) cont: if (r->spcflags || time_for_interrupt ()) { if (do_specialties (0)) - return; + exit = true; } regs.ce020tmpcycles -= cpucycleunit; @@ -4095,6 +4096,9 @@ cont: regs.ce020tmpcycles = CYCLE_UNIT * MAX68020CYCLES;; } regs.ipl = regs.ipl_pin; + + if (exit) + return; } } diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 4bef51af..30858aed 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -72,6 +72,9 @@ RECT mask2rect; static bool wasstilldrawing_broken; static HANDLE filenotificationhandle; +static bool fakemode; +static uae_u8 *fakebitmap; + static D3DXMATRIXA16 m_matProj, m_matProj2; static D3DXMATRIXA16 m_matWorld, m_matWorld2; static D3DXMATRIXA16 m_matView, m_matView2; @@ -226,7 +229,7 @@ static TCHAR *D3DX_ErrorString (HRESULT hr, LPD3DXBUFFER Errors) static int isd3d (void) { - if (devicelost || !d3ddev || !d3d_enabled) + if (fakemode || devicelost || !d3ddev || !d3d_enabled) return 0; return 1; } @@ -473,17 +476,18 @@ int D3D_goodenough (void) D3DCAPS9 d3dCaps; if (d3d_good > 0) - return 1; + return d3d_good; if (d3d_good < 0) return 0; d3d_good = -1; d3dx = Direct3DCreate9 (D3D_SDK_VERSION); if (d3dx != NULL) { if (SUCCEEDED (d3dx->GetDeviceCaps (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps))) { - if (d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1, 0)) { - if (((d3dCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) == D3DPTEXTURECAPS_NONPOW2CONDITIONAL) || !(d3dCaps.TextureCaps & D3DPTEXTURECAPS_POW2)) { - if (!(d3dCaps.TextureCaps & D3DPTEXTURECAPS_SQUAREONLY) && (d3dCaps.Caps2 & D3DCAPS2_DYNAMICTEXTURES)) { - d3d_good = 1; + if (((d3dCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) == D3DPTEXTURECAPS_NONPOW2CONDITIONAL) || !(d3dCaps.TextureCaps & D3DPTEXTURECAPS_POW2)) { + if (!(d3dCaps.TextureCaps & D3DPTEXTURECAPS_SQUAREONLY) && (d3dCaps.Caps2 & D3DCAPS2_DYNAMICTEXTURES)) { + d3d_good = 1; + if (d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1, 0)) { + d3d_good = 2; shaderon = 1; } } @@ -491,7 +495,7 @@ int D3D_goodenough (void) } d3dx->Release (); } - return d3d_good > 0 ? 1 : 0; + return d3d_good > 0 ? d3d_good : 0; } int D3D_canshaders (void) @@ -2032,6 +2036,9 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult) return errmsg; } + xfree (fakebitmap); + fakebitmap = xmalloc (uae_u8, w_w * depth); + d3dx = LoadLibrary (D3DX9DLL); if (d3dx == NULL) { _tcscpy (errmsg, _T("Direct3D: Newer DirectX Runtime required.\n\nhttp://go.microsoft.com/fwlink/?linkid=56513")); @@ -2203,7 +2210,7 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult) max_texture_w = d3dCaps.MaxTextureWidth; max_texture_h = d3dCaps.MaxTextureHeight; - write_log (_T("%s: %08X "), D3DHEAD, flags); + write_log (_T("%s: %08X "), D3DHEAD, flags, d3dCaps.Caps, d3dCaps.Caps2, d3dCaps.Caps3); if (d3dCaps.TextureCaps & D3DPTEXTURECAPS_SQUAREONLY) write_log (_T("SQUAREONLY ")); if (d3dCaps.TextureCaps & D3DPTEXTURECAPS_POW2) @@ -2214,6 +2221,9 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult) write_log (_T("ALPHA ")); if (d3dCaps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) write_log (_T("DYNAMIC ")); + if (d3dCaps.Caps & D3DCAPS_READ_SCANLINE) + write_log (_T("SCANLINE ")); + write_log (_T("\n")); write_log (_T("%s: PS=%d.%d VS=%d.%d %d*%d*%d%s%s VS=%d B=%d%s %d-bit %d\n"), @@ -2305,7 +2315,6 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult) write_log (_T("%s: CreateQuery(D3DQUERYTYPE_EVENT) failed: %s\n"), D3DHEAD, D3D_ErrorString (hr)); } if (d3ddevex) { - //hr = d3ddevex->SetMaximumFrameLatency (vsync < 0 && ap->gfx_vflip <= 0 ? 1 : (vsync ? 2 : 0)); hr = d3ddevex->SetMaximumFrameLatency (vsync ? 1 : 0); if (FAILED (hr)) write_log (_T("%s: SetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr)); @@ -2758,7 +2767,7 @@ void D3D_unlocktexture (void) void D3D_flushtexture (int miny, int maxy) { - if (fulllocked || !texture) + if (fakemode || fulllocked || !texture) return; if (miny >= 0 && maxy >= 0) { RECT r; @@ -2781,6 +2790,11 @@ uae_u8 *D3D_locktexture (int *pitch, bool fullupdate) D3DLOCKED_RECT lock; HRESULT hr; + if (fakemode) { + *pitch = 0; + return fakebitmap; + } + if (D3D_needreset () > 0) return NULL; if (!isd3d () || !texture) @@ -2834,6 +2848,9 @@ bool D3D_renderframe (bool immediate) { static int vsync2_cnt; + if (fakemode) + return true; + if (!isd3d () || !texture) return false; @@ -2863,6 +2880,8 @@ bool D3D_renderframe (bool immediate) void D3D_showframe (void) { + if (!isd3d ()) + return; if (currprefs.turbo_emulation) { if (!(dpp.PresentationInterval & D3DPRESENT_INTERVAL_IMMEDIATE) && wasstilldrawing_broken) { static int frameskip; diff --git a/od-win32/fsdb_mywin32.cpp b/od-win32/fsdb_mywin32.cpp index ea7527fb..992d23db 100644 --- a/od-win32/fsdb_mywin32.cpp +++ b/od-win32/fsdb_mywin32.cpp @@ -45,13 +45,31 @@ int my_mkdir (const TCHAR *name) static int recycle (const TCHAR *name) { - if (currprefs.win32_norecyclebin) { - DWORD dirattr = GetFileAttributes (name); - if (dirattr != INVALID_FILE_ATTRIBUTES && (dirattr & FILE_ATTRIBUTE_DIRECTORY)) + DWORD dirattr = GetFileAttributes (name); + bool isdir = dirattr != INVALID_FILE_ATTRIBUTES && (dirattr & FILE_ATTRIBUTE_DIRECTORY); + + if (currprefs.win32_norecyclebin || isdir) { + if (isdir) return RemoveDirectory (name) ? 0 : -1; - return DeleteFile(name) ? 0 : -1; + else + return DeleteFile (name) ? 0 : -1; } else { SHFILEOPSTRUCT fos; + HANDLE h; + + h = CreateFile (name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (h != INVALID_HANDLE_VALUE) { + LARGE_INTEGER size; + if (GetFileSizeEx (h, &size)) { + if (size.QuadPart == 0) { + CloseHandle (h); + return DeleteFile (name) ? 0 : -1; + } + } + CloseHandle (h); + } + /* name must be terminated by \0\0 */ TCHAR *p = xcalloc (TCHAR, _tcslen (name) + 2); int v; diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index fd3f386a..b83b93ff 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -2198,7 +2198,7 @@ static void inituaegfx (uaecptr ABI) write_log (_T("P96: Blitter disabled in devs:monitors/uaegfx!\n")); flags |= BIF_BLITTER | BIF_NOMEMORYMODEMIX; flags &= ~BIF_HARDWARESPRITE; - if (currprefs.gfx_api && D3D_goodenough () && USE_HARDWARESPRITE) { + if (currprefs.gfx_api && D3D_goodenough () > 0 && USE_HARDWARESPRITE) { hwsprite = 1; flags |= BIF_HARDWARESPRITE; write_log (_T("P96: Hardware sprite support enabled\n")); diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 0b9b740f..5abe9b06 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -650,6 +650,7 @@ static void setmouseactive2 (int active, bool allowpause) } else if (currprefs.win32_active_nocapture_nosound && sound_closed < 0) { resumesoundpaused (); } + setmaintitle (hMainWnd); } else { inputdevice_acquire (FALSE); } diff --git a/od-win32/win32.h b/od-win32/win32.h index 3ff4a251..977eb087 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,8 +19,8 @@ #define LANG_DLL 1 //#define WINUAEBETA _T("") -#define WINUAEBETA _T("2") -#define WINUAEDATE MAKEBD(2012, 5, 18) +#define WINUAEBETA _T("3") +#define WINUAEDATE MAKEBD(2012, 5, 25) #define WINUAEEXTRA _T("") //#define WINUAEEXTRA _T("AmiKit Preview") #define WINUAEREV _T("") diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index d5191738..d79ba3aa 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -2641,8 +2641,7 @@ static bool vblanklaceskip_check (void) // write_log (_T("%d == %d\n"), vblankbaselace_chipset, vblankthread_oddeven); return false; } - getvblankpos (&vp); - write_log (_T("Interlaced frame type mismatch %d<>%d (%d)\n"), vblankbaselace_chipset, vblankthread_oddeven, vp); + write_log (_T("Interlaced frame type mismatch %d<>%d\n"), vblankbaselace_chipset, vblankthread_oddeven); return true; } @@ -2668,7 +2667,7 @@ static unsigned int __stdcall vblankthread (void *dummy) } else if (mode == VBLANKTH_ACTIVE_WAIT) { sleep_millis (1); } else if (mode == VBLANKTH_ACTIVE_START) { - // do not start until vblank has been passed + // do not start until vblank has passed int vp; if (!getvblankpos (&vp)) { // bad things happening @@ -2878,7 +2877,7 @@ int vsync_busywait_do (int *freetime, bool lace, bool oddeven) vblank_prev_time = t; thread_vblank_time = t; frame_missed++; - return true; + return 0; } if (0 || (log_vsync & 1)) { @@ -2917,7 +2916,7 @@ int vsync_busywait_do (int *freetime, bool lace, bool oddeven) vblank_prev_time = read_processor_time () + vblankbasewait1; dooddevenskip = true; - framelost = true; + framelost = false; v = -1; } else if (currprefs.turbo_emulation) { @@ -2933,7 +2932,6 @@ int vsync_busywait_do (int *freetime, bool lace, bool oddeven) vsync_sleep (false); } - prevvblankpos = 0; vp = vblank_wait (); if (vp >= -1) { vblank_prev_time = read_processor_time (); @@ -2963,6 +2961,7 @@ int vsync_busywait_do (int *freetime, bool lace, bool oddeven) framelost = false; } + getvblankpos (&vp); } if (v) { @@ -3112,9 +3111,7 @@ double vblank_calibrate (double approx_vblank, bool waitonly) if (cnt >= total) break; } - vblankbaseadjust = 0; - if (minscanline == 1) - vblankbaseadjust = timezeroonevblank (-1, 1); + vblankbaseadjust = timezeroonevblank (-1, 1); changevblankthreadmode (VBLANKTH_IDLE); @@ -3170,15 +3167,21 @@ skip: vblankbasewait2 = (syncbase / tsum2) * 55 / 100; vblankbasewait3 = (syncbase / tsum2) * 99 / 100 - syncbase / (250 * (vblank_skipeveryother ? 1 : 2)); // at least 2ms before vblank vblankbaselace = lace; - if (vblankbaseadjust < 0) - vblankbaseadjust = 0; - else if (vblankbaseadjust > vblankbasefull / 10) - vblankbaseadjust = vblankbasefull / 10; write_log (_T("VSync %s: %.6fHz/%.1f=%.6fHz. MinV=%d MaxV=%d%s Adj=%d Units=%d %.1f%%\n"), waitonly ? _T("remembered") : _T("calibrated"), tsum, div, tsum2, minscanline, maxvpos, lace ? _T("i") : _T(""), vblankbaseadjust, vblankbasefull, vblankbasewait3 * 100 / (syncbase / tsum2)); + + if (minscanline == 1) { + if (vblankbaseadjust < 0) + vblankbaseadjust = 0; + else if (vblankbaseadjust > vblankbasefull / 10) + vblankbaseadjust = vblankbasefull / 10; + } else { + vblankbaseadjust = 0; + } + remembered_vblank = tsum; vblank_prev_time = read_processor_time (); diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index ae769bde..02c39c1d 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -12742,7 +12742,7 @@ static void values_to_hw3ddlg (HWND hDlg) } } int overlaytype = SendDlgItemMessage (hDlg, IDC_FILTEROVERLAYTYPE, CB_GETCURSEL, 0, 0L); - if (workprefs.gfx_api && D3D_goodenough ()) { + if (workprefs.gfx_api && D3D_goodenough () > 1) { WIN32GUI_LoadUIString (IDS_NONE, tmp, MAX_DPATH); SendDlgItemMessage (hDlg, IDC_FILTEROVERLAY, CB_ADDSTRING, 0, (LPARAM)tmp); SendDlgItemMessage (hDlg, IDC_FILTEROVERLAY, CB_SETCURSEL, 0, 0); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 4caa36fe..bd704e3f 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -3,6 +3,22 @@ - hdd from command line - no-buffer tearing updates +Beta 3: + +- FPS led was always yellow in most non low latency vsync modes. +- Custom input event toggle didn't work (3rd and 4th slots), (2.4.1) +- Custom input event non-toggle mode with qualifiers didn't work correctly. +- Allow D3D RTG hardware sprite if non-power of 2 textures are supported, do not require shader support. +- Do not override currently selected CD image when loading statefile if new CD path does not exist. +- Do not report CD not present state if restoring CD32 statefile that was created with inserted CD. + It would usually cause immediate reboot to CD32 title screen and most CD32 shovelware ports won't care about + the CD after game has been loaded. This has been broken previously many times.. +- Any active breakpoint stopped all interrupts in some situations if 68020 cycle-exact mode. +- "ALT-TAB or middle mouse button untraps mouse - F12 opens settings" window title was missing. +- Uncapture mouse when entering debugger. +- Fixed blank screen in directdraw + no filter mode. (b1) +- Do not move directories or empty files to Windows recycle bin (if recycle bin option enabled). + Beta 2: - Missing harddrive in harddrive dialog if any device returned "too short STORAGE_DEVICE_DESCRIPTOR only x bytes". (2.4.0)