From: Toni Wilen Date: Sun, 7 Feb 2010 10:18:00 +0000 (+0200) Subject: imported winuaesrc2020b9.zip X-Git-Tag: 2100~30 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=6a0526b410bc8387079bfc3063065d4e1b19a5c0;p=francis%2Fwinuae.git imported winuaesrc2020b9.zip --- diff --git a/custom.c b/custom.c index 04cf5713..5f5138f6 100644 --- a/custom.c +++ b/custom.c @@ -1962,6 +1962,14 @@ static void record_color_change (int hpos, int regno, unsigned long value) curr_color_changes[idx + 1].regno = -1; } record_color_change2 (hpos, regno, value); + + if (regno == 0 && value != 0 && vpos >= 32) { + // autoscale if COLOR00 changes in top or bottom of screen + if (vpos < first_planes_vpos || vpos < plffirstline_total) + plffirstline_total = first_planes_vpos = vpos - 2; + if (vpos > last_planes_vpos || vpos > plflastline_total) + plflastline_total = last_planes_vpos = vpos + 3; + } } static void record_register_change (int hpos, int regno, unsigned long value) @@ -3421,12 +3429,10 @@ static void INTENA (uae_u16 v) uae_u16 old = intena; setclr (&intena, v); - if (old != intena || (v & 0x8000)) { - if (use_eventmode ()) - event2_newevent_xx (-1, INT_PROCESSING_DELAY * CYCLE_UNIT, intena, send_intena_do); - else - send_intena_do (intena); - } + if (use_eventmode ()) + event2_newevent_xx (-1, INT_PROCESSING_DELAY * CYCLE_UNIT, intena, send_intena_do); + else + send_intena_do (intena); #if 0 if (v & 0x40) write_log (L"INTENA %04X (%04X) %p\n", intena, v, M68K_GETPC); @@ -3441,12 +3447,10 @@ void INTREQ_0 (uae_u16 v) if (v & (0x0080 | 0x0100 | 0x0200 | 0x0400)) audio_update_irq (v); - if (old != intreq || (v & 0x8000)) { - if (use_eventmode ()) - event2_newevent_xx (-1, INT_PROCESSING_DELAY * CYCLE_UNIT, intreq, send_intreq_do); - else - send_intreq_do (intreq); - } + if (use_eventmode ()) + event2_newevent_xx (-1, INT_PROCESSING_DELAY * CYCLE_UNIT, intreq, send_intreq_do); + else + send_intreq_do (intreq); } void INTREQ (uae_u16 data) @@ -6868,8 +6872,22 @@ STATIC_INLINE void decide_fetch_ce (int hpos) decide_fetch (hpos); } +STATIC_INLINE void ipl_check (void) +{ + if (debug_dma) { + if (regs.ipl == regs.ipl_pin) + return; + regs.ipl = regs.ipl_pin; + record_dma_event (DMA_EVENT_INTREQ, current_hpos (), vpos); + } else { + regs.ipl = regs.ipl_pin; + } +} + #define BLIT_NASTY 4 +static int ipl_checked; + // blitter not in nasty mode = CPU gets one cycle if it has been waiting // at least 4 cycles (all DMA cycles count, not just blitter cycles, even // blitter idle cycles do count!) @@ -6903,6 +6921,9 @@ STATIC_INLINE int dma_cycle (void) } regs.ce020memcycles -= CYCLE_UNIT; do_cycles (1 * CYCLE_UNIT); + if (!ipl_checked) + ipl_check (); + ipl_checked = 1; /* bus was allocated to dma channel, wait for next cycle.. */ } return hpos_old; @@ -6920,9 +6941,11 @@ uae_u32 wait_cpu_cycle_read (uaecptr addr, int mode) int hpos; struct dma_rec *dr; + ipl_checked = 0; hpos = dma_cycle (); - regs.ipl = regs.ipl_pin; do_cycles_ce (CYCLE_UNIT); + if (!ipl_checked) + ipl_check (); #ifdef DEBUGGER if (debug_dma) { @@ -6995,9 +7018,11 @@ void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v) { int hpos; + ipl_checked = 0; hpos = dma_cycle (); - regs.ipl = regs.ipl_pin; do_cycles_ce (CYCLE_UNIT); + if (!ipl_checked) + ipl_check (); #ifdef DEBUGGER if (debug_dma) { diff --git a/drawing.c b/drawing.c index 4ba9c468..4135e376 100644 --- a/drawing.c +++ b/drawing.c @@ -350,16 +350,18 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy) ret = -1; if (doublescan <= 0) { - if (diwfirstword_total < (48 << currprefs.gfx_resolution)) - diwfirstword_total = 48 << currprefs.gfx_resolution; - if (diwlastword_total > (448 << currprefs.gfx_resolution)) - diwlastword_total = 448 << currprefs.gfx_resolution; + int min = coord_diw_to_window_x (116); + int max = coord_diw_to_window_x (460); + if (diwfirstword_total < min) + diwfirstword_total = min; + if (diwlastword_total > max) + diwlastword_total = max; ddffirstword_total = coord_hw_to_window_x (ddffirstword_total * 2 + DIW_DDF_OFFSET); ddflastword_total = coord_hw_to_window_x (ddflastword_total * 2 + DIW_DDF_OFFSET); - if (ddffirstword_total < (48 << currprefs.gfx_resolution)) - ddffirstword_total = 48 << currprefs.gfx_resolution; - if (ddflastword_total > (448 << currprefs.gfx_resolution)) - ddflastword_total = 448 << currprefs.gfx_resolution; + if (ddffirstword_total < min) + ddffirstword_total = min; + if (ddflastword_total > max) + ddflastword_total = max; if (0 && !(currprefs.chipset_mask & CSMASK_AGA)) { if (ddffirstword_total > diwfirstword_total) diwfirstword_total = ddffirstword_total; diff --git a/newcpu.c b/newcpu.c index 66ef86a8..882dd5cc 100644 --- a/newcpu.c +++ b/newcpu.c @@ -2575,7 +2575,7 @@ static void do_trace (void) // handle interrupt delay (few cycles) STATIC_INLINE int time_for_interrupt (void) { - if (regs.ipl > 0 && (regs.ipl > regs.intmask || regs.ipl == 7)) { + if (regs.ipl > regs.intmask || regs.ipl == 7) { #if 0 if (regs.ipl == 3 && current_hpos () < 11) { write_log (L"%d\n", current_hpos ()); @@ -2591,9 +2591,6 @@ void doint (void) { if (currprefs.cpu_cycle_exact) { int newipl = intlev (); - - if (newipl == regs.ipl_pin) - return; regs.ipl_pin = newipl; if (currprefs.cpu_model != 68000) regs.ipl = regs.ipl_pin; diff --git a/od-win32/blkdev_win32_ioctl.c b/od-win32/blkdev_win32_ioctl.c index b867d1dc..4f800342 100644 --- a/od-win32/blkdev_win32_ioctl.c +++ b/od-win32/blkdev_win32_ioctl.c @@ -1198,7 +1198,7 @@ static struct device_info *info_device (int unitnum, struct device_info *di) di->lun = 0; di->media_inserted = 0; di->bytespersector = 2048; - _stprintf (di->mediapath, L"\\\\.\\%s", ciw32[unitnum].drvletter); + _stprintf (di->mediapath, L"\\\\.\\%c:", ciw32[unitnum].drvletter); if (fetch_geometry (unitnum, di)) { // || ioctl_command_toc (unitnum)) di->media_inserted = 1; ciw32[unitnum].blocksize = di->bytespersector; diff --git a/od-win32/win32.h b/od-win32/win32.h index 61bf955a..2a094c5b 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -18,8 +18,8 @@ #define WINUAEPUBLICBETA 1 #define LANG_DLL 1 -#define WINUAEBETA L"8" -#define WINUAEDATE MAKEBD(2010, 2, 6) +#define WINUAEBETA L"9" +#define WINUAEDATE MAKEBD(2010, 2, 7) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32_filesys.c b/od-win32/win32_filesys.c index 3be4f488..6b0e9d87 100644 --- a/od-win32/win32_filesys.c +++ b/od-win32/win32_filesys.c @@ -140,6 +140,9 @@ static void filesys_addexternals (void) DWORD dwDriveMask; int drvnum = 0; + if (!currprefs.win32_automount_cddrives && !currprefs.win32_automount_netdrives + && !currprefs.win32_automount_drives && !currprefs.win32_automount_removabledrives) + return; errormode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); dwDriveMask = GetLogicalDrives (); dwDriveMask >>= 2; // Skip A and B drives... diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index ba99b72c..cf874bb8 100644 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -11329,12 +11329,8 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM if (item != CB_ERR) { workprefs.gfx_filter_autoscale = item; if (workprefs.gfx_filter_autoscale && workprefs.gfx_filter == 0) { - if (D3D_goodenough ()) { - workprefs.gfx_filter = 2; // D3D - workprefs.gfx_filter_filtermode = 2; - } else { + if (!workprefs.gfx_api) workprefs.gfx_filter = 1; // NULL - } } values_to_hw3ddlg (hDlg); enable_for_hw3ddlg (hDlg); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 9a748e3b..0411a3fd 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,16 @@ +Beta 9: + +- CE 68000 interrupt handling update, Spectre Party Demo / + Phenomena works without jumping +- autoscale left and right border position restricted to sane max + overscan values +- enabling autoscale changed filter mode to scale2x +- autoscale detects COLOR00 (background color) changes outside of + bitplane area +- do not enumerate drives if every "Include .. drives" is not ticked +- CD32/CDTV crash fix (IOCTL CD crash) (b8?) + Beta 8: - do not use D3D9Ex if no v3 shader or dynamic texture support diff --git a/scsiemul.c b/scsiemul.c index a424f96e..097ae022 100644 --- a/scsiemul.c +++ b/scsiemul.c @@ -675,14 +675,14 @@ static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) put_byte (request + 31, 32); return get_byte (request + 31); } - put_byte (request+31, 0); + put_byte (request + 31, 0); if ((flags & 1) && dev_canquick (dev, request)) { if (dev_do_io (dev, request)) write_log (L"device %s command %d bug with IO_QUICK\n", getdevname (pdev->type), command); return get_byte (request + 31); } else { add_async_request (dev, request, ASYNC_REQUEST_TEMP, 0); - put_byte (request+30, get_byte (request + 30) & ~1); + put_byte (request + 30, get_byte (request + 30) & ~1); write_comm_pipe_u32 (&dev->requests, request, 1); return 0; }