From: Toni Wilen Date: Sat, 19 Apr 2025 18:04:11 +0000 (+0300) Subject: 6000b22 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=ffa4641a8c70d060093d4ab59ee616e4a2ac87e6;p=francis%2Fwinuae.git 6000b22 --- diff --git a/custom.cpp b/custom.cpp index 74ffe4b4..92600b15 100644 --- a/custom.cpp +++ b/custom.cpp @@ -10809,141 +10809,6 @@ static void dmal_fast(void) } } -#if 0 - -static struct denise_fastsprite dfs[MAX_SPRITES]; -static int dfs_num; -static void process_sprites_fast(void) -{ - dfs_num = 0; - if (dmaen(DMA_SPRITE) && !agnus_bsvb && !agnus_vb_active) { - for (int i = 0; i < MAX_SPRITES; i++) { - struct sprite *s = &spr[i]; - struct denise_fastsprite *fs = &dfs[i]; - fs->active = false; - if (!s->dmacycle && s->dmastate) { - s->dmacycle = 1; - } - if (vpos == s->vstart) { - s->dmastate = 1; - s->dmacycle = 1; - if (i == 0) { - cursorsprite(s); - } - } - if (vpos == s->vstop || agnus_vb_active_end_line) { - s->dmastate = 0; - s->dmacycle = 1; - } - if (s->dmacycle) { - bool dodma = false; - - if (1) { -#ifdef AGA - if (s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) { - fs->active = true; - dfs_num++; - continue; - } -#endif - struct rgabuf r = { 0 }; - r.p = &s->pt; - r.pv = *r.p; - uae_u16 pos, ctl; - if (fetchmode_fmode_spr >= 2) { - fs->data64[0] = fetch64(&r); - r.pv += 8; - fs->data64[1] = fetch64(&r); - r.pv += 8; - pos = fs->data64[0] >> 48; - ctl = fs->data64[1] >> 48; - } else if (fetchmode_fmode_spr == 1) { - fs->data[0] = fetch32_spr(&r); - r.pv += 4; - fs->data[1] = fetch32_spr(&r); - r.pv += 4; - pos = fs->data[0] >> 16; - ctl = fs->data[1] >> 16; - } else { - fs->data[0] = fetch16(&r); - r.pv += 2; - fs->data[1] = fetch16(&r); - r.pv += 2; - pos = fs->data[0]; - ctl = fs->data[1]; - } - *r.p = r.pv; - - if (s->dmastate) { - fs->pos = s->pos; - fs->ctl = s->ctl; - fs->active = true; - dfs_num++; - } else { - SPRxPOS(pos, i); - SPRxCTL_DMA(ctl, i); - } - } - } - s->dmacycle = 0; - if (s->dmastate) { - s->dmacycle = 1; - } - } - } -} - -static void draw_line_fast(void) -{ - int dvp = calculate_linetype(linear_display_vpos); - uae_u8 *bplptp[MAX_PLANES]; - int s = display_hstart_cyclewait_skip + display_hstart_cyclewait_skip; - - int bstart = -1; - int blen = -1; - if (dmaen(DMA_BITPLANE) && vdiwstate == diw_states::DIW_waiting_stop && bplcon0_planes > 0) { - for (int i = 0; i < MAX_PLANES; i++) { - bplptp[i] = get_real_address(bplpt[i]); - } - bstart = ddfstrt + 3 + fetchstart; - blen = ((ddfstop - ddfstrt + fetchunit - 1) & ~(fetchunit - 1)) + fetchunit; - if (blen < 0) { - blen = 0; - } - blen += 7; - blen >>= 3; - bstart -= s; - bstart *= 4; - } - - int wclks = wclks_prev; - int dstart = s * 4 + 2; - int dlen = maxhpos * 4; - - draw_denise_line_fast(bplptp, bstart, blen, dvp, nextline_how, rga_denise_cycle_count, dstart, wclks, agnus_vb_active, dfs_num > 0 ? dfs : NULL); - - if (dmaen(DMA_BITPLANE) && vdiwstate == diw_states::DIW_waiting_stop && bplcon0_planes > 0) { - int planes = GET_PLANES(BPLCON0_Agnus_mask(bplcon0)); - // first BPL1DAT position - int len = ((ddfstop - ddfstrt + fetchunit - 1) & ~(fetchunit - 1)) + fetchunit; - len >>= fetchstart_shift; - for (int bpl = 0; bpl < planes; bpl++) { - int mod = 0; - if (fmode & 0x4000) { - if (((diwstrt >> 8) ^ (vpos ^ 1)) & 1) { - mod = bpl2mod; - } else { - mod = bpl1mod; - } - } else { - mod = (bpl & 1) ? bpl2mod : bpl1mod; - } - bplpt[bpl] += mod + len * fetchmode_bytes; - } - } -} -#endif - static void do_draw_line(void) { if (!has_draw_denise()) { diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index e803cd46..89efd2f1 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -1413,21 +1413,7 @@ static int screencap(LPCVOID pData, struct AmigaMonitor *mon) if (rpsc->szScreenFiltered[0]) ok = screenshotf(0, rpsc->szScreenFiltered, 1, 1, 0, NULL); if (rpsc->szScreenRaw[0]) { -#if 0 - struct vidbuf_description *avidinfo = &adisplays[0].gfxvidinfo; - struct vidbuffer vb; - int w = avidinfo->drawbuffer.inwidth; - int h = get_vertical_visible_height(true); - allocvidbuffer(0, &vb, w, h, avidinfo->drawbuffer.pixbytes * 8); - set_custom_limits(-1, -1, -1, -1); - draw_frame(&vb); - ok |= screenshotf(0, rpsc->szScreenRaw, 1, 1, 1, &vb); - if (log_rp & 2) - write_log(_T("Rawscreenshot %dx%d\n"), w, h); - freevidbuffer(0, &vb); -#else ok |= screenshotf(0, rpsc->szScreenRaw, 1, 1, 1, NULL); -#endif } screenshotmode = ossm; if (log_rp & 2) diff --git a/od-win32/win32.h b/od-win32/win32.h index 39fcd529..d4506a9b 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("21") +#define WINUAEBETA _T("22") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2025, 4, 13) +#define WINUAEDATE MAKEBD(2025, 4, 19) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 507df238..223c8242 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,21 @@ +Beta 22: + +- Fast mode drawing + HAM + left TV overscan blanking part of display caused HAM artifacts. +- Fast mode shres HAM in hires or hires HAM in lores didn't include skipped pixels in HAM color calculation. +- Fast mode drawing didn't mask bitplane addresses with chip ram address mask. +- Fast mode Remove interlace artifacts scrolling glitches mostly fixed. +- Garbage was possible in right border if bitplane ended earlier than HDIW. Fast mode only. +- Filter settings should not limit display width or height in extreme or higher overscan modes, extreme (and higher) should always show whole display area. +- Hardware emulated RTG boards didn't have vsync timing (b21) +- DIWHIGH state restore was unreliable. +- Automatic scaling (and related filters) now also work correctly if HDIW end never matches. +- Filtered lores option supported again. (If Amiga mode resolution is higher than display panel mode: normally every other pixel is dropped, filtered lores mode takes average color of two pixels) +- VPOS(H)W write refresh rate changes work again. (For example Wings of Death, DynaBlaster fake 60Hz). Non-CE modes only accept forwards vpos move and not out of range values. +- RTG with default settings (all 4 checkboxes in left side of RTG panel unticked) display positiong fixed. +- Adjusted display position and screenshot position/size slightly to better match older versions. + +Beta 21: - Filter panel TV modes and filter overscan blanking work correctly again (not doing anything since b1). Extra horizontal and vertical blanking handling changed again, might cause side-effects. - NTSC horizontal long/short line artifacts are gone in TV overscan modes. NOTE: NTSC still have problems with some filter modes. diff --git a/vm.cpp b/vm.cpp index 6b1fc1d2..c043673d 100644 --- a/vm.cpp +++ b/vm.cpp @@ -158,7 +158,7 @@ static void *uae_vm_alloc_with_flags(uae_u32 size, int flags, int protect) int mmap_prot = protect_to_native(protect); #endif -#if !defined(CPU_64_BIT) or defined(__APPLE__) +#if !defined(CPU_64_BIT) || defined(__APPLE__) flags &= ~UAE_VM_32BIT; #endif if (flags & UAE_VM_32BIT) {