]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2420b3
authorToni Wilen <twilen@winuae.net>
Fri, 25 May 2012 17:31:11 +0000 (20:31 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 25 May 2012 17:31:11 +0000 (20:31 +0300)
17 files changed:
akiko.cpp
blkdev.cpp
bsdsocket.cpp
custom.cpp
debug.cpp
drawing.cpp
inputdevice.cpp
memory.cpp
newcpu.cpp
od-win32/direct3d.cpp
od-win32/fsdb_mywin32.cpp
od-win32/picasso96_win.cpp
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt

index a812d61a416162f0b7e2913d079547bc357e888f..d220aa98c1ca32c057e2f25bb22780bece10e908 100644 (file)
--- 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 ());
index ca065dad9dbdee59c8fb222db9b55e522ee19d4d..2f89581b2987072db613973476a7100cd4e95293 100644 (file)
@@ -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) {
index 291d244e3c5d8df1865e824c020e508ccc3d7ff7..97157d96fad32668ab82b4c791e2479403507452 100644 (file)
@@ -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;
 }
 
index c9ff492597bf4e314a0128ed5df21d479325e7dc..393e74b71aa715a2af63b44fbdd0490356207b0f 100644 (file)
@@ -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 ();
index 9731c7a04d3df9ca7b3398f8c0a1bfde7b1e89be..65d14b082a4187c08ff0cdaed109e731c64e0a1a 100644 (file)
--- 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;
index b3072ece89fec7c3daead4b17b0b81108e395d7a..6f7ea8f149e3b8b6f74f5dc19b689dec918b2986 100644 (file)
@@ -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;
 }
 
 /*
index 244eaf566fc2b7fcbd1548438089348002e6d1e4..f1595ad662e575c7e59e4d7b19cea773c5252e16 100644 (file)
@@ -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;
index 420b2fbbe355108b1d5ae775c7acf18f8f79284c..b6f48db65344bebe2637d52ce8d7b9fa5008dac7 100644 (file)
@@ -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;
 }
index 775f4223e2f4a1e0f5218d75bdab285b86f6e4b8..3ffe333a2c64645b17408986755695401eedb434 100644 (file)
@@ -4002,6 +4002,7 @@ static void m68k_run_2ce (void)
 {
        struct regstruct *r = &regs;
        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;
        }
 }
 
index 4bef51afdb9c9189f4fbf3f3a5f3ae1a87a6150c..30858aed5dfd77346850da5e138f952304af67d5 100644 (file)
@@ -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;
index ea7527fb1a6504013ef8c98f54d7020961cf0ba2..992d23dbbade338aac4584b4a3f9ca39c94504da 100644 (file)
@@ -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;
index fd3f386a98cb7baab92981d4f9f907d0d80005ef..b83b93ff03620961124f67ce8e2d5b292f6907b3 100644 (file)
@@ -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"));
index 0b9b740f7fdcf0f6dd2b79dbdee056b7e0bba95c..5abe9b06b14bc500aa1744e47ef3205a7790e45d 100644 (file)
@@ -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);
        }
index 3ff4a251de78ccaaa58c155f169f592f795556f8..977eb0878e82e2771c473529007676f4bc21ad10 100644 (file)
@@ -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("")
index d5191738c44b5aa5fffd045c04e802c07f8919fd..d79ba3aaa278e8bc4b6c6c71058c5277015104b6 100644 (file)
@@ -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 ();
        
index ae769bde867d2179625fd6cdee49cba87083acbb..02c39c1d24600a9babca0586f4c793ff2b068e83 100644 (file)
@@ -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);
index 4caa36feeae7e3fdcb27fb4220560ed9ab61d71d..bd704e3faadb06e92d7099a6aa438d3229f094f8 100644 (file)
@@ -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)