}
}
-#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()) {
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)
#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")
+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.
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) {